- BFS Shot H3 Conditioning and its Simple version always pass every picture of the shot: the
use_ref_2 switch is gone (the pictures are chosen in the planner). The published v1.1
character-swap workflow had it off, so only <Picture 1> reached the model. Saved
workflows are upgraded on load: their widget values are put back by name (checked with
the published v1.1 and tutorial workflows).
- 🤖 Auto prompt: Style = H3 official (six sections) or OpenJutsu captions, the short
'Replace the ... in the video with ... from <Picture n>. Keep ...' style of the training
captions (written from the request, the frames and the pictures).
- The writer samples (repetition and presence penalties) instead of greedy decoding, which
looped on long answers; repeated sentences and a cut sentence are removed, missing sound
sections completed; an answer with problems (missing <Subject n> in detailed_description,
a loop, H3 sections in a caption) is written once more, told what was wrong; labels still
missing are tied after [Shot 1]. A subject acts with its own body (hands, not paws).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 🤖 Auto prompt (Prompts & refs): the prompt boxes become requests and the VLM writes each
shot's MiniMax H3 prompt in the full-reference format of MiniMax-H3's
VIDEO_PROMPT_WRITING_GUIDE_ref_en (six sections, task types, retention markers, [Shot N],
official camera terms) from key frames of the shot (auto: ~1.5/s, 3-8), the shot's
pictures and their descriptions, the request, Colored Marks, selection and mode, citing
the source as the guide video or <Video 1>. Write all / missing in the panel, per shot
Write again and edit; shots without one are written at run time (before SAM 3) and the
panel stores them; out-of-date prompts are flagged. A written prompt is part of the
stored shot's signature.
- Duet removed from the planner (its split-screen prompt writer, /bfs/shotloop/write) and
from BFS Shot H3 Conditioning (Advanced): duet, panel_*, rope_gap, task, instruction.
The model input stays as a pass-through so workflows that routed the model keep working.
BFS Shot H3 Duet and the Side Panel nodes keep the duet.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Colored Mark: every picture has a mark color (12-color palette, editable under each
global picture); a shot's selection and each extra person ("+ Mark another person",
text or points) pick the picture they become ("Picture 3 · red", with its
thumbnail) and are drawn in its color. The prompt gets a model-agnostic mapping
("the person marked in red becomes the character from <Picture 3>"). The
conditioning node checks each marked picture is passed and colors are not shared.
Plans with the old second region open with it as <Picture 2>.
- Points window: fixed size; the frame fits a fixed stage (points are stored relative to
the frame); one point set per marked person.
- BFS Shot Planner outputs refs (every picture the shots use, as a list) and ref_count
where ref_image / ref_image_2 were.
- Saved workflows are upgraded on load: the planner's ref_image / ref_image_2 inputs are
removed, old ref outputs become refs / ref_count, and what fed Repack's ref_image
feeds refs.
- New describe preset "object" (a noun phrase: what it is, shape, materials, colors,
text), written for the prompt sentence like "short".
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Describe references is per picture now: one row per picture the plan uses, each with
its own preset (default = the card's; custom with its own instruction) and 🔄 to
describe only that one. {details} = picture 1, {details2} = picture 2,
{details@Picture n} = picture n. Descriptions saved per reference set by older plans
are read as those pictures'. The separate "Describe each picture" section is gone.
- BFS Shot Unpack: refs (every picture of the shot, as a list: the next node runs once
per picture) and ref_count replace ref_image / ref_image_2 in the same output slots.
BFS Shot Repack's refs input takes the list back and splits it per shot; ref_image
links from older workflows still work.
- Prompt chips read PictureN (they insert <Picture N>).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Plans keep a list of pictures (global_refs, per-shot refs) instead of ref / ref2; older
plans are converted on load and ref / ref2 stay in the JSON as pictures 1 and 2. A
shot's empty slot uses the global picture at the same position.
- Panel: the global list starts with one slot and + adds more (several files at once);
drop image files on a slot to replace it or on the box to add them; recent thumbnails
can be dragged onto any slot. Chips under every prompt insert <Picture N> at the cursor
(@PictureN) or {details@Picture N} (📝).
- {details@Picture n}: the description of the shot's n-th picture alone. 📝 Describe each
picture writes one per image (editable, saved as picture_details); without one, the
planner's VLM, then the conditioning node's VLM, describes it at run time.
- The planner's ref_image / ref_image_2 inputs are gone (a workflow saved with them
connected still runs and the log says they are ignored). Conditioning and Duet pass
every picture of the shot (use_ref_2 off: only the first) and log when there are
more than 9.
- Stored shots keep their signature when a shot has at most 2 pictures and no
per-picture descriptions are set.
- A two-picture shot no longer gets the automatic <Subject 2> {details2} line when the
prompt already names <Picture 2> or uses {details@Picture n}.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Every shot stored and up to date: the planner hands out an assemble-only placeholder
(no VLM, SAM 3 or history) and BFS Shot Join assembles the stored shots. Its images
input is lazy, so conditioning, sampler and decode are not executed again (before,
the last shot was generated again just so the join had something to join).
- Run tab: "Unload models before the join" (on by default): once every shot is
rendered, unload the models so the join and the nodes after it get the memory.
Not part of the shot signature, so toggling it keeps the stored shots.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The Run tab gets a 'Second pass (upscale)' section: on/off, and the upscaled
size by multiplier, target dimensions or megapixels with an alignment, the
same arithmetic as Minimax H3 Latent Upscaler (3D). The planner outputs
second_pass (BOOLEAN), upscale_width and upscale_height (INT); the graph does
the latent upscale and the second sampling with its own nodes.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Stored shots move from ComfyUI's temp folder (emptied at every start) to
output/bfs_shotloop (Shot cache = keep; temp still available).
- Each shot is saved as a lossless FFV1 video next to a small .pt (~12x
smaller than raw frames, exact); Smaller / Smallest (H.264 RGB) and Raw
are selectable.
- One run folder per source video; each shot carries a signature of its
settings, so a Queue runs only the shots that changed, plus the ones that
continue from a new take. Redo (with or without cascade) from the panel.
- The final join reads one stored shot at a time into the output (measured
+15.8 GB -> +8.2 GB on 11 shots at 960x544); save to = mp4 file streams
the video and the comparison to ffmpeg (+2.1 GB). New video_path output.
- Combine stored shots: an MP4 of what is stored now, without generating.
- tools/bfs_assemble_shots.py reads the new format; docs updated.
Bump BFSNodes version to 1.104.0.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
BFS Shot Join records every shot it receives (latent tokens = generated
frames x resolution, with the continuity head) and the peak VRAM of its
run, per GPU. The panel compares each planned shot with the biggest one
that already ran on this GPU: a status at the top, a Memory card and a
warning in Checks when a shot is much bigger (possible out of memory).
No fixed GB guess, since ComfyUI offloads weights as needed.
New Run option 'Between shots': keep models loaded (default) or free
memory (unload every model between shots, for low VRAM).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Tested on real H3 runs: continuity holds and memory stays as in the other
modes. It needs no open browser tab, unlike the queue loop. Saved plans
keep their own run mode. Bump BFSNodes version to 1.102.0.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
One Queue renders every shot in order inside the same prompt: after a shot
is stored, BFS Shot Join expands the planner-to-join body (ComfyUI node
expansion) for the next one, so continuity head/history works without the
browser re-queueing. Graph walk adapted from Ethanfel's MiniMax H3
Context Loop. Queue loop and auto loop are unchanged; new plans default to
the recursive run.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Continuity head/history needs each shot to read the previous result, which
only exists in the queue loop (the auto loop conditions every shot before
sampling any). New plans start in the queue loop with auto-queue on, and
the Run checks warn when a shot asks for head/history in the auto loop.
Bump BFSNodes version to 1.101.0.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>