Zura · Remove Captions from H3 Depth Guide
Stop the model rebuilding subtitles on your actor
- depth
- clip_details
- IMAGE
Burnt-in captions are the single most annoying thing about sourcing footage you don't own. You can mask the performer perfectly, preserve the background beautifully, and the render still comes back with a ghost of the subtitle bar hovering in the lower third - because a depth guide built from a frame with text in it says "there is geometry here," and the model dutifully rebuilds it.
This node deletes that geometry. Specifically, it deletes it from the depth guide, and only from the depth guide.
What it actually does
It is not an inpainting node and it does not touch your RGB frames. The docstring is blunt: "Remove detected caption geometry from a native depth guide, not RGB." If you were hoping for a LaMa-style text eraser for your source video, that's the studio's own "Remove on-screen text" feature and it uses ArtVenture's big-lama weight. This node is the smaller, graph-view-facing piece of that idea.
How it works
It reads caption rectangles out of the GENJ_CLIP metadata - the pack's per-clip details dict, which carries text_regions plus the text_regions_size raster those rectangles were measured against. Those regions come from the studio's text detection pass, recorded per shot, which is why it takes the clip details rather than a coordinate list.
For each rectangle it scales the box from the detection raster onto the actual depth frame, then fills it by interpolating between the depth rows immediately above and below the panel. It takes a thin band (up to three rows) on each side, averages it across the width, and ramps linearly from the top value to the bottom value across the hole. So a caption sitting on a wall gets replaced with the wall's depth gradient, not with black or zero.
Everything outside the boxes is untouched, and each frame keeps its own depth for the performer - pose, facial geometry, all of it. That's the important property: this is a surgical patch of a control signal, not a filter over your guide.
If text_regions is empty, the node returns the image unchanged. No regions detected, nothing to do, no surprises.
Inputs and outputs
depth-IMAGE, the source video's native depth guide (whatever preprocessor you're using for the H3 control path).clip_details-GENJ_CLIP, the reviewed clip metadata that carries the caption rectangles.IMAGE(output) - the cleaned depth guide, into the VAEEncode → control pack chain.
Install
Pack install, once:
cd ComfyUI/custom_nodes && git clone https://github.com/ZURAVFX/ComfyUI_zura_nodes
pip install -r ComfyUI_zura_nodes/requirements.txt
Nothing extra for this node. The full "Remove on-screen text" feature in Zura Studio is the part with dependencies - it wants ComfyUI-ArtVenture and ComfyUI-KJNodes, and ArtVenture may pull big-lama.pt (~196 MB) on first use. Restart after adding nodes.
Common issues
"Prepare the text removal mask again before cleaning depth." The clip details have regions but no recorded detection raster. That happens when you hand the node a GENJ_CLIP from an older save, or one that was clipped by the v1.2.2 seed-field bug the README describes. Re-prepare the clip.
"Connect the source video's native depth guide." You wired an RGB image, or a depth map that hasn't been through the guide path at all. The node checks for a proper 4D finite image tensor - a single-frame depth map will pass validation but do nothing useful, so keep the batch in shot order.
The wrong area got patched. The regions are stored scaled to the detection raster and remapped onto the depth raster. If you resized the depth guide after detection - or changed the working resolution between preparing the mask and building the control - the boxes land in the wrong place. Prepare and build control at the same raster.
Text still shows up. Two separate cases: the detection didn't catch the caption (nothing to patch), or the caption is near the performer and got deliberately skipped. The studio-level feature explicitly ignores text panels that touch or come close to the performer's mask, on the grounds that patching there would damage the person. This node inherits whatever regions were recorded, so if the region list is short, the detector made that call, not this node.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| depth | IMAGE | — | |
| clip_details | GENJ_CLIP | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |