NEWVectors or files. Pick a path.Start →

    Face Search Pipeline

    Detect, align, and embed faces across your image and video library, then search by face identity. Uses SCRFD for detection and ArcFace for 512-dimensional identity embeddings, enabling large-scale face recognition and matching.

    image
    video
    Multi-Tier
    from mixpeek import Mixpeek
    client = Mixpeek(api_key="YOUR_API_KEY", namespace="face-search")
    # 1. A bucket for the video content, and a collection that detects, aligns and embeds every face with ArcFace
    bucket = client.buckets.create(
    bucket_name="video-content",
    bucket_schema={
    "properties": {
    "video": {
    "type": "video",
    },
    },
    },
    )
    collection = client.collections.create(
    collection_name="video_faces",
    source={"type": "bucket", "bucket_ids": [bucket["bucket_id"]]},
    feature_extractor={
    "feature_extractor_name": "face_identity_extractor",
    "version": "v1",
    },
    )
    # 2. Upload and process
    client.buckets.upload(
    bucket["bucket_id"],
    blobs=[{"property": "video", "type": "video", "data": "s3://your-bucket/videos/panel-2026-06.mp4"}],
    )
    client.collections.trigger(collection["collection_id"])
    # 3. An example face searched against the ArcFace index, then labeled from tax_your_known_faces, a flat taxonomy over a collection of reference photos
    retriever = client.retrievers.create(
    retriever_name="face-search",
    collection_identifiers=["video_faces"],
    input_schema={
    "face": {
    "type": "image",
    "required": True,
    },
    },
    stages=[
    {
    "stage_name": "search",
    "stage_id": "feature_search",
    "parameters": {
    "searches": [
    {
    "feature_uri": "mixpeek://face_identity_extractor@v1/insightface__arcface",
    "query": {
    "input_mode": "content",
    "value": "{{INPUT.face}}",
    },
    "top_k": 50,
    },
    ],
    "final_top_k": 50,
    },
    },
    {
    "stage_name": "label",
    "stage_id": "taxonomy_enrich",
    "parameters": {
    "taxonomy_id": "tax_your_known_faces",
    "top_k": 1,
    },
    },
    ],
    )
    # 4. Search
    results = client.retrievers.execute(
    retriever["retriever_id"],
    inputs={
    "face": "https://example.com/person-photo.jpg",
    },
    )
    for doc in results["documents"]:
    print(doc["timestamp"], doc["score"])

    Feature Extractors

    Face Identity Extractor

    Detect, align, and embed faces to 512-D ArcFace vectors across image, video and PDF, using SCRFD for detection.

    Retriever Stages

    feature search

    Search and filter documents by vector similarity using feature embeddings

    filter

    taxonomy enrich

    Classify documents against taxonomy nodes via vector similarity

    apply

    Frequently asked questions

    What is the minimum face size for detection?

    SCRFD can detect faces as small as 20x20 pixels in the source image. For best search accuracy, query images should be at least 200x200 pixels.

    How does face search handle multiple faces in one frame?

    Each detected face is extracted, aligned, and stored as a separate document with its own embedding. A single video frame can produce multiple face documents.

    Is face search robust to angles and lighting changes?

    Yes. ArcFace embeddings are trained for pose, illumination, and expression invariance. Profile and partial faces may have lower match scores but still work.