Nodes/ComfyUI_zura_nodes/Zura · Load Reviewed Shot
ComfyUI Node

Zura · Load Reviewed Shot

The approval gate that re-hashes your source before rendering

By ZURAVFX·Created about a month ago·Updated a day ago· 2
Zura · Load Reviewed Shot
    • source_clip
    • performer_mask
    • seedance_guide
    • clip_details
    • genuine_performer_mask
    ◄shot_id►
    ◄approved_shot_id►
    ◄render_long_edge0►
    ◄output_scale1►
    ◄preview_seconds0.00►

    Most "load a clip" nodes will happily load whatever path you give them. GenjLoadReviewedShot ("Zura · Load Reviewed Shot") is stricter in a way that's worth understanding, because it's the node that stands between the mask you approved and the 20-minute render you're about to start.

    Two IDs, and why they're separate

    It takes shot_id (the reviewed shot from GenjSaveReview) and approved_shot_id. The second one exists because Studio fills in the approval after you click through the review, and the node refuses to run unless the two agree:

    Approve the reviewed mask in Zura Studio before generation. Standalone graphs require matching reviewed and approved shot IDs.
    

    In a hand-built graph, that means wiring the same string into both fields. It's a two-field handshake you'd normally do with a boolean, but a boolean can't tell you which shot you approved - and that's the failure this is designed to prevent.

    Before returning anything it re-reads review.json and re-hashes every file in the shot folder, then re-hashes the original source video against the hash recorded at selection time. Change the clip on disk, re-encode it, or move it, and you get The original source changed. Prepare and review the shot again. Same story for a reference audio track: The reference audio changed. Prepare the shot again. The node also sets IS_CHANGED to a NaN sentinel when the IDs don't match, which forces ComfyUI to re-execute it rather than serving a cached result.

    The three optional knobs

    • render_long_edge (0–1920, default 0). 0 uses the reviewed preview. Set it to 1280 or 1920 and the node re-reads the original footage at full resolution, scales it with lanczos, and resizes the approved mask to match - so you review at 768 and render at 1280 without losing the approval. It's cached per size, so the re-read only happens once. Note the model canvas is rounded to a 64-pixel grid here, unlike the even-pixel rounding in GenjSelectClip, because this raster feeds a diffusion model.
    • output_scale (1 or 2). 2 halves the model canvas, which is the escape hatch when you're about to blow out VRAM. Delivery resolution is tracked separately and restored at export.
    • preview_seconds (0–30). Trims everything - source, mask, guide - down to a short test take from the start of the shot. This is what the pack's H3 two-second preview uses.

    Outputs

    Five of them, and the names are honest:

    • source_clip - a VIDEO of the reviewed footage at your chosen render size.
    • performer_mask - a video (not a MASK), the approved combined mask rendered as frames. It's what you feed to the nodes that expect a mask video.
    • seedance_guide - the guide.mp4 from the review: guidance frames plus the guidance audio, ready as a reference clip for a hosted model.
    • clip_details - GENJ_CLIP, now carrying review_shot_id and the export raster. Everything downstream that needs to prove provenance reads this.
    • genuine_performer_mask - the separately saved performance-only mask, or the combined mask as a fallback if the review didn't include one.

    Install

    This node ships with Zura Nodes: ComfyUI Manager → search Zura Nodes → install → restart. Manual install:

    cd ComfyUI/custom_nodes
    git clone https://github.com/ZURAVFX/ComfyUI_zura_nodes
    python -m pip install -r ComfyUI/custom_nodes/ComfyUI_zura_nodes/requirements.txt
    

    PyAV and ffmpeg on PATH do the re-read and rescale; there's no model involved, so this one works on a box that has the pack installed and nothing else downloaded.

    Gotchas

    Don't delete the shot folder. The approved mask lives in output/genj/reviews/<shot_id>/, and clearing your outputs breaks the gate with an unhelpful-looking file error. If you're short on disk, delete takes from genj/final, not genj/reviews.

    Mismatched IDs after an edit. If you tweak the mask and re-run GenjSaveReview, the shot ID changes and the old approval no longer validates. That's the feature working; paste the new ID.

    Expecting a MASK from performer_mask. It's a video. If a node wants a MASK, that's what ZuraWanReviewedFrames and friends are for - a very common wiring mistake when you're reading the outputs cold.

    CategoryZura/Artist Studio

    Inputs (5)

    NameTypeDefaultDescription
    shot_idSTRING—
    approved_shot_idSTRINGStudio fills this automatically after review. Standalone graphs must use matching reviewed and approved IDs.
    render_long_edgeoptINT00–19200 uses the reviewed preview. Higher values reread the original footage and resize the approved mask.
    output_scaleoptINT11–2—
    preview_secondsoptFLOAT0.000–30—

    Outputs (5)

    NameTypeDescription
    source_clipVIDEO—
    performer_maskVIDEO—
    seedance_guideVIDEO—
    clip_detailsGENJ_CLIP—
    genuine_performer_maskVIDEO—