Nodes/24oiduts-ComfyUI/🎬 Studio42 Video PatchDrop
ComfyUI Node

🎬 Studio42 Video PatchDrop

Drop a patch on every frame β€” with temporal consistency and motion blur

By GeekyGhostΒ·Created 12 months agoΒ·Updated 10 months agoΒ· 0
🎬 Studio42 Video PatchDrop
  • original_video
  • patch_video
  • patch_mask
  • result_video
  • placement_masks
  • preview_video
β—„patch_x0β–Ί
β—„patch_y0β–Ί
β—„patch_width256β–Ί
β—„patch_height256β–Ί
β—„patch_shaperectangleβ–Ί
β—„blend_modenormalβ–Ί
β—„opacity1.00β–Ί
β—„feather_edges0β–Ί
β—„corner_radius20β–Ί
β—„scale1.00β–Ί
β—„rotation0β–Ί
β—„position_modeuse_coordinatesβ–Ί
β—„manual_x0β–Ί
β—„manual_y0β–Ί
β—„resize_patchfalseβ–Ί
β—„preserve_aspecttrueβ–Ί
β—„temporal_consistency0.00β–Ί
β—„motion_blur0.0β–Ί
β—„edge_blendingtrueβ–Ί

Studio42 Video PatchDrop is the frame-by-frame version of the pack's PatchDrop: it places a patch video (or a single patch repeated) onto an original video at fixed coordinates, across every frame - with the temporal controls that keep the result from flickering like a bad green screen composite. It's the drop half of the Video PatchLift β†’ PatchDrop pipeline, and it exists because dropping a patch per-frame manually is miserable.

Feed it the original video and a patch (same dimensions, same frame count - the typical pairing is the outputs of Video PatchLift Loader), and it composites frame by frame with masks, blend modes, feathering, scaling, and rotation. The video-specific extras are where it gets useful:

  • temporal_consistency - smooths patch placement across frames so the patch doesn't jitter. The pack's docs suggest 0.3 as a starting value.
  • motion_blur - simulates motion blur on the moving patch for natural integration.
  • edge_blending - blends patch edges frame to frame so seams don't flash.

Everything else mirrors the still-image PatchDrop: patch_x/y, patch_mask, patch_width/height, patch_shape (+ corner_radius), blend_mode (9 modes), opacity, feather_edges, scale, rotation, position_mode (use_coordinates, center, manual with manual_x/y), resize_patch, preserve_aspect.

What comes out

result_video (the composited frame batch), placement_masks (per-frame masks of where the patch landed), and preview_video (with overlay indicators). Wire the result into a video save node with the audio from the loader and you're done.

Where it works - and where it doesn't

Fixed-coordinate placement across frames is great for a stable camera or a patch region that doesn't move. For a moving subject, the patch will sit still while the footage moves under it - you'd want per-frame coordinates upstream (or the pack's temporal controls set low and a stationary region). Within its lane it's a genuinely useful compositing node, and temporal_consistency + motion_blur are the knobs that keep it from looking like clip-art.

Installing it

Same pack, 24oiduts-ComfyUI:

  • ComfyUI Manager: search 24oiduts, install, restart.
  • Manual:
    cd ComfyUI/custom_nodes/
    git clone https://github.com/GeekyGhost/24oiduts-ComfyUI
    pip install -r 24oiduts-ComfyUI/requirements.txt
    then restart.

Like the other video nodes it needs opencv-python and ffmpeg-python (plus system FFmpeg) - if the whole Studio42 video section is missing from your menu, that's the cause. The GitHub README is a stale Studio42 template; ignore its "WIP, no license" banner.

Troubleshooting

  • Flickering patch - raise temporal_consistency a bit, or make sure the region matches between lift and drop.
  • Patch won't align - confirm both inputs have the same frame count and dimensions; the loader's frame_load_cap/select_every_nth outputs must match what you feed here.
  • Hard seams - add feather_edges and turn on edge_blending.
  • Video nodes missing entirely - dependencies; see install above.

For frame-consistent patching inside the graph, this is the node that finishes the job the Video PatchLift Loader starts.

Category🎬 Studio42/Video Processing

Inputs (22)

NameTypeDefaultDescription
original_videoIMAGEβ€”
patch_videoIMAGEβ€”
patch_xINT0-2048–4096β€”
patch_yINT0-2048–4096β€”
patch_maskoptMASKβ€”
patch_widthoptINT25616–1024β€”
patch_heightoptINT25616–1024β€”
patch_shapeoptCOMBOrectangle3 options: rectangle, circle, rounded_rectangle
blend_modeoptCOMBOnormal9 options: normal, multiply, screen, overlay, soft_light, hard_light, +3
opacityoptFLOAT1.000–1β€”
feather_edgesoptINT00–50β€”
corner_radiusoptINT205–100β€”
scaleoptFLOAT1.000.1–3β€”
rotationoptFLOAT0-360–360β€”
position_modeoptCOMBOuse_coordinates3 options: use_coordinates, center, manual
manual_xoptINT0-2048–4096β€”
manual_yoptINT0-2048–4096β€”
resize_patchoptBOOLEANfalseβ€”
preserve_aspectoptBOOLEANtrueβ€”
temporal_consistencyoptFLOAT0.000–1β€”
motion_bluroptFLOAT0.00–10β€”
edge_blendingoptBOOLEANtrueβ€”

Outputs (3)

NameTypeDescription
result_videoIMAGEβ€”
placement_masksMASKβ€”
preview_videoIMAGEβ€”