Nodes/Jakkanna/Jakkanna SCAIL-2 Save Manifest
ComfyUI Node

Jakkanna SCAIL-2 Save Manifest

Reproducibility you can actually point at

By teenu·Created 3 months ago·Updated 2 months ago· 7
Jakkanna SCAIL-2 Save Manifest
  • output_images
  • pose_video_mask
  • reference_image_mask
  • sigmas
  • source_images
  • reference_image
  • manifest_path
◄input_report—►
◄reference_report—►
◄source_initial_mask_report—►
◄reference_mask_report—►
◄track_report—►
◄noise_report—►
◄positive_prompt—►
◄negative_prompt—►
◄seed—►
◄diffusion_model▾►
◄dpo_lora▾►
◄sam_checkpoint▾►
◄text_encoder▾►
◄clip_vision▾►
◄vae▾►
◄attention_backend▾►
◄hash_model_filestrue►
◄filename_prefixscail2_production/manifests/SCAIL2_replacement_production►
◄acceleration_lora▾►
◄acceleration_lora_strength0.00►
◄sampler_nameFlow-UniPC►
◄scheduler_nameupstream Flow-UniPC►
◄steps40►
◄flow_shift3.00►
◄cfg5.00►
◄effective_flow_shift0.00►
◄modereplacement►
◄preprocess_report—►

JakkannaSCAIL2ProductionManifest is the receipt for an entire SCAIL-2 run, and it's the node that separates "it worked yesterday" from "here's exactly what made it work." It gathers every report from the run - input, reference, initial mask, reference mask, track, noise - plus your prompts, seed, the exact model files, sampler settings, and the attention backend actually in use, and writes the whole thing to one JSON manifest file.

Why this exists: SCAIL-2 has a genuine artifact problem, and the community's answer to identity drift is mostly "change the LoRAs, raise steps, raise CFG, and accept the rest" (see the KB's SCAIL-2 panel). With an 81-frame run costing minutes per clip, "what settings did that good run use?" is not a question you want to answer from memory. The manifest pins the answer in a file you can diff, archive, or ship alongside the output video.

The mechanism is where it gets interesting, because it doesn't trust you. The node re-reads your actual prompt graph and reconciles what you declared against what the graph really does - the sampler, scheduler, steps, CFG, mode, DPO LoRA strength, and CLIP-Vision crop all get resolved from the executed graph, not from whatever widgets you think you set. It validates that the seed matches the noise report's seed. It cross-checks raw source and reference tensor hashes if you connected them. And it refuses to write if any listed model artifact isn't actually loaded in the graph - a hard error beats a manifest that claims a LoRA you removed.

Inputs that matter:

  • The model pickers - diffusion_model, dpo_lora, sam_checkpoint, text_encoder, clip_vision, vae - plus attention_backend (PyTorch SDPA, FlashAttention, SageAttention, xFormers, or split/sub-quadratic)
  • hash_model_files (default true) - hashes every model file into the manifest; the hashes are cached, so the cost is one-time per file
  • mode - replacement (default) or animation
  • filename_prefix - default scail2_production/manifests/SCAIL2_replacement_production
  • Optional sampler details: steps (40), cfg (5), flow_shift (3), sampler_name / scheduler_name (Flow-UniPC and "upstream Flow-UniPC"), acceleration_lora, and sigmas - wire the actual sampled sigma schedule in and it's recorded verbatim

Output: manifest_path, the STRING path to the JSON you just wrote.

The tooltip on effective_flow_shift is the node's personality in one sentence: the shift actually realized in the sigma schedule, where 0 means "same as flow_shift" - and if you wire sigmas in, the run fails unless the schedule is the Euler/simple flow schedule at that shift. It would rather error than bless a manifest that doesn't match reality.

Install: part of the Jakkanna pack - Manager, search "Jakkanna", or:

cd ComfyUI/custom_nodes
git clone https://github.com/teenu/ComfyUI-VNCCS-Utils-Maintained
cd ComfyUI-VNCCS-Utils-Maintained
pip install -r requirements.txt

Restart. Don't run it in the same instance as upstream vnccs-utils. The pack doesn't fetch SCAIL-2 or SAM 3.1 weights; the loaders name files that should already be in your models folders.

The trap: this is an output node, so it always runs, and it will throw if the noise seed doesn't match or a loader changed after you wired it. Beginners read those as crashes. They're the feature - the manifest is only worth writing if it's true. Swap a model, update the manifest inputs, run again.

CategoryJakkanna/SCAIL-2

Inputs (34)

NameTypeDefaultDescription
output_imagesIMAGE—
pose_video_maskIMAGE—
reference_image_maskIMAGE—
input_reportSTRING—
reference_reportSTRING—
source_initial_mask_reportSTRING—
reference_mask_reportSTRING—
track_reportSTRING—
noise_reportSTRING—
positive_promptSTRING—
negative_promptSTRING—
seedINT—
diffusion_modelCOMBO0 options:
dpo_loraCOMBO0 options:
sam_checkpointCOMBO0 options:
text_encoderCOMBO0 options:
clip_visionCOMBO0 options:
vaeCOMBO0 options:
attention_backendCOMBO5 options: PyTorch SDPA, FlashAttention, SageAttention, xFormers, ComfyUI split/sub-quadratic
hash_model_filesBOOLEANtrue—
filename_prefixSTRINGscail2_production/manifests/SCAIL2_replacement_production—
acceleration_loraoptCOMBO1 options: None
acceleration_lora_strengthoptFLOAT0.000–10—
sampler_nameoptSTRINGFlow-UniPC—
scheduler_nameoptSTRINGupstream Flow-UniPC—
stepsoptINT401–100—
flow_shiftoptFLOAT3.000–100—
cfgoptFLOAT5.000–100—
effective_flow_shiftoptFLOAT0.000–100Shift actually realized in the sigma schedule; 0 = same as flow_shift. When sigmas is connected, the run fails unless the wired schedule is the Euler/simple flow schedule at this shift.
modeoptCOMBOreplacement2 options: replacement, animation
sigmasoptSIGMASWire the sampled sigma schedule to record it verbatim and validate effective_flow_shift against it.
source_imagesoptIMAGERaw source tensor batch used by SAM and SCAIL. Connect for authoritative capture provenance.
reference_imageoptIMAGERaw reference tensor used by SCAIL. Connect for authoritative reference provenance.
preprocess_reportoptSTRINGOptional prepared image/FBX input manifest.

Outputs (1)

NameTypeDescription
manifest_pathSTRING—