π¬ Studio42 Video PatchDrop
Drop a patch on every frame β with temporal consistency and motion blur
- original_video
- patch_video
- patch_mask
- result_video
- placement_masks
- preview_video
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:
then restart.cd ComfyUI/custom_nodes/ git clone https://github.com/GeekyGhost/24oiduts-ComfyUI pip install -r 24oiduts-ComfyUI/requirements.txt
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_consistencya 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_nthoutputs must match what you feed here. - Hard seams - add
feather_edgesand turn onedge_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.
Inputs (22)
| Name | Type | Default | Description |
|---|---|---|---|
| original_video | IMAGE | β | |
| patch_video | IMAGE | β | |
| patch_x | INT | 0-2048β4096 | β |
| patch_y | INT | 0-2048β4096 | β |
| patch_maskopt | MASK | β | |
| patch_widthopt | INT | 25616β1024 | β |
| patch_heightopt | INT | 25616β1024 | β |
| patch_shapeopt | COMBO | rectangle | 3 options: rectangle, circle, rounded_rectangle |
| blend_modeopt | COMBO | normal | 9 options: normal, multiply, screen, overlay, soft_light, hard_light, +3 |
| opacityopt | FLOAT | 1.000β1 | β |
| feather_edgesopt | INT | 00β50 | β |
| corner_radiusopt | INT | 205β100 | β |
| scaleopt | FLOAT | 1.000.1β3 | β |
| rotationopt | FLOAT | 0-360β360 | β |
| position_modeopt | COMBO | use_coordinates | 3 options: use_coordinates, center, manual |
| manual_xopt | INT | 0-2048β4096 | β |
| manual_yopt | INT | 0-2048β4096 | β |
| resize_patchopt | BOOLEAN | false | β |
| preserve_aspectopt | BOOLEAN | true | β |
| temporal_consistencyopt | FLOAT | 0.000β1 | β |
| motion_bluropt | FLOAT | 0.00β10 | β |
| edge_blendingopt | BOOLEAN | true | β |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| result_video | IMAGE | β |
| placement_masks | MASK | β |
| preview_video | IMAGE | β |