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.

    September 2026

    StudioFeature

    Deploy a complete namespace from a template on mixpeek.com

    mixpeek.com/templates now catalogs end-to-end use cases. Each template page opens with the outcome and four measured numbers, renders the pipeline as a diagram, and serves the same configuration as a manifest file in the platform's manifest schema. Deploy opens Studio's manifest-apply page with that file; validate and apply both run against it, and the first template, video moderation for training-set preparation, resolves to one namespace, three buckets, eight collections and six retrievers. Two plugin collections ship commented in the file, since a manifest can reference a custom extractor only after it is installed. Two Studio fixes landed with it: the manifest page can fetch a template from mixpeek.com, and it sends the manifest as a file part so validation succeeds.

    StudioFeature

    Studio file uploads reach the API as files again

    Every Studio action that uploads a file, manifest validate, apply, diff and lint and model upload, was sending the file's contents as a text form field, which the API rejects with a 422. The generated client now types binary upload bodies as Blob or File and appends them as real multipart file parts, and the fix is applied at codegen time so a regenerated client cannot lose it.

    Studio
    StudioFeature

    The upload dialog opens on a single object

    Uploading to a bucket in Studio used to present five decisions at once: file or URL, bulk import with a manifest, per-object schema fields, additional objects and an auto-submit toggle. A first upload needs none of them. The dialog now shows one object's fields and the Upload and Process button, with URL upload, bulk import, multiple objects and the auto-submit toggle behind an Advanced options expander. The upload and staging logic is unchanged.

    BucketsStudio
    StudioFeature

    Creating a workspace tells you why the button is disabled

    On the create-workspace step, the submit button was disabled for three reasons and explained two of them. An empty name explained nothing, so a click did nothing and the hint still read as optional. The button now answers the click: an empty name shows the requirement in place, and the form submits as soon as it is met.

    Studio
    StudioFeature

    Every icon-only control in Studio has an accessible name

    Notifications, help, settings, the retriever actions menu, the preview buttons on collections and stages, and the info button shared by three form components are now named for screen readers and keyboard users. The notification bell in particular was only named while something was unread. Verified on the live pages: the retriever detail page went from seven unnamed icon buttons to none.

    Studio
    APIFeature

    Filter errors tell you to use the dotted path

    Writing a nested filter as nested JSON, for example {"_internal": {"idempotency_key": value}}, returned a 422 about the value type, which was accurate about the parser's state and silent about the fix. When a scalar operator receives an object, the error now says to write the field as a dotted path, _internal.idempotency_key, and shows the form.

    Filters
    APIFeature

    Idempotency and content-hash dedup ignore soft-deleted objects

    A create whose idempotency key or content hash matched a soft-deleted object returned success and wrote nothing, and the key stayed spent, so no later write with that body could land. Idempotency means the same request must not create two live objects; a soft-deleted row is not a live duplicate. All four dedup lookups, idempotency and content hash, single and batch, now consider live objects only and recreate when the only match is deleted.

    Objects
    APIFeature

    A pre_filter on document_id no longer trips the matches-nothing warning

    The warning that tells you a filter matched no documents exists so an empty result can be trusted. It fired on a pre_filter over the top-level document_id even when the filter matched, because the list of system fields it checked included collection_id and omitted document_id. The list is now derived from the platform's canonical internal-field definitions and pinned by a parity test.

    APIFeature

    A collection created with a bucket name resolves it to the bucket id

    Collection create accepted a bucket name in source.bucket_ids, passed the existence check, and stored the name as the foreign key. Later batch and upload lookups filter on the bucket id, so they missed and reported that no collection existed for the bucket. The create path now resolves each bucket once and stores the canonical id.

    APIFeature

    Listing promo codes returns the usage cap

    Creating a proof-of-concept promo code stored its usage cap and echoed it in the create response, and listing promo codes reported the cap as absent. The list now reads the cap back, so an audit of a code against its intended shape gets the real value.

    Pricing
    PlatformFeature

    Payment notices go to a person at your organization

    When an organization had no explicit billing email, failed-payment and failed-setup notices were addressed to a synthetic mailbox that bounces, so the customer was never told. Both notices now resolve a recipient the same way every other account email does: the billing email, then an admin, then an owner, then any user.

    Pricing
    EngineFeature

    RTSP syncs run the gate retriever on every segment

    An RTSP sync configured with a gate retriever published every segment unjudged: the sync executor never passed the internal id the gate needs, so the gate raised on each segment and the on-error policy published the footage. The provider configuration is now assembled in one place that injects it, on the main path and the retry path, and a test pins the injection.

    EngineFeature

    Time-based video splitting produces every segment

    With split_method set to time, a video came back as one segment stamped as the first interval, whatever its length, and the batch reported success. Two defaults composed: the analysis re-encode set no keyframe interval, and the cut point search only accepted a cut at a keyframe. The re-encode now forces a keyframe at every interval boundary, so a 49 second clip at a 10 second interval yields five segments with the right timestamps.

    EnginePerformance

    Long-scene subdivision cuts land on keyframes

    Splitting an over-long scene into parts chose cut points at arbitrary times, and a stream copy cannot start at a non-keyframe, so each part carried pre-roll packets back to the previous keyframe that never display. The cuts now snap to the keyframe grid the analysis encode already lays down, with no extra encode. On 371 seconds of real footage subdivided at 30 second segments, stored packets dropped from 888 to 769 with identical decoded output.

    EngineFeature

    A duration or frame rate the probe could not measure is stored as unknown

    When a container is broken, the probe reports duration as 0.000000, and the extractor stored that as a measured zero for duration, fps, source_fps and analysis_fps. A zero is a valid measurement and an unknown is not, so these fields now store the unknown marker the platform already uses for numbers it could not measure, and the run logs the case it previously skipped.

    PlatformFeature

    The namespace seeded at signup indexes your site

    A business signup gets a namespace seeded with pages from the signup domain. Two defects kept that namespace empty: the seeded collection used the web scraper extractor without the namespace enabling it, so the apply rolled back and the signup got no namespace at all; and domains whose host does not resolve were seeded anyway and failed in a resubmit loop. The namespace now enables the extractors its collections use, and a host is resolved before it is seeded.

    PlatformFeature

    Dedicated tenant planes keep their queue routing after a startup blip

    A worker on a dedicated tenant plane cached its queue prefix on first resolution, including a failed one. After a control-plane hiccup at startup it published every task for the rest of its life to queues nobody on that plane drains, and two customer batches failed 23 minutes after submission. Only a resolved prefix is cached now; a failure is retried on the next task.

    Batching
    Vector StoreFeature

    Shard timeout warnings say which shard

    A search that timed out on a shard logged the timeout and nothing else, so one slow shard and a slow whole path looked identical. Both timeout branches now carry the shard id and address, with a marker when the primary fallback path was taken, so a degraded window can be attributed from the logs.

    Vector store

    Run the latest on your own files

    Everything above is live. Point Mixpeek at the storage you already have and search your video, images, audio, and documents through one API. Build starts at $25/mo for up to 1M vectors.