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

Jakkanna SCAIL-2 Save Manifest

Reproducibility you can actually point at

By teenu·Created 2 months ago·Updated 2 months ago· 6
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