Skip to main content
Built-in extractor names are a deprecated alias — collections are now created by picking features. This pipeline is selected with features: ["video_search"]. Existing feature_extractor configs keep working; see the migration guide.

View on GitHub

Runnable reference for this extractor — inputs, parameters, output fields, embedding models, and copy-paste examples. Auto-generated from the live registry.
The universal extractor is an all-in-one feature extractor that handles image, video, audio, and documents through Google’s Gemini APIs. It produces a single 3072-dimensional embedding (Gemini Embedding 2) per object alongside rich text extraction — AI-generated descriptions, OCR for images and documents, and transcription for audio and video. It runs on Celery (not Ray) for zero cluster-startup latency, making it a fast path for mixed-modality corpora.
View extractor details at api.mixpeek.com/v1/collections/features/extractors/universal_extractor_v1 or fetch programmatically with GET /v1/collections/features/extractors/{feature_extractor_id}.

Pipeline Steps

  1. Resolve input — apply input_mappings to get the file URL/path from the source object (content field).
  2. Detect modality — classify the object as image, video, audio, or document.
  3. Segment (if needed) — video and audio are processed in up to max_video_segments 30s segments; documents up to max_document_pages pages.
  4. Gemini embedding — generate a 3072-d Gemini Embedding 2 vector (output_dimensionality configurable 256–3072).
  5. Text extraction (if extract_text) — OCR for images/documents, transcription for audio/video.
  6. Description (if generate_description) — Gemini vision/understanding produces a natural-language description.
  7. Output — one document per object (or per segment/page for chunked content).

When to Use

When NOT to Use

Input Schema

Supported input types: IMAGE, VIDEO, AUDIO, PDF, TEXT, STRING.

Output Schema

Output by Modality

The extractor writes one document per unit: an image is one document, video and audio split into 30-second segments, and a document splits into pages. Every document carries universal_extractor_v1_embedding, modality, text, description, segment_index, and segment_total. The table lists the fields each modality adds and what fills text and description. covered_s is the number of seconds the indexed segments span, capped by duration_s. It shows when max_video_segments cut a long file short. Two parameters change the fields. generate_description: false sets description to null. extract_text: false leaves OCR text, the transcript, and page text out of text. If no segment of a video or audio file produces a document, the extractor writes one document for the whole file. That document has a null text and no start_time_s or end_time_s.

What the Extractor Does Not Emit

The output has no field for a hook segment, a music or tone descriptor, keyframes, scene boundaries, or faces. Video segments are fixed 30-second windows that start at 0. The first segment (segment_index 0) spans the first 30 seconds of the file and cannot be narrowed to the first 3. The video description is free text, so no music or tone value is searchable as its own field. To get these fields, use one of two paths:

Parameters

Dimensions are locked at namespace creation. Switching output_dimensionality on an existing namespace requires a migration since the vector index dimensionality is fixed.

Configuration Examples

Performance & Costs

Vector Index

Limitations

  • External dependency: Requires Google Gemini API availability; subject to its rate limits.
  • Per-object cost: Higher per-object cost than self-hosted single-modality extractors.
  • Segment/page caps: Video beyond max_video_segments and documents beyond max_document_pages are truncated.
  • Download ceiling: Files larger than max_file_download_mb are skipped on the Celery fast-path.