NEWVectors or files. Pick a path.Start →

    Changelog

    Release Notes

    New capabilities and performance improvements across the Mixpeek platform. Every entry links to relevant documentation and examples.

    July 2026

    APIPerformance

    Top-level pre_filters on a retriever execute are now applied, not silently dropped

    `pre_filters` is a stage-level field, so posting it at the top level of a retriever execute request used to fall through and vanish — the call returned 200 with unfiltered results that still looked valid. A top-level `pre_filters` is now promoted into the request's filters so it actually narrows the search, and the ad-hoc execute path rejects a misplaced one with a clear error instead of ignoring it.

    PlatformPerformance

    Files with unusual characters in their names now sync reliably

    When files sync to object storage, the storage key is built from the source filename. Filenames containing control characters or other characters object storage disallows — for example a stray line break embedded in an ad-creative name — could fail the write and stall that file. Those characters are now sanitized across the full disallowed set, so files with unusual names get indexed instead of erroring.

    EnginePerformance

    Stuck ingestion batches now detect and recover on their own

    A batch could stay in PROCESSING even after its underlying engine job had actually finished, failed, or stopped — a 'zombie' whose outcome never propagated back. The batch reaper now checks the real engine job state and reconciles those cases (marking them done or resubmitting), so a batch no longer hangs indefinitely when its job result didn't make it back to the batch record.

    APIPerformance

    A degraded search result is never cached and served to the next request

    The retriever result cache and the feature-search stage cache decided whether to store a response based only on whether it had results — so a response produced while a backend was degraded could be cached and re-served to later callers as if it were healthy. Both caches now skip caching whenever a response is marked degraded or partial, so a transient hiccup can't get stuck in the cache.

    PlatformPerformance

    Storage syncs no longer pile up duplicate runs

    The scheduler could enqueue a fresh storage-sync run every few minutes even when a previous run for the same bucket was still in progress — on large libraries these piled up faster than they drained. A scheduled sync is now skipped while a prior run for the same config is still active, so long-running syncs finish without a backlog of redundant duplicate runs.

    Syncs docs
    APIPerformance

    Retriever searches return up to 8 seconds faster

    On some deployments a retriever /execute call could spend around 8 seconds after the search itself finished — the pipeline stages took roughly 700ms while the whole response took nearly 9 seconds. The gap was generating the signed download URLs attached to each result, done one-at-a-time with uncached credentials. Those URLs are now produced with cached, parallel credentials, so results come back about as fast as the search runs.

    APIPerformance

    Pass a plain list of filter conditions and we read it as ‘all of these’

    You could create a retriever with a bare list of filter conditions, but every execute then failed with a raw validation error pointing at an internal type — a retriever that was creatable yet could never run. A bare list now coerces to an AND of its conditions, so it works everywhere filters are used (attribute filters, pre-filters, and more). An empty list is still rejected, since a filter that matches everything is almost never what you meant.

    APIPerformance

    Use a precomputed embedding directly in a search stage

    You can pass a precomputed embedding to a retriever's feature_search stage in either its own `value` field or the `vector` field (the name the standalone feature-search endpoint uses) — both are now accepted. Previously passing it as `vector` silently dropped it and the search failed with a generic ‘vector input is empty’; now bring-your-own-vector search works whichever field name you use.

    StudioFeature

    Create a new version of a taxonomy in Studio

    You could already browse a taxonomy's version history, but there was no way to create a new version from the UI. A ‘Create new version’ action is now on the taxonomy detail page, next to Clone, so you can iterate on a taxonomy and keep every prior version.

    StudioFeature

    Location fields now render on a map in Studio

    When a document or object has a geographic point field (latitude and longitude), Studio's detail view now shows it as a readable coordinate plus a small map instead of raw JSON — the same per-field treatment faces and media files already get. Pairs with filtering search results by location.

    Open Studio
    APIPerformance

    ‘Drop unsafe content’ now fails closed

    When a retriever is set to drop unsafe content, a transient error in the NSFW classifier used to be treated the same as a ‘verified safe’ result — so a hiccup could quietly let unsafe content through. A failed classification is now treated as unsafe and dropped, so ‘drop if unsafe’ holds even when the classifier errors.

    PlatformPerformance

    Data export and deletion requests work again

    The GDPR data-subject endpoints — request a data export, request deletion, and list requests — were failing on every call due to an internal API mismatch. All three now work, so privacy requests can be submitted and tracked.

    StudioPerformance

    Sorting your Studio tables works again

    Clicking a column header to sort your collections, buckets, clusters, taxonomies, namespaces, or retrievers had quietly stopped changing the order — the sort control was there, but the request dropped the sort instruction on the way to the API, so ascending and descending looked identical. Sorting now works across every Studio table, so ordering by name, date, or size actually reorders the list.

    Open Studio
    APIFeature

    When a search comes back empty, the error now tells you why

    If you called a retriever with the wrong input key — say `image_url` when its searches read `query` — you'd get an empty result or an error that named only an internal field, with no way to see what went wrong. The error now lists the exact input keys the retriever expects alongside the keys your request actually sent, and execute responses call out removed legacy fields, so an empty result explains itself instead of leaving you guessing.

    StudioFeature

    Image search demos now give you example images to try

    Image-input retrievers like face search and search-by-image used to show only a bare upload box — even when the demo said "pick an example" — so you couldn't try them without supplying your own photo. They now show clickable example thumbnails that fill the input and run the search in one click, and inputs that expect text no longer render as file-upload boxes by mistake.

    Vector StorePerformance

    Hybrid search no longer comes back empty when your data is there

    In some namespaces a hybrid (keyword + vector) search could return zero results even though the content was indexed: an empty, unscoped index was shadowing the namespace-scoped index that actually held your vectors. Hybrid search now resolves to the data-bearing index the same way the other search paths do, so it returns the matches it should.

    StudioPerformance

    Your dashboard shows the real number of collections and buckets

    The monitoring and namespace summary cards counted only the first page of each list, so a namespace with 18 collections could read "10". The cards now use the authoritative totals, and the sidebar count badges no longer hang on a loading skeleton when a count is slow — you see the true numbers.

    Open Studio
    StudioFeature

    See what's inside a sample namespace before you create it

    When you pick a sample template in Studio, the card now shows what you're about to get before you commit: a plain-language description of the corpus, a few example queries you can run against it, and a "ready in ~5 min" estimate. The document counts also stopped including Mixpeek's internal placeholder collections, so "1,465 documents in 5 collections" now reflects only the collections that actually hold searchable content. Picking a starting dataset is no longer a guess.

    Open Studio
    StudioPerformance

    Test a retriever in Studio without filling in every optional field

    The Execute button in the retriever test panel could render disabled with no clear reason on retrievers whose collections come from their pipeline stages rather than a top-level list — so typing a query and clicking Execute did nothing. Execute now only disables while a request is in flight or when a retriever has no stages at all, and it reads the collections from the pipeline the same way the API does. Numeric test inputs are also sent as numbers (not strings), blank optional fields are omitted, and the empty-input hint now shows the field name the API actually expects. If collections genuinely can't resolve, you get a clear error instead of a dead button.

    EngineFeature

    Transcription now runs on the audio inside your videos, not just standalone audio files

    Video ingestion now extracts and persists each scene's audio track, so speech-to-text runs on video content and returns real transcripts instead of empty results. Videos that genuinely have no audio track are marked as visual-only rather than failing, and when a transcript can't be produced the reason is reported per item plus in an aggregated warning — so you can tell an intentionally silent clip from an actual problem.

    EnginePerformance

    Clustering across multiple features no longer fails when one of them is sparse

    When you cluster a collection across several feature spaces independently (say a Gemini embedding and an E5 embedding), a feature that only covers a handful of documents used to abort the entire job with a "no members" error — taking the healthy feature spaces down with it. Now a feature space with too little coverage is skipped up front, one that produces no clusters degrades to the spaces that did, and the run finishes with results plus a record of which spaces were skipped and why. The job only fails when every feature space comes up empty.

    StudioPerformance

    A clear signal while a new namespace is still building

    Creating a namespace from a sample template re-extracts the data on your target rather than copying it, which takes a few minutes. During that window the namespace looked permanently empty — you could search it, get nothing back, and reasonably conclude the product was broken. A dismissible banner now follows you across every namespace view while a clone is still materializing, and it distinguishes "still building" from "ready but some collections are still filling in," naming which collections aren't populated yet instead of claiming done on no evidence.

    Open Studio
    APIFeature

    The create-namespace API now accepts `namespace` as well as `namespace_name`

    Because the header is `X-Namespace`, callers and agents naturally sent `{"namespace": "..."}` in the create-namespace body — and got a 422. The endpoint now accepts `namespace` and `name` as aliases for `namespace_name` (explicit `namespace_name` still wins if you send more than one), so the request works the way most people write it the first time.

    API reference
    StudioPerformance

    Already subscribed? Subscribing again now opens your billing portal instead of risking a duplicate

    If you already had an active subscription, going through the subscribe flow again could mint a second Stripe checkout and leave you with a duplicate subscription. The subscribe endpoint now checks Stripe for an existing active subscription before creating any checkout: if you already have one, it returns your billing portal — where you can manage or change your plan — instead of a new checkout, and Studio sends you straight there rather than showing an error. No more accidental double subscriptions.

    StudioPerformance

    A background analytics call can no longer sign you out

    A background visitor-signal capture that runs for anonymous visitors could hit a 401 loop and trigger a sign-out — occasionally logging out people who were actually signed in. That capture now never forces a logout on an already-authenticated session, so a background request can't end your session out from under you.

    Open Studio
    EnginePerformance

    iconik library syncs keep progressing under rate limits instead of stalling

    When iconik rate-limited a running sync (HTTP 429), Mixpeek could fall back to its most expensive full re-scan mode — which also can't advance the sync's checkpoint — creating a feedback loop where the extra load caused more rate limiting and the sync stopped making forward progress. A rate-limited response is no longer treated as a signal to re-scan: the sync now backs off and retries, and the collection-availability check is cached briefly so parallel workers on the same connection don't each re-probe. Large iconik libraries sync steadily under load instead of getting stuck re-scanning.

    APIPerformance

    Your object metadata now reliably flows into documents

    Custom metadata on your source objects — brand, job ID, dates, status flags, anything you attach — could be dropped when producing documents, so metadata-driven features (attribute filters, recency ranking, brand/job scoping) silently had nothing to work with unless you'd explicitly configured field passthrough. Object metadata now always carries into the documents it produces by default, across both the extraction path and text extraction, so the fields you attach at ingest are there to filter and rank on.

    APIPerformance

    Documents without edges no longer break listing and retrieval

    A document written with an explicit empty-edges value could silently fail validation on read: listing quietly dropped those documents, and any retriever whose results touched an edge-less document returned zero results with a 200 status — an error visible only with explain mode on. Empty and missing edge values are now both handled, so reads return every document and retrievers stop mysteriously coming back empty.

    EnginePerformance

    Resubmitted batches are no longer instantly killed as stalled

    When you resubmitted a batch, its new run inherited the previous run's stall checkpoint — so the fresh job, reporting zero processed so far, was measured against the old run's clock and force-terminated within minutes as 'stalled.' The stall checkpoint is now tracked per run, so a resubmitted batch starts with a clean slate and runs to completion.

    StudioPerformance

    New signups no longer bounce between org creation and the plan page

    Immediately after creating a workspace, the new organization membership hadn't yet propagated into the session token — so the app could conclude 'no org' and send a brand-new signup to organization creation while the checkout gate wanted the plan page, a loop that dropped real signups. Studio now recognizes a just-created org from its creation evidence, so fresh signups go straight to plan selection instead of churning.

    StudioFeature

    Explore the marketplace and sample data free, before you pick a plan

    Free organizations can now browse the full marketplace of live retrievers and a populated sample-data namespace read-only — no card required — instead of being bounced to the plan page from everything but a short exempt list. Creating your own retrievers still starts a plan, but you can now experience the depth and breadth of the platform on real data first. Gated organizations also land on the marketplace playground by default now, rather than an empty own-retrievers list.

    APIFeature

    Filter search results by geographic location

    Retrievers now support geospatial filter operators, so you can constrain a search to a bounding box, a radius around a point, or a polygon — combine 'find visually similar storefronts' with 'within 5km of this location' in one query. Documented with examples, validated end-to-end against a bring-your-own namespace with full Rust/Python parity.

    APIPerformance

    Namespace document counts are now accurate on shared infrastructure

    The Documents metric on namespace stats could report a wildly inflated number — one namespace showed 385,151 documents when the real total across its collections was 551. On shared vector-store shards, the namespace-scoped posting count was picking up documents belonging to co-resident namespaces. The stat is now computed as the sum of per-collection counts, matching exactly what you see browsing the namespace.

    EnginePerformance

    Re-executing a cluster job can't leave its results empty

    A full-mode cluster re-execution cleared its output collection before writing the new generation — so if the write was refused mid-run (for example while the store was briefly protecting durability), the collection could be left emptied. Re-execution now writes the new generation first and removes the old one only after, so your cluster results are never wiped by a failed refresh.

    APIPerformance

    Revoking an API key now takes effect immediately

    A revoked API key could keep authenticating for 25+ minutes because each API pod's cached auth context had no way to learn about the revocation. The caching layer now invalidates on revocation, so cutting a key cuts access — the behavior key rotation and offboarding assume. If you rotated keys recently and counted on instant revocation, it now works the way you expected.

    Vector StorePerformance

    A search outage now returns an error, not empty results

    If vector-store shard discovery collapsed entirely, every read path — search, scroll, count, facets, aggregates, batch get — quietly returned a clean empty result with HTTP 200, indistinguishable from a correct 'no matches'. A total read outage now returns an explicit error, so your application (and your monitoring) can tell 'nothing matched' apart from 'the store is unreachable' instead of silently showing users empty search pages.

    APIPerformance

    Long-running bucket syncs are no longer killed as stale

    The stale-job reaper judged sync liveness by the job record's last write — but a slow, rate-limited, or heavily-filtered walk over a large bucket could legitimately run for hours without writing progress, so the reaper killed it as orphaned and the sync restarted in a loop. Sync jobs now emit a dedicated liveness heartbeat every 60 seconds, so big archive walks run to completion no matter how long they take.

    EnginePerformance

    Cluster jobs start under load, and labels ground in real documents

    Three clustering fixes. Cluster builds could sit PENDING indefinitely while the queue was busy — a priority-routing quirk parked them in a sub-queue that only drained when everything else was idle; they now dispatch at base priority and start promptly under load. Representative selection could pick synthetic centroid markers instead of actual documents, which broke labeling lookups and left clusters with generic names — representatives are now always real documents. And on GCS-backed content, labeling samples were silently dropped under keyless credentials; URL signing now falls back to the IAM API, so image-grounded labels work there too.

    PlatformFeature

    Book a working session at /workshop — with native scheduling

    A new single-purpose page for the 45-minute Creative DNA working session: what it is, what your team leaves with (a runnable notebook and a seeded workspace you keep), honest scope, and scheduling that renders available times natively in the page — pick a slot and confirm on Calendly — with an async intake form if you'd rather we propose times. The same native scheduling component now powers booking across the site, and a deploy-time check verifies every embedded calendar points at a live event, so a booking page can never silently go blank again.

    StudioFeature

    Clustering workbench: named runs, side-by-side compare, stable layouts, and exports

    A major upgrade to exploring clusters. Execution runs can now be named and browsed in a gallery-style history, and two runs open side-by-side with a shared selection — lasso documents in one pane and the same documents highlight in the other. Visualization layouts stay stable across re-executions, so the map no longer scrambles every run and run-over-run comparison is honest. Cluster labels are renameable inline, unclustered documents get a first-class bucket, and you can steer LLM labeling with a freeform domain hint ('these are pharma ad scenes'). Under the hood, EVoC joins the algorithm options, and any run exports to CSV or Parquet (full fidelity including vectors) from the UI or API.

    StudioFeature

    The playground is browsable free — no plan gate on the front door

    Exploring live retrievers on real data has always been meant to be free, but the marketplace front door routed through a gated page, so free-tier organizations bounced to the paywall before seeing anything. The marketplace is now a genuinely gate-exempt browse page, and the plan-gate strip itself now says what is free right now and links straight to the playground. Also fixed: arriving without an organization no longer double-reloads into organization creation.

    APIPerformance

    Retriever filters no longer silently thin multi-stage results

    Execute-level filters were being re-applied to every stage of a pipeline, not just the search stage. Because documents flowing between stages don't always carry the filtered field, the re-applied filter could silently drop most of them — a search returning 20 documents could hand 1 to the next stage with no error. Filters now bind only to filter-type stages, enforced across both retriever executors, so downstream stages receive exactly what the search stage returned.

    APIPerformance

    Summarize treats your document text as data, not as a template

    Document content spliced into the summarize stage's prompt was being run through the template engine — so text containing curly-brace syntax (code snippets, tracking placeholders, JSON) could be silently erased or misinterpreted before the LLM ever saw it, producing answers like 'the scenes are empty' over a fully hydrated corpus. Document text is now spliced as inert data; only the prompt template itself is evaluated.

    APIPerformance

    Snapshot restore into a new namespace now actually populates it

    Restoring a snapshot into a new namespace could complete without the target namespace receiving the data — masked for a while by a smoke test that read stale caches as green. The restore path is fixed with failing-first tests, stage-cache keys are now structurally scoped so cached results can never leak across namespaces or restores, and cache hits are self-describing at every level so you can see exactly what was cached versus computed fresh.

    EnginePerformance

    Video batches with heavy fan-out are no longer killed as stalled

    The engine's stall detector compared rows emitted against input objects — but one video legitimately fans out into dozens of frame and face rows, so large video batches always tripped the threshold and were killed mid-run as suspected retry loops. The detector now understands fan-out, and face and scene extraction over video corpora runs to completion.

    EnginePerformance

    Batches are no longer marked failed while their job is still running

    A batch could be branded FAILED by the reconciler while the underlying engine job was alive and still writing documents — leading to unnecessary re-processing (and re-paying for extraction) of work that had actually succeeded. Before flipping any batch to FAILED, the reconciler now asks the engine for the live status of every extraction job the batch submitted, and running work is left alone. Status now reflects the compute, not just the queue.

    StudioPerformance

    Expired sessions resolve cleanly, and new visitors land on sign-up

    Two sign-in frictions are gone. An expired auth session used to retry silently forever — one idle tab spent 27 hours in a 401 loop with nothing prompting a re-login. After a few consecutive failures, Studio now shows a session-expired prompt once and routes you back through login. And first-time visitors arriving from campaigns no longer land on a page that says 'Log in' with no account to log into — the auth wall defaults to sign-up for them. Both verified in production.

    StudioFeature

    See the product working before you enter a card

    The plan selection page now shows a live product demo panel — real search over a seeded dataset — right at the step where you choose a plan, so the decision to start a subscription is made looking at what the platform actually does rather than a feature list. Verified live in production.

    APIFeature

    Every batch now records which API key submitted it

    Batch records previously carried no attribution — answering 'which key submitted this batch?' was archaeology. Batches are now stamped at creation with the submitting key ID, key prefix, and an internal-traffic flag, resolved server-side from the authenticated request context so it cannot be spoofed by callers. Useful for auditing multi-key organizations and reconciling usage.

    Vector StorePerformance

    MVS scroll: misspelled parameters now warn loudly instead of vanishing

    Passing a misnamed parameter to scroll (for example filters instead of the filter argument) used to be silently swallowed — the scan ran unfiltered and returned results that looked exactly like filtered ones, which is the worst kind of wrong. Unknown keyword arguments are still accepted for interface compatibility, but now emit a loud warning naming exactly which arguments were dropped and what the real parameters are, pinned by a regression test.

    PlatformFeature

    Creative DNA: the Creative Primitives explainer and Signal, the free teardown tool

    The Creative DNA solution page gained a deep-linkable Creative Primitives section explaining the offer for performance-creative teams: decompose finished ads, raw footage, and competitor creative into queryable components (hooks, pacing, composition), find the components that recur in your winners, and match market trends against footage you already own. It links Signal — the free teardown tool built on Mixpeek's Creative DNA — which runs the competitor analysis on any brand's public Meta Ad Library creative, nothing gated.

    EngineFeature

    Learned fusion serving: weights blend proportionally, cold starts are deterministic

    Three serving-side defects in learned fusion are fixed and verified in production. Learned weights now shape results proportionally — a feature weighted 0.6 contributes roughly 60% of the page — where previously any weight past ~0.54 filled the entire top-10, making weights effectively binary at serving time. Exploration semantics were inverted (the most-experienced contexts got the noisiest rankings) and now match their documentation: more data means steadier results. And brand-new contexts with zero interaction data serve an exact uniform interleave instead of random noise, so two fresh users see the same ordering. Verified against production with a 40-check health pass.

    StudioPerformance

    The error right after completing payment is gone

    New paying customers could see an error moments after a successful checkout: the client tried to report the payment milestone itself and the server rejected it. Payment completion is now recorded server-side from the Stripe webhook — the authoritative source — and the old client call is accepted as a harmless no-op, so the error is gone even on older cached clients. Confirmed against production.

    APIPerformance

    Namespace search: real matches only, sample data findable again

    Searching namespaces now matches case-insensitively across name, ID, and description, and only returns actual matches — previously a search could return every namespace regardless of the term. A follow-up fix in the same pass keeps built-in sample namespaces in search results, so searching 'sample' finds the sample datasets again. Both directions are pinned with regression tests.

    PlatformFeature

    Pricing rate card: every rate names its unit, with worked examples

    "$0.10 per unit" never said what a unit was. Every rate on the pricing page now names its real unit — video per minute, documents per 1K pages, text per 1M tokens — and each file type carries a worked example computed from live rates, like "1,000 three-minute videos: $150 searchable, $780 with every add-on," with a one-click jump into the cost estimator to price your own workload.

    See pricing
    DocsFeature

    Face search docs now connect to identity-list maintenance

    The face-identity extractor docs and the cookbook face-search recipe covered one-shot search from a reference image, but never pointed at the tutorial that builds a maintained, named identity roster — reference collections, auto-labeling, reviewing unknowns, and promoting confirmed faces back into the reference set. Both pages now link that workflow, so teams doing face search can discover the self-improving roster path.

    APIFeature

    Object edges: link related files and traverse relationships at query time

    Files rarely live alone: an edit project references its footage, a document cites its sources. Objects can now carry first-class edges to other objects, and the new traverse_edge retriever stage follows those links during search — find a clip, hop to every ad it was cut into. Edges can be ingested automatically from companion files (including a native Adobe Premiere project parser that links footage to finished ads), and edge enrichment runs inside polling syncs so relationships stay current as libraries change. Volume-based triggers also got a correctness fix: they now count documents through the collections service, so threshold triggers fire reliably.

    StudioFeature

    Find Similar everywhere, and clusters promote to taxonomies in one step

    The discovery loop is now connected end to end in Studio. Every document in the grid and details modal has a Find Similar action, so query-by-example is one click from anywhere. When a cluster looks right, promoting it to a taxonomy is a guided single step. And when authoring retriever stages, hovering any {{template}} variable shows the value being passed in along with its documentation.

    StudioFeature

    Bulk upload with a metadata manifest

    Uploading a folder of files no longer means losing their metadata. Studio's bulk object upload accepts a CSV or JSON manifest alongside the files, mapping metadata to each object at ingest, so filterable fields arrive with the content instead of being backfilled later. Homepage template links also now deep-link straight into the Quick Start scaffold flow, carrying the chosen template through signup.

    APIFeature

    Namespace templates: scaffold by slug, inspect the manifest

    Template scaffolding got more forgiving and more transparent. Scaffold endpoints now accept a bare template slug or the full id interchangeably, and new manifest endpoints return exactly what a template will create — collections, extractors, retrievers — before you instantiate it, with a YAML view in Studio.

    APIFeature

    OpenAPI spec accuracy: execute-response schema restored, drift now gated

    The retriever execute response schema had collapsed in the published OpenAPI spec (a serializer detail leaked into spec generation), which degraded generated SDK types and API-reference docs. The schema is restored at the source, and a fail-closed CI gate now blocks any spec regeneration that silently removes public surface. SDKs were regenerated against the corrected spec: Python 1.3.33 and JavaScript 0.81.34.

    StudioPerformance

    Checkout: redirect loop fixed, cleaner commitment page

    Three fixes for the paid signup path. A billing-to-plan redirect loop that could trap orgs mid-checkout is gone. The founder-call card no longer overlays the checkout flow at the moment of payment. And the plan page now shows Terms, Privacy, and Security links right at the commitment step.

    EngineFeature

    Batches self-heal: worker losses auto-resubmit instead of failing

    A batch should never die because infrastructure hiccuped underneath it. Batches interrupted by a worker loss or timeout now automatically resubmit instead of landing in FAILED, never-launched batches stay safely re-deliverable instead of dead-ending, and the workers that run batches now hold minimum capacity so scale-to-zero can no longer strand queued work. Stuck processing slots reap themselves, timeout errors report the actual elapsed time rather than the threshold, and if you do hit a terminal batch, the error now names the resubmit endpoint so the fix is one call away.

    EngineFeature

    Learned fusion now personalizes across embedding spaces

    Learned fusion re-weights retrieval signals based on real interactions, but raw scores from different embedding spaces live on different scales, which silently neutralized the personalization: one feature's scores could dominate regardless of learned weights. Per-feature scores are now rank-normalized before fusion, so learned weights actually change ranking outcomes. Verified in production with a before/after run, with a regression guard added so scale bias cannot quietly return.

    StudioFeature

    Taxonomy runs are auditable: step-by-step funnel analytics

    When a taxonomy enrichment misses documents, you can now see exactly where. Every materialization records per-step analytics — how many documents entered, matched, and enriched at each stage — with a funnel overview in Studio, persisted run history you can review and re-run, and an honest config status that tells you when analytics are not enabled. Batch materialization also now resolves retriever inputs across document shapes and reports the true persisted count instead of an optimistic one.

    APIFeature

    Metadata you attach at upload now reaches your documents

    Metadata attached to a blob at upload time is now promoted to the object root at ingest, so it flows through processing and lands on the resulting documents where filters and retrievers can use it. Retriever responses were also cleaned up: the misleading empty results alias is omitted when documents carry the data, and every search completion is now captured with its result count, so empty-result incidents are queryable instead of invisible.

    StudioPerformance

    Studio: the tab-switch reset is gone

    Following last week's account-switch fix, the remaining cause of Studio's mystery mid-session reloads is closed: the self-heal reload now requires true dormancy (30 minutes hidden or idle) instead of firing on a quick tab switch. Navigation forensics also now survive the reload itself, so if anything like this recurs it will be diagnosable from the trail it leaves.

    DocsFeature

    Guides open with visual explainers; buyer guides answer faster

    Eight technical guides now lead with a full visual explainer — reranking, rank fusion, video decomposition, chunking strategies, retrieval metrics, embedding model selection, feedback loops, and vector index structures — each with the explanation in liftable text, not just pixels. Buyer guides (curated lists) gained a structured upgrade across all 51 pages: a quick-answer summary up top, an honest main-limitation column in every comparison table, a visible methodology note, and a closing decision framework that answers 'which one should I choose?'

    StudioFeature

    API key governance: presets, expiry, namespace scoping, per-key usage

    Managing API keys in Studio grew up. Each key now supports access presets (full, read-only, ingest-only), an expiration date, and namespace scoping so a key can be locked to exactly the data it should touch. The settings page shows full key metadata and a per-key usage panel with request counts and latency, so you can see what each key is actually doing before you rotate or revoke it. A new API key management and security guide covers the recommended setup end to end.

    StudioFeature

    Taxonomies get a real workbench: Tree, List, and Graph views

    The taxonomy details page was rebuilt as a workbench: browse your hierarchy as an expandable tree, a sortable list, or an interactive graph, and validate classification behavior with text inputs directly from the page. Two forgiveness fixes landed alongside: the validator now accepts the flat input-schema shape most people write on the first try, and validation inputs resolve against the mapping's root path so you test what will actually run.

    EngineFeature

    Bucket syncs: new uploads stay fresh, even behind a big backfill

    Large backfills can no longer starve new content. Sync configs gained freshness lanes: a per-config queue override routes incremental syncs to an idle lane, a sync-from watermark seeds where a lane starts, and a scope-aware duplicate guard keeps lanes from re-claiming each other's work. Failed objects also retry more reliably (the dead-letter retry path no longer blocks on metadata fetches, and retries run under the owning tenant's scope). For iconik connections, a misconfigured metadata view no longer produces a per-asset error storm — it disables cleanly.

    StudioPerformance

    Studio feels faster: one motion system everywhere

    Studio's animations were unified into a single set of motion primitives, so page transitions, panels, and loading states move consistently instead of each surface improvising. Loading indicators are now matched to how long an operation actually takes, which makes slow operations legible and fast ones invisible.

    DocsFeature

    Better machine access: llms.txt, markdown docs, and accurate MCP pointers

    AI agents reading mixpeek.com get a cleaner map. llms.txt now carries the current usage-based pricing (plans and per-unit rates, replacing a stale credits-era table) and a new Machine Access section: every docs page serves raw markdown by appending .md to its URL, the full docs corpus is one fetch at /llms-full.txt, and the MCP documentation is clearly signposted (including the fact that /docs/mcp itself is a POST-only MCP endpoint, not a page). The MCP docs page also gained an architecture diagram with the corrected tool count (48), and the Mixpeek-vs-Twelve-Labs comparison was rewritten against current pricing and deployment reality.

    APIFeature

    Cluster result collections are now searchable

    Clustering runs write their groups into a result collection, but searching one of those collections through a retriever could silently return nothing: the retriever looked up the collection's internal analyzer id instead of its declared search feature, and the diagnostic that should have flagged the gap trusted a vector count estimate that could be wrong. The whole path is fixed. Retrievers now resolve the searchable vector for cluster and promoted collections automatically, the diagnostic verifies vectors actually exist before calling a collection healthy, and when a collection really has no vectors you get a clear, actionable message instead of an empty result set. Verified live in production.

    EngineFeature

    On-screen text extraction now reads static overlays

    The on-screen text feature previously specialized in scrolling and marquee bands. It now also runs a keyframe-grid OCR pass, so static overlays like lower thirds, title cards, captions, and price tags land in onscreen_text alongside scrolling content. A new output guard also drops conversational model refusals, so strings like 'I'm sorry, but I was unable to detect...' can never leak into your extracted text. Verified in production: on a benchmark video set, documents with detected on-screen text went from 2 to 18, with zero refusal strings and true positives intact.

    APIPerformance

    Object listing on large buckets no longer times out

    Listing objects in very large buckets could blow the request budget and return a 408, which surfaced in Studio as 'Failed to load data'. Two fixes landed: the total count that powers pagination now runs concurrently under a tight time budget and degrades gracefully instead of failing the whole request, and the listing's sort is backed by a proper database index. Large buckets now page reliably in both the API and Studio.

    EnginePerformance

    Processing keeps running through engine control-plane restarts

    The processing engine's control plane can now restart without taking worker processes down with it: cluster state moved to persistence-backed Redis, so in-flight extraction keeps running while the head node recovers. This retires a crash class we had been tracking, and it has already been proven in production, where an unplanned head restart came and went with zero customer impact. Embedding services also now warm up when a replica starts instead of on the first request, removing a cold-start latency spike from the first search or batch after a scale-up.

    StudioFeature

    Studio: account switches are a choice, sample data shows live progress

    Signing into a different account in another tab no longer silently resets your current Studio session; you now get an explicit choice before anything switches. The Quick Start sample-data path shows live clone progress and only completes when your documents have actually arrived. Workspace names with punctuation no longer fail signup. And the taxonomies empty state now points at the cluster-to-taxonomy promotion flow, which existed but was hard to discover from that screen.

    APIFeature

    Extending an expired API key now reactivates it

    Key expiry is now derived from the expiration date itself. Previously, a key that passed its expires_at stayed dead even after you extended the date, because expiry was also latched into a separate status field, a two-field trap that made keys look unrecoverable. Now updating expires_at on an expired key brings it back to life, and revocation remains the only permanent state.

    APIFeature

    SDK updates: Python 1.3.29 and JavaScript 0.81.30

    Both SDKs picked up the features-first creation surface, so you can create namespaces and collections by declaring the features you want to search by directly from code. The JavaScript package also fixed its TypeScript entry points: types now resolve at the emitted declaration paths, with a build-time guard so editor IntelliSense and tsc cannot silently regress again.

    DocsFeature

    Docs accuracy sweep: examples verified against the live API

    A verification pass ran the docs' own examples against production and fixed what didn't hold up: the quickstart's feature references and response shapes, the batch submission endpoint, error type names, and the canonical mxp_sk_ API key format. The zero-results troubleshooting page grew into a real cause-and-fix guide, and a new Feature vs Extractor explainer clears up the most common point of confusion for people and agents reading the docs.

    PlatformFeature

    New pricing is live: pay by file type and the features you enable

    Mixpeek's new usage-based pricing is now active. Three questions set your bill: what kind of files (video, image, audio, document, text, web), how much of them (billed in honest natural units, like video per minute and documents per page), and what you want to search by (faces, on-screen text, transcripts and more, priced per unit on the same meter). The pricing page has a live rate card and an interactive estimator with tier pools and overage math, credits are fully retired, and you can get an authoritative preflight quote from the billing estimate endpoint before submitting any batch. SDKs were updated alongside.

    APIFeature

    Create namespaces and collections by picking features, not extractors

    You can now declare what you want to search by (a features list) when creating a namespace or collection, and the server resolves the right extraction pipeline for you. Studio's collection wizard gained a modality-grouped feature picker, and features-first creates preserve your metadata fields by default. Extractor names become an advanced detail instead of a required decision.

    EngineFeature

    Long-running jobs survive platform deploys

    Platform rollouts no longer interrupt long-running processing work: task queues now drain gracefully on deploy, so an in-flight extraction or clustering job finishes instead of dying mid-run. Text-embedding batches also became more resilient, retrying transient connection errors with backoff where a single hiccup could previously fail the batch.

    APIFeature

    Attribute clustering now produces real groups end-to-end

    Clustering by a metadata attribute could finish with zero groups, return 400s when reading executions back, and drop document metadata from exports. All of those paths are fixed: attribute runs now attach embeddings correctly, preserve metadata through export, and read back cleanly. Verified on a 9,000-document run with every document grouped and search-within working, including hierarchical and multi-feature configurations.

    EngineFeature

    Cluster labels now describe what is actually in each group

    AI-generated cluster labels are dramatically better. Attribute clusters now get semantic labels, summaries, and keywords instead of generic Cluster N names, and a sampling fix means labels are grounded in each group's real content rather than coming back near-identical or fabricated. A hallucination guard and representative sample selection keep labels distinct across groups.

    EngineFeature

    Batches no longer get stuck in a processing state

    Closed a gap where a batch could finish all of its work but keep reporting a non-terminal status. The repair sweep now also finalizes jobs whose underlying compute records disappeared, so long-stuck batches heal automatically. One batch that had been stuck for 32 days was repaired by the new sweep on its first pass.

    StudioFeature

    Starter retriever templates fixed, plus Explain Plan polish

    Every retriever starter template now creates a working retriever. Two templates carried outdated stage configurations that made their retrievers uncreatable, and template configs are now validated against the live stage registry in CI so they stay correct. Explain Plan output now lists stages in execution order with the first stage on top, and it is opt-in per run so default executions stay fast. Retriever evaluations also no longer fail intermittently, and a false feature index warning is gone.

    StudioFeature

    Billing fixes: invoices, payment methods, instant plan upgrades

    A sweep of billing fixes: invoice rows now show the correct month instead of N/A and read Plan subscription instead of 0 credits, Stripe Link payment methods no longer error, plan upgrades take effect immediately instead of waiting on a cache, and usage windows are now correct for organizations that signed up through Checkout.

    PlatformPerformance

    Connector syncs run faster and no longer stall

    The connector sync engine got a reliability and throughput pass: queued full syncs no longer starve behind incremental work, stale redeliveries are guarded against, and per-object sync concurrency for iconik doubled. Large library syncs complete faster and keep making progress under load.

    DocsFeature

    Readable code snippets across all guides

    Code snippets on guide pages were rendering mangled: formulas turned into stray tables, comparison operators swallowed lines, and formatting characters leaked into the code. Snippets across all 80 guides now render through a proper code component with syntax highlighting and one-click copy.

    StudioPerformance

    Cluster maps load about 2.4x faster

    Opening a cluster visualization in Studio is now roughly 2.4x faster on first load. The cluster explorer requests a compact visualization payload by default, so large maps render quickly instead of pulling the full point geometry up front.

    StudioFeature

    See your search results on the cluster map

    Searching inside the cluster explorer now plots matching results on the map even when they fall outside the sampled points, so a search always shows you where its hits live. The view also adds a distance-scaled visualization dimension, colors all-noise attributes correctly, and shows clearer empty states when a filter or search returns nothing.

    APIFeature

    Filter operators now work as written (no more silent equality)

    Retriever and object-list filters now honor every operator on string and date fields. Previously ne, gt/gte/lt/lte, and contains/starts-with/ends-with on a string value were silently collapsed to exact-match equality (and ne was even inverted), so a filter like created_at >= <date> could return zero over hundreds of matching records. Now each operator keeps its meaning, *_at fields coerce ISO-8601 dates and match either stored format, and text operators use literal substring semantics. Existing filters just start returning the right rows; no change needed on your side.

    StudioPerformance

    Bucket details loads instantly on million-object collections

    The Studio bucket-details objects table no longer times out on very large buckets. Rendering a 21-row page used to sort the whole collection in memory (measured ~26 seconds over 1.29M objects), tripping a 10-second timeout that surfaced as "Failed to load data." New sort-bearing compound indexes bring that page from ~26s to a few milliseconds, so browsing objects stays instant no matter how big the collection gets.

    EnginePerformance

    Steadier extraction and storage sync under heavy load

    Two under-load fairness fixes. GPU job admission is now capacity-aware: the number of in-flight extraction jobs is capped to the available GPUs, so a burst can no longer over-subscribe the pool and leave jobs stuck initializing. And storage-sync dispatches are now prioritized, so several sync configurations make progress in parallel instead of one large sync monopolizing the workers. Extraction and connected-storage syncs stay prompt when the platform is busy.

    DocsFeature

    A searchable home for every technical guide

    The 70+ vendor-neutral guides on multimodal perception, retrieval, embeddings, and agent infrastructure now have a searchable, category-filtered home at /guides. Browse the whole library (object tracking, depth, faces, reranking, quantization, and more) instead of only reaching a guide by a deep link. Learn the concept, then see how Mixpeek applies it.

    Browse guides
    StudioFeature

    Cluster visualization overhaul — Atlas-level exploration

    The Studio cluster view got a major upgrade: color-by-field with an encoding-aware legend, a similarity-threshold slider on search, a result pager, an always-on image preview of the selected point, lasso/search selections that grey out everything else, and a fast document-details modal. Exploring a million points now feels like a first-class data tool.

    StudioFeature

    Explain Plan for retriever executions

    Every retriever run can now show an Explain Plan — a database-style visual tree of the stages that ran (recall, filters, rerank, fusion) alongside the raw output — so you can see exactly why a query returned what it did and where the time went. Toggle it on from any execution.

    PlatformFeature

    Canvas Apps available on every plan

    Canvas Apps are no longer Enterprise-only — every tier can now build and publish them, with per-tier count limits shown right in Studio. Server-only secret slots were also added for app functions so apps can hold credentials safely.

    StudioFeature

    Live cluster resources & capacity for namespaces

    The namespace view now shows a real cluster resources and capacity panel — actual serving resources and headroom — replacing the old "coming soon" placeholder. The Total Documents card also no longer flashes a misleading 0 on a cold cache.

    StudioPerformance

    Faster monitoring with a batch Errors & Health view

    The monitoring page now loads per-namespace error and health counts in a single batched call instead of one request per namespace (N+1), and batch runs are shown in a selectable datatable. Large-tenant monitoring pages load markedly faster.

    June 2026

    StudioFeature

    Guided Activation Progress Rail for new accounts

    New accounts now get a persistent Activation Progress Rail that guides you to first value — tracked from your real resources (namespace, documents, a working retriever), not a generic checklist — so the path from signup to your first search is clear.

    Get started
    StudioPerformance

    Faster, sharper cluster exploration at 1M+ vectors

    The clustering view now paints in ~77ms at 1M points (spatial-index build deferred off first paint), search-within-cluster is near-instant (O(matches) instead of a full scan), in-cluster recall is higher (top-k 100→500), and find-similar falls back to text instead of degrading silently.

    StudioPerformance

    Studio loads page content first

    A priority lane in the API client keeps decorative shell calls from starving the content you came for, and per-resource analytics are deferred past first paint — namespace, monitoring, and cluster pages feel markedly snappier.

    PlatformFeature

    Scale tier — $499/mo

    A new self-serve-priced Scale tier sits between Pro and Enterprise for teams scaling production workloads beyond Pro's limits, with sales-assisted onboarding. Now surfaced on the pricing page.

    DocsFeature

    200+ model pages and new retrieval deep-dives

    Expanded the model catalog with enriched pages (architecture, benchmarks, Mixpeek SDK examples, and pipeline pairings) across embedding, vision-language, video, audio, OCR, and reranking models — plus new vendor-neutral guides on Matryoshka embeddings, reasoning rerankers, and retrieval feedback loops.

    May 2026

    Vector StoreFeature

    MVS standalone namespaces — bring your own vectors

    Run Mixpeek Vector Store in standalone mode: create a namespace, push your own embeddings, and get agent-native dense + sparse + BM25 hybrid search on object storage — no extraction pipeline required. Add Managed extraction later without re-indexing.

    APIPerformance

    Faster system alert evaluation

    Alert sweeps now read metrics in parallel and evaluate across orgs in a single pass, keeping large-tenant alert evaluation well within its window.

    Alerts docs
    PlatformFeature

    Plugin Marketplace

    Publish, discover, and install custom extractors across organizations. Includes typed SDK, manifest validation, CLI lint/test, auto-versioning, rollback, and BYO container support.

    APIFeature

    Feature Search endpoint

    New POST /v1/features/search endpoint for direct vector similarity search across extracted features, without needing a retriever.

    API reference
    EngineFeature

    Deploy-resilient batch jobs with auto-resubmit

    Batch jobs now survive cluster deployments. If a worker dies mid-run, the job is automatically resubmitted from where it left off. Combined with zombie batch TTL that auto-cancels stale drafts and fails stuck jobs.

    DocsFeature

    228 new API reference pages

    Added 228 missing API reference pages covering every endpoint, reordered by user journey. Every parameter documented with types, defaults, and examples.

    API reference
    Vector StorePerformance

    Async vector writes for medium tier

    Medium tier namespaces now use async writes during batch ingestion, significantly improving upsert throughput for high-volume workloads.

    MVS docs

    April 2026

    Vector StoreFeature

    MVS High Availability with automatic failover

    Primary-replica architecture with WAL-based replication, automatic failover with split-brain prevention, per-namespace recovery gates, atomic snapshots, and multi-namespace pods with lazy-load and LRU eviction.

    Vector StoreFeature

    MVS HPA autoscaling + gRPC load balancing

    Vector store replicas now autoscale based on query load using Kubernetes HPA. Client-side gRPC load balancing distributes queries across all healthy replicas.

    MVS docs
    APIFeature

    BYO inference on retriever stages

    Bring your own inference to retriever pipelines with feature_uri on rerank and LLM stages, plus a new classify stage. Run your own models inline during retrieval.

    StudioFeature

    Studio mobile optimization

    The entire Studio is now mobile-responsive. All pages, modals, and navigation work on phones and tablets with no feature loss.

    Open Studio
    StudioFeature

    Namespace manifest tab

    New Manifest tab on namespace details shows the full extraction pipeline configuration — which extractors run, their settings, and output schemas.

    StudioFeature

    Improved batch details UX

    Batch details now show real-time polling, inline logs, and a two-column layout. Queue ETA, documents skipped count, and per-extractor progress all visible at a glance.

    StudioFeature

    System namespaces with sample data

    Pre-built system namespaces with sample data let you explore Mixpeek features immediately. Marked with a 'Sample' badge, read-only banner, and one-click fork to your own namespace.

    APIPerformance

    Fixed N+1 query patterns across 6 endpoints

    Eliminated N+1 database query patterns on namespace list, collection stats, batch list, document list, retriever list, and cluster list endpoints. Response times reduced 3-10x for accounts with many resources.

    API reference
    Vector StorePerformance

    WAL replay optimizations — 5x faster startup

    Coalesced WAL replay flushes and skipped auto-flush staging during replay, eliminating lock contention. MVS shard startup 5x faster on namespaces with large write-ahead logs.

    MVS docs