STARFlow-V Sampler
The 81-frame sampler
- model
- conditioning
- first_frame_latent
- latent
This is the heart of the video half of the pack - the node that takes a STARFlow-V model and a conditioning and actually emits video latents. Everything else in the STARFlow-V suite exists to feed or un-feed this node. And like its T2I cousin, it is emphatically not a KSampler: no steps, no scheduler, no denoise slider. STARFlow-V runs a block-wise reverse - deep, fully causal text-conditioned blocks first, then shallow temporally-local blocks - using Jacobi iteration to converge faster than a straight sequential decode. That's the "normalizing flow inversion" people talk about when they discuss Apple's architecture, and it's all happening inside this one node.
The inputs that matter
modelandconditioning- fromSTARFlowVCheckpointLoaderandSTARFlowVTextEncode, respectively.width/height-848×480by default, the nearest 16-aligned 16:9 size to Apple's released profile. Both must be divisible by 16; the sampler asserts it.num_frames- default81. This one will bite you: the count must follow4n+1, because the Wan2.2 VAE does causal temporal compression in fours. Set it to 80 and you get a hardValueErrortelling you exactly that.cfg-3.5default, matching the released inference profile. Like the T2I model, STARFlow-V isn't guidance-distilled, so keep it real. And remember: I2V (viafirst_frame_latent) requirescfg > 0.sampling_mode-jacobi(default) orancestral. Jacobi is the fast, block-wise fixed-point solver; ancestral is the strictly sequential fallback for debugging or when Jacobi misbehaves. Most people never switch.jacobi_block_size(32),jacobi_max_iter(32),jacobi_th(0.001) - the solver knobs, shipped at Apple's recommended values.apply_learnable_denoiser- defaulttrue, and the released profile says leave it on. STARFlow-V ships a learnable self-denoiser that cleans up the sample after the reverse pass.first_frame_latent(optional) - theLATENTfromSTARFlowVImageEncode. Provide it and you're doing image-to-video; leave it empty and it's text-to-video.
Output is latent, a raw un-normalized ComfyUI video LATENT in (B, C, T, H, W) layout, ready for STARFlowVDecode (or core VAEDecode) with a Wan2.2-TI2V VAE.
Wiring it
STARFlowVCheckpointLoader ──model──▶ STARFlowVSampler ──latent──▶ STARFlowVDecode ──▶ video out
STARFlowVTextEncode ──conditioning──▶ STARFlowVSampler
STARFlowVImageEncode ──first_frame_latent──▶ STARFlowVSampler (I2V only)
Install and models
Shared pack install:
cd ComfyUI/custom_nodes
git clone https://github.com/RyukoMatoiFan/ComfyUI-STARFlow
pip install -r ComfyUI-STARFlow/requirements.txt
# restart ComfyUI
Plus the 7B checkpoint in models/starflow_v/, a full local FLAN-T5-XL directory in models/text_encoders/flan-t5-xl/, and a Wan2.2 TI2V VAE for the core VAELoader - details in the checkpoint loader article. Checkpoints and checksums: huggingface.co/AkaneTendo25/starflow.
Gotchas
VRAM is the headline. At 480p the sampler's KV caches are enormous, and the code explicitly frees them on interruption because they can strand your GPU. If you're not on a 24 GB+ card, drop resolution before you drop frame count. The other classic: forgetting 4n+1. If the node throws about frame counts, that's the reason - 81, 85, 89, not 80, not 82. And be patient with the first run; the 7B transformer loads from scratch and it's a genuinely heavy single forward pass, which is normal and not a hang. When the quality underwhelms compared to a diffusion video model, remember the community verdict on STARFlow-V at release: the architecture is the thing worth seeing, and this node is how you see it.
Inputs (16)
| Name | Type | Default | Description |
|---|---|---|---|
| model | STARFLOW_V_MODEL | — | |
| conditioning | STARFLOW_V_CONDITIONING | — | |
| width | INT | 84816–2048 | — |
| height | INT | 48016–2048 | — |
| num_frames | INT | 811–401 | — |
| batch_size | INT | 11–16 | — |
| seed | INT | 00–18446744073709550000 | — |
| cfg | FLOAT | 3.500–20 | — |
| sampling_mode | COMBO | jacobi | 2 options: jacobi, ancestral |
| jacobi_block_size | INT | 321–4096 | — |
| jacobi_max_iter | INT | 321–256 | — |
| jacobi_th | FLOAT | 0.00100–1 | — |
| attn_temp | FLOAT | 1.000–4 | — |
| context_length | INT | 161–256 | — |
| apply_learnable_denoiser | BOOLEAN | true | — |
| first_frame_latentopt | LATENT | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| latent | LATENT | — |