Install
openclaw skills install cleanup-video-overlayUse this skill when the user wants to clean a video or screen recording by removing overlays such as status bars, notification banners, floating controls, subtitle bars, fixed watermarks, or other surface UI elements. Especially useful for FFmpeg-based frame extraction, region mask generation, fixed-overlay removal with ffmpeg removelogo, and orchestrating frame-by-frame restoration workflows that use Gemini Nano Banana 2 before rebuilding the video.
openclaw skills install cleanup-video-overlayRepository: https://github.com/hyuuuliu/video-overlay-cleanup-skill
Use this skill to turn a raw video or screen recording into a cleaner version with fewer visible overlays.
This skill is a workflow skill, not a claim of magical ground-truth recovery. It is best for:
This skill should frame the task as video cleanup or overlay removal, not guaranteed factual restoration of hidden content.
This version supports one real model provider for generative frame repair:
Gemini Nano Banana 2 via the Gemini image generation and editing APIBefore using gemini-nano-banana mode, the user must configure an API key:
export GEMINI_API_KEY='your_api_key_here'
Optional model override:
export GEMINI_MODEL='gemini-3.1-flash-image-preview'
export GEMINI_IMAGE_SIZE='1K'
Declare these explicitly when installing or reviewing the skill:
bashffmpegffprobepython3GEMINI_API_KEYGEMINI_MODELGEMINI_IMAGE_SIZEgoogle-genaiPillowRead references/gemini-provider.md when the user wants the Gemini path.
Use this skill when the user asks for any of the following:
Choose the lightest path that can work:
ffmpeg with a generated mask and removelogoremovelogo quality is not enough: extract frames and run Gemini Nano Banana 2 on the masked areaDo not default to full-frame generative editing when a fixed-region or deterministic method is enough.
Decide which of these cases applies:
fixed-edge-overlay: top status bar, bottom nav bar, subtitle strip, corner logofixed-box-overlay: stable watermark or floating widget in one areadynamic-overlay: notification banner, moving sticker, transient floating controlunknown: the user has not yet provided enough detail to define a maskIf the overlay location is unclear, ask for the smallest missing detail needed, or propose a reasonable first mask and label it as a draft.
For fixed-edge-overlay or fixed-box-overlay, prefer the built-in scripts:
scripts/make_mask.pyscripts/clean_video.sh --mode removelogoFor Gemini-based workflows, use:
scripts/clean_video.sh --mode gemini-nano-bananascripts/gemini_nano_banana_edit.pyFor low-level or custom provider workflows, use:
scripts/extract_frames.shscripts/restore_frames.pyscripts/rebuild_video.shRead references/pipeline.md for the end-to-end flow, references/mask-strategies.md for mask design guidance, and references/gemini-provider.md for Gemini-specific behavior.
Masks decide success. Keep these rules:
Region format used by this skill is x:y:w:h.
Each value may be pixels like 120 or a percentage like 8%.
Examples:
0:0:100%:7%0:92%:100%:8%78%:3%:18%:12%Use when the overlay stays in one place.
bash scripts/clean_video.sh \
--input /abs/path/input.mp4 \
--output /abs/path/output.mp4 \
--mode removelogo \
--region '0:0:100%:7%'
You can also add presets:
bash scripts/clean_video.sh \
--input /abs/path/input.mp4 \
--output /abs/path/output.mp4 \
--mode removelogo \
--preset iphone-status-bar
Use when the user wants masked per-frame restoration.
export GEMINI_API_KEY='your_api_key_here'
bash scripts/clean_video.sh \
--input /abs/path/input.mp4 \
--output /abs/path/output.mp4 \
--mode gemini-nano-banana \
--region '0:0:100%:12%' \
--image-size 1K
Optional model override:
bash scripts/clean_video.sh \
--input /abs/path/input.mp4 \
--output /abs/path/output.mp4 \
--mode gemini-nano-banana \
--region '0:0:100%:12%' \
--model gemini-3.1-flash-image-preview \
--image-size 2K
Use only when the user explicitly wants a custom editor command instead of Gemini.
bash scripts/clean_video.sh \
--input /abs/path/input.mp4 \
--output /abs/path/output.mp4 \
--mode frame-edit \
--region '0:0:100%:12%' \
--editor-cmd 'my-editor --input {input} --mask {mask} --output {output}'
The editor command receives:
{input}: source frame path{mask}: mask path{output}: destination frame path{index}: zero-based frame numberAlways note when one of these is true:
Keep the risk statement simple:
The current Gemini implementation uses several safeguards:
That last safeguard is important: if the model edits the hamster, cage, or other visible scene content outside the white mask, the saved output still keeps the original unmasked pixels. This improves visual stability, but it also means all useful edits must happen inside the supplied mask.
A good result includes:
removelogo, gemini-nano-banana, or frame-editGEMINI_API_KEY was requiredWhen useful, also keep the work directory so the user can inspect:
cleaner-looking from factually restoredGood invocations:
For implementation details, load: