agentleFS
teskor-hubteskor-hub/minimax-h3-skill/SKILL.md

minimax-h3

Skill9 starsChanged 55 days agoMITView on GitHub

Write, debug and structure prompts for MiniMax H3 video generation (T2VA, I2VA, FL2VA, L2VA, Ref2VA) and configure its ComfyUI workflow. Use when the user mentions MiniMax H3, minimax_h3, fl2va, ref2va, MiniMaxH3ReferenceToVideo, reference-to-video, asks to animate a photo, write a video prompt, pick a model quant, or rebuild a reference clip or reel into a prompt, or wants to fix drifting identity, phantom objects, mangled hands, weightless falls and broken camera moves in H3 output.

7 other projects use a version of this.

Adopted by

Most recently taken up by

The file

We split this skill into the rules it gives an agent

2 rules. 0 are common, 1 is distinctive, and 1 is very specific to this project.

  • 0

    Common

    Most of the 5 edited versions we read keep these.

  • 1

    Distinctive

    This author's own choices. Worth a look.

  • 1

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Very specific:

    Run python tools/check_prompt_dialogue.py <prompt-file> for a file-backed dialogue prompt.

    line 148
  2. Distinctive:

    Prefer camera motion over a cut when only distance or angle changes.

    line 215

“Common” is measured: kept by at least 6 in 10 of the 5 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

MiniMax H3 — prompting and ComfyUI setup

MiniMax H3 is an open-weight omni-modal video model: it generates video and native stereo audio in a single forward pass, at 24 fps, with a trained clip length of roughly 5–15 s. It ships as two checkpoints — fl2va (frame-conditioned) and ref2va (reference-conditioned) — which are different weights, not modes of one model.

This skill follows MiniMax's own prompt-writing guides and adds the failure modes those guides do not cover.

  • references/prompting.md — the official output format for T2VA / I2VA / FL2VA / L2VA
  • references/reference-mode.md — the official six-section format for full reference (Ref2VA)
  • references/templates.md — fill-in templates for every mode
  • references/troubleshooting.md — symptom → cause → fix, from real failures
  • references/comfyui.md — checkpoints, quants, VRAM, node-by-node settings
  • references/reel-to-prompt.md — rebuilding a reference clip: measure its cuts, read its frames, write the prompt from what is there
  • references/reel-modes.md — ControlNet / Motion Strip / Hybrid selection, source dialogue and mode-specific readiness

When the user supplies a reference clip or a link to one, do not describe it from memory. Run tools/reel_shots.py first — it downloads the clip, detects every cut, writes frames at each shot's head, middle and tail, and lists the valid 17k+5 lengths bracketing the source duration. Then read those frames. Beat timings taken from a measured cut list are the difference between a rebuild that feels right and one that floats, because H3 reads beat duration literally as event speed. Also report which shots need which reference photos — front, three-quarter, back, close-up — since that list is what the user has to supply and cannot guess.

0. Before writing a prompt

Use the current two-mode Reel Maker for reference-based reels. Read skills/minimax-h3-reel-maker/SKILL.md and follow its workflow-specific instructions. With a source clip to reconstruct, select Ref + pose/depth ControlNet + mandatory TS Pose Keypoint Smoother. Without a source clip, select Ref Only: photos and text, without requiring source footage, pose, depth, ControlNet, TS smoothing or source audio. One relevant photo may be sufficient in Ref Only. Do not ask a mandatory mode question when the supplied assets already select the branch. This is automatic preparation routing, not permission to install dependencies, rent compute or submit a render.

An explicit Motion Strip, Hybrid or legacy two-image ControlNet choice overrides these defaults; for those advanced alternatives read references/reel-modes.md. These remain preparation workflows within Ref2VA, not additional checkpoints. Source-inspection and source-transcription requirements below apply only when a source video actually exists. The dedicated skill's instructions take precedence for its two bundled graphs; the general H3 material below remains applicable to other generation modes.

Require a description for each source video. First read any attached text or matching sidecar (source.txt, description.txt, описание видео*.txt, or a clearly mapped message). If it already explains that video's intended meaning, do not ask again. Otherwise ask for a short description for that specific video before writing its final prompt: what happens, why the moment matters, required details and intended changes. For several videos, request a filename/ID-to-description mapping; do not reuse one description for unrelated clips. Source inspection may continue meanwhile. Treat this description as guidance for intent and emphasis, and the footage as evidence of visible/ audible facts. Resolve material contradictions explicitly instead of ignoring the text or turning an interpretation into an observed fact. If the user explicitly declines a description and asks to proceed from the video alone, honour that choice and record the limitation.

Inspect the soundtrack for every source reel in every workflow. When speech exists, extract a timestamped transcript and include the actual dialogue in the complete H3 prompt automatically; no separate transcription request is needed. Identify who speaks in-frame and offscreen, preserve the original words/language, and distinguish music lyrics from conversation. Mark unclear words and verification limits rather than guessing or claiming listening that did not occur. The source descriptions, wardrobe, scene, props and relevant facial performance must be checked against the footage in every mode.

H3 prompts are long and expensive to iterate, and the wrong mode wastes the whole render. Ask rather than guess when any of these is unclear — one question up front is cheaper than a bad eight-second generation:

  • Which mode? If the user has an image, establish whether it is a frame (I2VA/FL2VA/L2VA) or a reference (Ref2VA). This is the single most consequential fork and users rarely state it. "Do you want the video to literally start from this photo, or just to feature this person?" settles it.
  • Which assets exist? How many reference images, whether there is a reference video or audio, and what each is supposed to contribute. A reference with no assigned role is the top Ref2VA failure.
  • Duration. Frame count snaps to a grid and the timeline must match it; a prompt written for 10 s rendered at 124 frames is crushed into 5.
  • What must not change — identity anchors, wardrobe, location, grain.
  • Whether a real camera move is required, since that is the weakest axis and may need a reference video or a different mode.

State a recommendation rather than only listing options, and say plainly when a request will not work as asked — for example a back view demanded from a frontal close-up through I2VA. Flag the trade-off, propose the mode that does work, and proceed.

Split long or multi-cut sequences into separate generations. One generation per shot, joined afterwards in an editor, beats one long generation with cuts written into it. Every extra shot inside a single render costs coherence, and frames drive VRAM and time directly, so a 15-second multi-cut sequence is both the most expensive and the least reliable way to ask. Prefer splitting whenever the sequence has more than about two cuts, whenever it runs past roughly eight seconds, or whenever a beat needs a length very different from its neighbours. A locked-off camera makes the joins invisible, so a static sequence can be cut into as many pieces as convenient at no cost. Where the framing must match exactly across a join, generate the next clip as I2VA from the previous clip's final frame. Black frames, hard cuts and any transition are cheaper and cleaner added in the editor than generated.

Commit to one exact length. Never offer a range. This is an automated pipeline: the user should paste a number, not weigh options. Forbidden: about 3–4 seconds, roughly 5 s, either 124 or 141, 3.5 s or so. Required: a single grid value with the duration it actually yields — length 90 (3.75 s).

The seconds are derived, not chosen: frames ÷ 24, to two decimals. Do not round them to a tidier number — 90 frames is 3.75 s, never "about 3.8" and never "3.5". When two grid values are both defensible, pick one, state it, and give the reason in a clause; do not hand the choice back.

Always state a recommended length when the user has not given one. Put it after the prompt block, as frames and seconds — length 192 (8.00 s). Derive it rather than guessing: budget each beat its real-world duration, add a second of settle at the end, then round up to the nearest 17k+5 value. Duration is read literally as event speed, so an over-long clip does not give the model room — it gives you slow motion. The table in references/prompting.md lists realistic durations for common events; the short version is 124 for a single action on a static camera, 158 with one camera move, 192 for an entrance or approach, 209 for action → reaction → settle, and 243+ once there are cuts. For dialogue, count words at roughly 2.7 per second. Mention the cost when it matters: frames drive VRAM and render time directly, and past 362 the model is out of distribution.

For ControlNet or Hybrid, resolve frame alignment before applying the duration defaults below. The maps and target must contain the same actual frame count; upward rounding does not create control frames. In Hybrid, build the strip from separate phases of that same selected interval and use its FPS, crop and target count for both controls. Follow references/reel-modes.md for a selected crop or agreed extension policy and preserve the user's choice.

A measured reference video sets the length, overriding the defaults above. Its duration, rounded up to the nearest 17k+5 value and capped at 362 frames (15.08 s), is the length — because a reference video longer than the target is truncated to the target. A 14.90-second motion reference asked for at 124 frames delivers only its first 5.17 s of choreography; the remainder is absent, not compressed. Detect the cuts before choosing anything: with no cuts and a source inside 15.08 s it is one clip at the bracketing grid value; with cuts, ask whether the user wants one render per cut or a single full pass (possible only under 15.08 s total); past 15.08 s, one render cannot hold the take, so ask whether to split it into consecutive segments or keep one section. When clips cover segments of one source, trim the reference video to each segment before wiring it — truncation keeps the head, so an untrimmed file makes every clip copy the opening. And when the job is to reproduce a reference's choreography, write the description as a beat every one to two seconds across the whole length; a summary like "a few quick adjustments" leaves the model to invent the rest, and explicit text outweighs a video reference.

Label every prompt in a split sequence. When a sequence is delivered as several prompts, put a header line above each code block naming the prompt number, the reference images that prompt needs, and its length — Prompt 2 — <Picture 1>, <Picture 3> — length 90 (3.75 s). The user is wiring different references per clip and setting a different length each time; making them reconstruct that from the prompt body is where mistakes happen.

Always emit the complete prompt, in one code block, ready to paste as-is — including on follow-ups that change a single word. Never reply with only the edited section, never "replace the beats block with this", never [rest unchanged] or ... standing in for text already written. The user copies and pastes; a fragment forces a manual merge and invites typos. Put nothing inside the block but the prompt itself: the alignment instruction line where the mode requires one, then every section in order, complete. Explanation of what changed goes after the block, in prose, as brief as the change deserves. Length is never a reason to abbreviate.

Terminology. Use MiniMax's names — T2VA, I2VA, FL2VA, L2VA, Ref2VA — when talking about modes, and the weight-family names fl2va / ref2va only when talking about checkpoint files. The aliases T2V / I2V / FLF2V / R2V are common in the wild; recognise them, but do not emit them.

Provenance. SOURCES.md tags every claim in this skill as Official, Implementation, Empirical or Community. When a user leans on a number, check which it is — several widely repeated figures (2K output cap, 7000-character prompt field, 12-file reference limit) are community reports with no primary source, and the empirical rules are tendencies rather than guarantees. Say which kind you are relying on when it matters to the decision.

1. Pick the mode

User wantsOfficial modeCheckpoint
Video from text onlyT2VAfl2va
This exact photo animated forwardI2VAfl2va
A path from frame A to frame B, or a seamless loopFL2VAfl2va
A shot that lands on a given final frameL2VAfl2va
This person/object in a new shotRef2VAref2va

fl2va = first/last frame → video+audio. ref2va = reference → video+audio.

Decision rule: if the value is in the picture — its room, light, grain, composition — use fl2va. If the value is in who or what is in it, use ref2va. fl2va is animation: it takes the frame and moves it. ref2va is casting: it takes the subject and shoots a new scene.

A shot needing a viewpoint that does not exist in the source photo (back view, wide, different room) is a full-reference job. Forcing it through I2VA makes the model hallucinate the missing body while rotating, which is where identity collapses.

There is no video-to-video, and therefore no frame-preserving character swap. Every H3 node in ComfyUI starts sampling from an empty latent; keyframe and reference latents are conditioning re-injected each step and never denoised. No frame of a reference video survives into the output. The video editing and video continuation task types are not thereby proven inert locally — the plumbing is identical for every task type and only the summary prefix differs — but no source frame is preserved whichever prefix you write. Whether the model responds differently to them under local inference is untested.

But do not over-correct — the useful version of that request is the tool's main purpose. "A new video in which the person resembles my reference photo and moves the way this clip does" is exactly reference generation, and it works. Expect recognisable likeness rather than face-swap identity: H3 is a generative video model, not an identity adapter. Distinguish the two explicitly when a user says "swap", because they usually mean the second one and will be wrongly discouraged by a flat no.

Likeness improves, in order of payoff: two to four reference photos of the same person from different angles, all merged into one <Subject N>; identity in <Subject N> rather than a standalone <Picture N>; ref_image_size: max on the final render; short camera travel, so less unseen geometry has to be invented; a higher-precision text encoder if VRAM allows, since identity flows through it in reference mode.

2. Output format

T2VA / I2VA / FL2VA / L2VA — an alignment instruction line (except T2VA), one blank line, then three fields:

integrated_multimodal_description: [Shot 1] ...

overall_soundscape: ...

non_diegetic_music: ...

Full-reference — six sections, in this order:

subject_definitions:   what each referenced item is and what it contributes
summary:               [task type] one paragraph
retention_analysis:    per-label fidelity markers
detailed_description:  shot-by-shot body, normally 350–500 words
overall_soundscape:    ambience and physical sound
non_diegetic_music:    audience-only score, or N/A

Shots: [Shot 1] carries no timestamp. Later shots open with a strictly increasing cut time — [Shot 2] At 00:03.500, the camera cuts to …. Open [Shot 1] with the style: [Shot 1] Live-action, cinematic, a medium-wide shot frames …

Number dialogue speakers by first actual vocal event. The first voice is (S1), even offscreen; each later new voice receives the next number. Subject IDs do not decide speaker IDs. In detailed_description, write speaker, visibility and delivery outside <d>[Language] exact spoken words.</d>. Keep speaker IDs out of retention_analysis. Run python tools/check_prompt_dialogue.py <prompt-file> for a file-backed dialogue prompt; it checks formatting/numbering, not transcription accuracy.

3. Reference labels

Four labels, and picking the wrong one is the most common structural mistake.

LabelWhat it is for
<Subject N>reusable visible content — a person, animal, object, environment, costume, prop, style, action or pose
<Picture N>an image used as a concrete frame — first, key, last, or composition anchor
<Video N>whole-video relationships — an edit source, a continuation point, or borrowed camera movement, cuts and rhythm
<Audio N>an audio signal that is copied or referenced

Identity lives in <Subject N>, never in a standalone <Picture N>. The guide is explicit: if an image only defines a character, scene, costume or style, do not give it its own picture entry — cite it inside the subject definition.

One subject may draw on several assets, and that is how you resolve reference conflicts:

<Subject 1> is the woman whose appearance comes from <Picture 1> and whose walking
motion comes from <Video 1>.

That single line is the official answer to "take the motion from the video and the face from the photo". You do not forbid the video from contributing a face — you define one subject and state what each source supplies. Anything reused as visible content from a video belongs to <Subject N>; <Video N> only names the asset or its structure.

Motion follows the selected reel workflow. In ControlNet, the source supplies aligned pose/depth IMAGE batches to H3 ControlNet Apply, separately from the Ref2VA image references. The default image inputs are <Picture 1> face and <Picture 2> body; there is no required strip, composition keyframe or <Picture 3>. Describe wardrobe, scene, props, complete motion and facial acting explicitly. A control map is not a Ref2VA <Video N>; see references/reel-modes.md for compatibility and alignment. In Motion Strip, selected source frames become a chronological image reference; that mode needs no ControlNet weights or preprocessors. Use a <Video N> label only when a clip actually occupies a Ref2VA video slot.

In Hybrid, ControlNet pose/depth maps patch the same Ref2VA ref2va MODEL branch, while the motion strip is ordinary Ref2VA image conditioning. Its default images are <Picture 1> face/identity, <Picture 2> body proportions and <Picture 3> motion strip; <Picture 4> is an optional explicitly chosen look/composition frame. This is not a new checkpoint, an automatic <Video 1>, or a claim of better quality. The maps control the complete selected sequence; the strip supplies separate chronological phases of that same interval, while the written timeline controls pace rather than strip panel count.

The three-slot reference convention (Motion Strip only). This workflow's default is three Load Image nodes: <Picture 1> the identity photo (passport-style — frontal, evenly lit, plain background, face large), <Picture 2> the look frame (a composed still of the subject as she appears in this video: wardrobe, hair, location, framing), <Picture 3> the motion strip (a horizontal contact sheet of the reference clip's frames, chronological left to right). Labels follow slot index, and no <Video N> exists unless a clip is wired into a video slot — writing one then points at a label that is not in context. Cite <Picture 1> inside <Subject 1>; cite <Picture 2> for wardrobe and location and give it its own entry as the composition anchor; cite <Picture 3> inside a subject that defines the action progression, scoped weak_reference. A strip carries poses and their order but no timing at all, so the written timeline is the only thing setting pace — take its numbers from a measurement of the source clip anyway. Choose enough distinct, readable phase panels for the action; at ten panels an 1800-pixel strip leaves ~180 px per pose.

Identify before you describe — the zoom pass. A contact sheet resolves pose and trajectory and nothing else; at six panels across an 1800-pixel strip each frame is about 300 px wide. Before naming any object the subject holds or touches, crop it from the full-size frame and look — ffmpeg -ss T -i src.mp4 -frames:v 1 -vf "crop=W:H:X:Y,scale=2*W:2*H" zoom.png. A plausible guess is what gets rendered: a hair video makes "comb" plausible when the object is a makeup pencil held up like a plumb line, and the meaning of the gesture goes with it. Zoom on the same pass for marks on the reference actor that must be excluded — tattoos, jewellery, a watch — since you cannot exclude what you never saw. If it is still unidentifiable after zooming, say so and ask; a confident wrong noun becomes a rendered prop.

Find the through-line before writing the panels. A strip is usually one continuous movement sampled at intervals, not six independent poses. State what travels and in which direction, then write the panels as waypoints on that path — six equal-weight poses can be reordered into any activity, a stated trajectory cannot. Naming the single travelling element and stating that the rest of the body stays quiet blocks the wrong activity by construction.

Write a motion strip panel by panel, and count your motion words. Enumerate the panels in order, one sentence each, using ordinals — she begins … next … then … finally — because the model cannot count and prose second-counts schedule nothing. And weigh the vocabulary: repeated ambient movement (bouncing, shifting weight, moving to the beat, mouthing along) outcompetes a key action named once at the end, and the render comes back as dancing. Name incidental motion once in a subordinate clause; give the key action a sentence in every panel it appears in. Crop burned-in captions off the strip rather than forbidding them in retention_analysis — repeated across every panel, they are its most prominent content.

Name the distinguishing details — the picture does not describe itself. Small, low-contrast, off-centre features are the first thing flattened toward an average face: a face tattoo, freckles, a mole, a scar, a piercing, an unusual iris colour. Whatever is not named in subject_definitions can come back generic. Name each one by body landmark and side (a small black cross tattooed on her right cheekbone just below the outer corner of her eye), measure rather than compare (hair falling to her collarbone, not long hair), restate the same features in retention_analysis behind the fidelity marker, and copy the wording verbatim into every shot and every separate render. Scale sets the ceiling — a centimetre-wide mark is a few pixels in a wide shot and will not survive it, so frame close where it has to read. Ask which details must survive when a reference first appears; users rarely volunteer them and always notice when they are gone. Full treatment in references/reference-mode.md.

4. Camera motion

Official vocabulary. Write it as a natural English action inside the shot, never as labels stacked at the end.

Type — Zoom In / Zoom Out (focal length, body still) · Push In / Pull Out (body moves) · Pan Left / Right (pivot horizontally) · Truck Left / Right (translate horizontally) · Tilt Up / Down (pivot vertically) · Pedestal Up / Down (whole camera rises or drops) · Arc Shot (arc around the subject) · Tracking Shot · Static Shot · Shake Slightly / Strongly · POV · Roll Clockwise / Counterclockwise

Amplitude — with small amplitude, with large amplitude. Speed — at slow speed, at fast speed. Medium amplitude and normal speed are simply omitted.

The camera pushes in with small amplitude at slow speed toward the folded letter in her hands.
The camera arcs around her with large amplitude at slow speed as the lamp sweeps across frame.

Prefer camera motion over a cut when only distance or angle changes. A cut should introduce new information about subject, space, state, viewpoint or time.

5. Hard rules

These are empirical — none of them appear in MiniMax's guides.

Structure beats instruction. Anything you can make impossible by construction should be made impossible by construction rather than forbidden in words. A second shot is prevented by a lowered muzzle and drifting smoke, not by no second shot. A subject spinning instead of the camera is prevented by describing background parallax, not by she does not turn. A reference video bleeding its actor into your output is prevented by a merged <Subject N> definition and a weak_reference marker in retention_analysis, not by do not take the person from <Video 1> in the body.

This is not "never exclude anything" — it is about where the exclusion lives. A fidelity marker is a fixed value in MiniMax's documented format, which is a stronger convention than an ad-hoc sentence; but ComfyUI parses nothing, so it arrives as ordinary prompt tokens either way. That scoping there beats the same words in the body is empirical, not mechanical. What is solid is the general observation: a ban is text competing against a data signal, and the data usually wins.

The stock BasicGuider template has no negative prompt. It uses one conditioning input, CFG effectively 1. Prefer positive descriptions of the desired state. A custom ControlNet workflow may use a different guider with negative conditioning: inspect its actual graph instead of asserting that all H3 workflows lack that input. Changing the guider is a separate tuning decision; do not silently replace the user's working configuration.

The model cannot count, and bans amplify what they ban. exactly one shot is a token sequence, not a constraint, and no second shot puts second shot into the conditioning with no negative channel to subtract it. Name an event once, in one shot, with no prohibition attached, then block repetition through scene state.

Never write camera as a noun the subject interacts with. H3 renders she holds the camera as a prop. Use the official camera vocabulary for the movement, describe the subject's arms separately, and keep the two in different sentences — joined by a verb of possession they resolve into an object. When the device is the viewpoint, use POV and never mention it at all; a visible outstretched arm is what sells the grip.

Impossible poses produce body horror. Camera directly behind + body not rotating + eye contact needs a 170° neck twist, and the model resolves it by inverting the head or blending front and back anatomy. Stop at three-quarter, let the shoulders rotate with the head, and lock anatomy explicitly.

Shot and beat duration is read literally as event speed. A fall given 1.5 s renders as a 1.5-second fall — weightless, moon gravity. Real falls take about half a second. Budget the real duration, spend the remaining time on the aftermath, and remember that weight comes from the stop rather than the drop.

Big physical events need intermediate poses and room in the frame. "She falls" is an outcome the model smooths away. Give the trajectory, and make sure the framing actually contains the ground.

One primary camera move per shot. A secondary tilt or pan that keeps the subject framed during that move is fine — a pedestal up with a compensating tilt down is one operation, not two. What collapses into mush is several independent, equal-weight moves competing in the same shot.

Iterate one variable at a time, at a fixed seed.

6. Limits

Verified: 24 fps, the 17k+5 frame grid, a trained range of roughly 124–362 frames. Community-reported and not found in the primary sources: output up to 2K with a 1440 short edge, and a 7000-character prompt field — do not present either as documented. detailed_description runs 350–500 English words for generation tasks, with documented exceptions: dialogue-dense content departs from the range to fit the spoken timeline, and editing descriptions scale with the source. Full-reference slots in ComfyUI: 9 reference images, 3 reference videos, 3 same-index video soundtracks, 3 standalone audio clips. Standalone audio is accepted on its own — the node processes it unconditionally, despite community write-ups claiming otherwise. The reference-video tooltip recommends 2–15 s, but the code enforces only a 5-frame minimum, and a clip longer than the aligned target frame count is truncated to that, then trimmed down until its own frame count also satisfies 17k+5. No 12-file total or combined-duration cap exists in the source.

Frame count snaps to a 17k+5 grid, and anything off it is rounded up silently — multiples of 4 are not the rule. The node accepts 5 to 3600; the minimum is five frames, about a fifth of a second, not five seconds. Valid values at 24 fps:

5 = 0.21 s · 22 = 0.92 s · 39 = 1.63 s · 56 = 2.33 s · 73 = 3.04 s · 90 = 3.75 s · 107 = 4.46 s · 124 = 5.17 s · 141 = 5.88 s · 158 = 6.58 s · 175 = 7.29 s · 192 = 8.00 s · 209 = 8.71 s · 226 = 9.42 s · 243 = 10.13 s · 260 = 10.83 s · 277 = 11.54 s · 294 = 12.25 s · 311 = 12.96 s · 328 = 13.67 s · 345 = 14.38 s · 362 = 15.08 s

The tooltip calls ~124–362 the trained range and marks longer as untested. It says nothing against shorter: values below 124 are accepted and simply unproven, not forbidden. A one- or two-second beat is a legitimate choice — do not tell the user 124 is a floor.

7. What ComfyUI does with your prompt

There is no rewriter. MiniMax's guides describe the output of their own rewriting model, but ComfyUI tokenizes your text verbatim — not chat-templated, no special tokens. So the documented structure has to be written by hand if you want it at all. Whether reproducing it outperforms an equivalent plain-prose prompt has not been measured here; this skill uses it as the documented default, not as a proven win.

The alignment instruction is not emitted for you. ComfyUI prepends only "<Picture 1>: " and the image. The For the target video, at 0.00 seconds… and How the reference pictures align… lines from the guide are your text — type them as the first line of the prompt box, followed by a blank line.

ComfyUI injects the reference labels itself, before your prompt, in a fixed category order: all images, then videos — each video's soundtrack label placed immediately before its own <Video k> — then standalone audio. Ordinals are 1-based per type and follow slot number, not the order you happened to wire things. Two consequences: a video's soundtrack takes <Audio 1> ahead of any standalone audio, and moving an image from ref_image_2 to ref_image_0 renumbers it without touching your prompt. When you write <Picture 1> you are pointing at a label that already exists in the context.

Slot maxima on the node: 9 images, 3 videos, 3 video soundtracks, 3 standalone audio. The sockets auto-grow, so a fresh node showing three image inputs is not the limit.

Reference audio never reaches the text encoder — only its label does; the waveform goes to the DiT separately. Reference video reaches the encoder at 2 fps, so a 5-second clip arrives as roughly ten frames.

See references/comfyui.md for the exact ref_image_size formulas, the native canvas, and the undocumented MiniMaxH3SigmaShift node.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.