Skip to content
Back to skills

Quick Merge And Export

ASecurity

The shortest path from media URLs to a rendered file - merge or concatenate several videos into one with the montage template, sample frames from a scene into a contact sheet, and export any valid scene to a file. Use when asked to merge, join or concatenate clips, to preview a scene as frames, or to render a scene, and no other skill covers the job.

  • 6 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added November 5, 2026
ai-agentspythongoshellbash

Works with

  • cli

Security analysis

A100/100

Pro scans all 2 files and shows the line behind each finding

Scanned November 11, 2026

npx -y skills add PicsArt/gen-ai-skills --skill quick-merge-and-export --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Quick Merge And Export?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Quick Merge And Export
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/picsart-quick-merge-and-export/badge)](https://www.skillsdirectory.com/skills/picsart-quick-merge-and-export)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: quick-merge-and-export
description: The shortest path from media URLs to a rendered file - merge or concatenate several videos into one with the montage template, sample frames from a scene into a contact sheet, and export any valid scene to a file. Use when asked to merge, join or concatenate clips, to preview a scene as frames, or to render a scene, and no other skill covers the job.
metadata:
  category: authoring
  version: '1'
user-invocable: false
---

# Scene quickstart

Three short jobs, each a fixed chain of tools. Every tool takes media by URL. None reads a local
path, a `file://` URI or inlined file bytes, and such a source is refused before anything renders.
For a file the user has only on their device, call `picsart_drive_upload_ask`: it opens a
drag-and-drop upload. The call itself returns no URL; the file's URL arrives on the user's next
turn, as widget context (or in their message), so read it there before going on. Pass `detected_files` when you can see the file
name, and `known_urls` to offer URLs already made in this conversation.

## Merge several videos into one

The montage template plays its clips one after another and renders one file.

1. **Probe each clip.** Call `picsart_media_probe` once per clip URL for its width, height
   and duration. Skip a clip whose exact size and duration an earlier tool result already gave. A
   missing `durationSeconds` means the duration is unknown, not zero: follow the probe's own note
   on that field.
2. **Build the parameters.** Write the clips as JSON, one object per clip with `uri`, `width`,
   `height`, `duration` from the probe, and optionally `in` and `out` (the trim, in seconds),
   `fit` (`cover`, `contain` or `fill`) and `align` (one of nine positions such as `top left` or `center`, the default).
   Then run `scripts/montage_params.py`:

   ```bash
   python3 scripts/montage_params.py --transition crossfade --transition-duration 0.4 clips.json
   ```

   It prints the complete `picsart_scene_apply_template` arguments: `uri:
   "scene://montage"`, `mode: "bootstrap"`, and `parameters` with `transition`,
   `transitionDuration` and `clips`. Omit `--width` and `--height`: the canvas matches the largest
   clip and the frame rate follows the clips. Pass both only to deliberately change the aspect
   or size. For a smaller output file, use `picsart_scene_export`'s `resolution`. Pass
   `--transition ""` for a hard cut. Use `fit` and `align` when a clip's shape differs from the
   output's, as with portrait and landscape clips in one montage.

   **Without a shell, write the script's output yourself.** The template's clips do not take the
   input shape above. Each clip becomes `duration` (`out` minus `in`) plus a `content` object
   that carries the probed asset, the trim, `fit` and `align`. A hard cut is `transition: ""` with
   `transitionDuration: 0`. Here clip 1 is trimmed to 0–4 s of a 12 s clip, then a hard cut to
   all 8 s of clip 2:

   ```json
   {"uri": "scene://montage", "mode": "bootstrap", "parameters": {
     "transition": "", "transitionDuration": 0,
     "clips": [
       {"duration": 4, "content": {"kind": "media",
         "asset": {"type": "video", "uri": "https://…/a.mp4", "width": 1080, "height": 1920, "duration": 12},
         "trim": {"in": 0, "out": 4}, "fit": "cover", "align": "center"}},
       {"duration": 8, "content": {"kind": "media",
         "asset": {"type": "video", "uri": "https://…/b.mp4", "width": 1080, "height": 1920, "duration": 8},
         "trim": {"in": 0, "out": 8}, "fit": "cover", "align": "center"}}]}}
   ```
3. **Bootstrap the scene.** Call `picsart_scene_apply_template` with those arguments,
   unchanged. These arguments are complete, so this job needs no schema or template lookup. The
   composition's duration is the sum of the clip durations: never set it by hand.
4. **Validate.** Call `picsart_scene_validate` on the returned `scene`.
5. **Render.** Call `picsart_scene_export` with the scene and `mediaType: "mp4"`. It replies with a job
   receipt: follow it as picsart-video-rules says until it reports `urls`, one merged file.

The montage is sequential: each clip starts where the one before it ends. For layers that play at
the same time, as in picture-in-picture, write overlapping layers with
`picsart_scene_patch` instead.

The rendered length is not snapped to the frame grid, so a montage of exact decimal trims can land
a frame or two short of the target. That is expected, not an error.

## Sample frames from a scene

1. Have a valid scene: one a template returned, or one written with `picsart_scene_patch`.
2. Call `picsart_scene_validate` on it.
3. Call `picsart_scene_contact_sheet` with either `times` (exact timestamps) or `frames` (that many
   evenly spaced), never both, and optionally `resolution`. It returns `frames`, each a `time` and
   a `url`: low-resolution previews, not the deliverable.

## Render a scene to a file

1. Have a valid scene, as above. A scene this skill's merge job built needs no other check.
   Otherwise confirm its shape with `picsart_scene_capabilities`, sections `["schemaSummary"]` then `["schema:<Name>"]`, or
   `["template:<uri>"]` for a template.
2. Call `picsart_scene_validate` on it.
3. Call `picsart_scene_export` with `mediaType` (`mp4`, `png` and the others it lists), and
   optionally `resolution`, `fps`, `duration` and `startTime`. Pass `fileName`, a short name from
   the scene's subject, so a file saved to Drive gets a real name. It replies with a job receipt
   by default; follow it as picsart-video-rules says until it reports `urls`.

Export renders on a server and needs a signed-in user. Follow picsart-video-rules's rule on cost before you
call it.

Files in this skill

  • SKILL.md5.8 KB
  • scripts/montage_params.py5.1 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

View all in ai-agents →

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.