Combine videos
combine_videosJoin existing video clips into ONE continuous video, in the order given — assemble a multi-shot sequence from clips already in the library (NOT to generate new footage). Pass 1–10 artifact ids (job:#0 handles, in play order). Clips are normalized (resolution/fps) and concatenated, removing the jump between mismatched clips. TRIM: to cut a clip before joining, pass an object { id, start, end } (or { id, start, duration }) in SECONDS instead of a bare id; or set max_clip_seconds to keep the first N seconds of EVERY clip (models often return a longer clip than asked — e.g. ~4s for a 3s request). One clip + a trim is a valid single-clip trim. Ranges auto-clamp to the real clip length. AUDIO: pass audio_id (a voiceover from generate kind "speech") and/or music_id (a bed from generate kind "music") to lay over the result. audio_mode:"replace" (default) makes the overlay(s) the ONLY soundtrack (clips' own audio muted); audio_mode:"mix" lays them OVER the clips' audio — set clip_volume (0–2, e.g. 0.2) to quiet the clips' own sound effects under a voiceover. Each overlay has its own gain (audio_volume / music_volume, 0–2; e.g. VO 1.0, music 0.15) and optional fades (audio_fade_in/out, music_fade_in/out, seconds). ducking:true auto-lowers the clips' audio + music WHILE the voiceover speaks and lets them recover in the gaps (sidechaincompress) — the cleanest way to keep a VO on top. Per clip: a video_ids object can carry its own volume (e.g. {id, volume:0.3}) to set that one clip's audio level. Single clip + audio_id = swap one video's audio. Output is free (no model runs). Unsure which ids or their order? call search_creations or read the Recent list in get_settings first. If you have not loaded it this session, call load_skill("combining-videos").
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| ducking | No | ||
| audio_id | No | ||
| music_id | No | ||
| video_ids | Yes | ||
| audio_mode | No | ||
| project_id | No | Opaque per-chat project id: "p-" plus 6 random letters and digits. Every chat is a new project. Mint one on your first emero call and pass that SAME id on every call in this chat. Never mint a second one in the same chat, even for a new topic, campaign or subject. Only when the user asks to continue an earlier project, reuse its id from get_emero_brain's project list. | |
| clip_volume | No | ||
| audio_volume | No | ||
| music_volume | No | ||
| project_name | No | Short human title for the project (2-5 words from the user request, e.g. "Perfume ad campaign"). Pass it on your first generate/ingest_url so the project is not left "Untitled". You may also rename at will later — pass an updated project_name (on a generate/ingest_url, or on set_settings with no other change) whenever the user asks, e.g. "call this project cats". | |
| audio_fade_in | No | ||
| music_fade_in | No | ||
| audio_fade_out | No | ||
| music_fade_out | No | ||
| max_clip_seconds | No |