From c77fd95f12ce3ae5f4eed16be7aa02407630a2fc Mon Sep 17 00:00:00 2001 From: digital-garbage <133010426+digital-garbage@users.noreply.github.com> Date: Mon, 3 Aug 2026 01:03:48 +0300 Subject: [PATCH] =?UTF-8?q?feat:=20MiniMax-H3=20ref2va=20=E2=80=94=20nativ?= =?UTF-8?q?e=20reference=20conditioning,=20replacing=20the=20LTX=20identit?= =?UTF-8?q?y=20path?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit H3 packs reference blocks into the sequence itself (own position grid, never denoised, never rendered), which is the thing Best-FaceID approximated on LTX with overlap tokens plus a trained ArcFace projector. On H3 there is nothing to project and nothing to slice back off, so this is the model's own feature, not a port of that one. A reference has to reach the model twice and in the same order both times: as presentation (Qwen sees ": " so the prompt can name it) and as a packed latent block. Those encodes happen in different nodes, so the ordered spec travels between them: - Studio owns the CLIP: resolves the reference list, bakes the presentation via the tokenizer's minimax_ref_items, and records what it presented as funpack_h3_refs on the conditioning. Reference media and a first-frame anchor are separate conditioning modes, so source_image steps aside (loudly) when references are present. - Chain Sampler owns the VAE: encodes exactly that list, in that order, sized against the scene's canvas, and attaches minimax_refs. Applied on every scene branch so an identity holds across the whole chain, and cached per run so it is encoded once rather than once per scene. Order is the contract — drop or reorder an entry and "" points at a different reference than the text encoder saw. Anything that cannot be encoded is dropped AND named, and an audio reference lost for want of an audio_vae says out loud that later