Skip to main content
skill CX Codex

scenario-video-editing — Claude Code skill: how it works

MCP skill for editing existing Scenario footage with tool models instead of new generations. Handles LUT grading, trimming, split cuts, reversing, and background removal.

Install into Claude Code · Skills CLI (Vercel) All methods and platforms ↓
npx skills add scenario-labs/skills --skill scenario-video-editing -a claude-code
Open on GitHub

What scenario-video-editing does

This skill routes video editing tasks to deterministic Scenario tool models via MCP rather than regenerating clips from scratch. Every image post-processing tool has a video twin with -video appended to its identifier. You can run color correction, apply 3D LUT grading, or add grain to existing footage.

Field names differ across sibling tools. Video Cut uses outputFormat, while Resize Video expects videoOutputFormat. Video jobs often exceed standard execution windows. Because of that, runs should launch with wait=false and track status through jobs_wait.

Run costs scale with footage length. You should always trim unwanted frames before running color passes. Clips with alpha transparency cannot export as MP4: removal models output transparency only inside WebM or ProRes 4444 MOV containers.

What it helps with

  • trim footage to specific start and end points
  • split a video into multiple segments at cut points
  • apply 3D LUT color grading to a clip
  • extract video backgrounds with alpha transparency
  • reverse clip playback using dedicated tool models

Example prompts for the agent

  • Trim this footage to the target time range using model_scenario-video-cut.
  • Apply a 3D LUT grade to the clip with model_scenario-postprocessing-lut-video.
  • Reverse playback on the current video clip.

How to install scenario-video-editing

1Skills CLI (Vercel)

npx skills add scenario-labs/skills --skill scenario-video-editing -a claude-code

2Manually: put the files in place

~/.claude/skills/scenario-video-editing/SKILL.md

Copy the whole skill folder; for one project use .claude/skills/scenario-video-editing/

Step by step, with commands for each platform: How to install skills in Claude Code: five ways

Questions about scenario-video-editing

How do I install scenario-video-editing in Claude Code?

Run npx skills add scenario-labs/skills --skill scenario-video-editing -a claude-code in your terminal.

What does scenario-video-editing do?

It connects to Scenario tool models through MCP to edit footage without generating new AI video. It handles trimming, LUT grading, reversing, resizing, and frame extraction.

Can transparent cutouts be exported as MP4 files?

No, Scenario background removal models do not support alpha channels in MP4. Transparent footage must be exported as WebM or ProRes 4444 MOV.

Source text

SKILL.md · MIT
---
name: scenario-video-editing
description: "Use when editing footage that already exists on Scenario through MCP with a tool model instead of a new generation: 3D LUT grading, color correction, film grain, vignette, blur, sharpen, glow, tint, desaturate, posterize, solarize, cubism, crystallize, oilify, chromatic aberration or dodge and burn on a clip; trimming to a time range, splitting at cut points, reversing, resizing, re-encoding, frame extraction, image sequences, background removal, segmentation masks, subjects as layers."
license: MIT
---

# Scenario Video Editing

## Overview

Every image post-processing effect has a video twin, and each is a `model_run` on a tool model: one
clip in, a few numbers, one clip out. Generating or restyling footage, lipsync, dubbing and
upscaling are `scenario-video`; concatenating, compositing and captioning a cut are
`scenario-video-assembly`; the still-image side is `scenario-image-editing`. Connection and the core
loop: `scenario`. If a sibling skill named here is missing from your available skills, ask the user
to install it (`npx skills add scenario-labs/skills --skill <name>`); unattended, proceed from tool
schemas and flag the gap.

## The twin rule

A video effect's id is the image id with `-video` appended, its file field is `video` rather than
`image`, and the knobs are identical: `model_scenario-postprocessing-lut-video` takes the same
`lutStyle` enum and `lutIntensity` as `model_scenario-postprocessing-lut`. All eighteen have twins,
from blur and color correction through oilify, posterize and vignette.

One twin differs: Dissolve (Video) blends the clip with a still `dissolveImage`, not a second clip;
crossfading two clips is a concat transition.

## Quick reference

| Need                  | Model or query                                                           |
| --------------------- | ------------------------------------------------------------------------ |
| Grade or stylize      | `filters={"tags": ["Post Processing"]}`, plus the effect name as `query` |
| Trim to a range       | `model_scenario-video-cut` (`startTime`, `endTime`)                      |
| Cut into segments     | `model_scenario-video-split` (`cutPoints`; N points give N+1 clips)      |
| Rescale or re-encode  | `model_scenario-resize-video`                                            |
| Play a clip backwards | `model_reverse-video`                                                    |
| Frames out, frames in | `model_scenario-video-to-image-seq`, `model_scenario-image-seq-to-video` |
| Subjects as layers    | `model_scenario-video-layers-extractor`                                  |
| Masks, cutouts        | `recommend` with the need in the user's own words                        |
| Pull the audio track  | `model_scenario-audio-extract`                                           |

Extracted frames carry no index and share one `createdAt`, so their order exists only in the job
row's `assetIds`, and that list has come back out of time order (a confirmed defect at authoring
time). The extractor takes a scalar `video`; every frame is `extractAllFrames: true`, and
`frameInterval` (default 24 at authoring time, about one frame a second on a 24 fps clip) applies
only when that flag is off. Check that the row holds exactly the clip's `nbFrames` ids (`asset_get`
reports it beside `frameRate`; a short row is a dropped frame, which no reordering fixes), then,
before reassembling with `model_scenario-image-seq-to-video` or handing frames on, lay the returned
ids into `model_scenario-grid-maker` in that order (a fixed first-party id: Scenario's single grid
tool; its `images` field takes an array of 1 to 100 ids and ignores a bare id while the run still
succeeds, so past 100 frames sheet in batches or raise `frameInterval`; set `columns`, default 3 and
up to 20, so a batch reads as a near-square sheet) and read the sheet against the clip's free
`firstFrame` and `lastFrame` and its motion; a frame that breaks continuity is out of place, and the
corrected order travels as your own id list from then on. Never rebuild order from listings or
timestamps, and a preview that runs backwards on a clean sheet is the assembler's `pingpong` flag,
not the order.

A cutout with transparency never ships as mp4: at authoring time the removal models carried alpha
only as WebM or ProRes 4444 MOV, so read the output-format enum off `model_schema_get` and agree the
container with the user before pricing the run.

Effect lookups go through `search`, `target="models"`, `public=true`. The `model_scenario-` ids are
constants: each is Scenario's single deterministic tool for its operation, so discovery would only
re-derive it. `model_reverse-video` sits outside that set and is an authoring-time hit: re-discover
it by name (`search` `query="video reverse"`).

## Cost follows the clip, so trim first

On the video twins the `video` input carries `cost_impact: true`, which the image versions do not:
price tracks the footage rather than the settings. Trim to the frames that ship, then grade;
`dry_run=true` prices a payload before it runs. Video tools also outlast `model_run`'s wait window,
so launch with `wait=false` and follow with `jobs_wait`, re-calling it with the returned
`pending_job_ids`. A client-side timeout on `jobs_wait` is as harmless as the server's own: re-call
it with the same ids rather than treating the job as lost.

Checking costs nothing: `asset_get` returns `firstFrame` and `lastFrame` as their own asset ids, so
`asset_display` one to confirm a grade before chaining another billable run onto it.

## Field names drift between neighbors

- Video Cut and the effect twins take a scalar `video`. Resize Video takes `video` as an
  `array: true` field capped at one item, where a bare id is dropped silently; its size is `width`
  and `height` in pixels, both optional, and one alone keeps the aspect ratio.
- The output format field is `outputFormat` on cut and split, `videoOutputFormat` on resize.
- `preserveAudio` defaults to true on cut, split and resize; the effects expose no audio field and
  pass the track through.
- Enum values are copied, not retyped: one `lutStyle` string contains a space.
- `asset_download` takes no `format` for a video: it converts image formats only. A GIF from the
  sequence tool is an image asset and takes `format: "gif"`; the `png` default flattens it to one
  frame.

## Resizing is not reframing

No tool model repaints a video's canvas. Resize Video takes `fit`: `contain` (default) fits the clip
inside the target, `stretch` forces the size and distorts, `cover` fills the target and center-crops
the rest. `cover` is the cheap way to an exact ratio when losing the edges is acceptable, but none
of them gives a 16:9 clip a vertical frame with the whole picture kept, so that brief needs a
decision before any spend, between two routes an order of magnitude apart in price.

- **Generative reframe** (`query="reframe"`, Luma Ray 3.2 Reframe and Wan 2.2 Reframe,
  `scenario-video` territory) outpaints past the frame and keeps the whole picture, at by far the
  highest price in such a job. Resolution ceilings bite: a schema can allow a vertical ratio and its
  top resolution tier separately yet reject the pair at run time.
- **Compositor** (Video Studio, cropping or pillarboxing onto a vertical canvas) is cheap but throws
  away width or adds bars, and its layer geometry is `scenario-video-assembly`'s contract rather
  than a one-line setting.

`dry_run` prices a payload without validating it, so either route can bill for a run that fails
outright or returns a mis-composed frame at exactly the right dimensions.

## Worked example: a graded cutdown

Launch every `model_run` below with `wait=false` and retire it with `jobs_wait` before the next step
reads its asset.

1. `asset_get` the master and read `properties.duration` before choosing times.
2. Trim: `model_scenario-video-cut` with `startTime` and `endTime` in seconds. Going first is what
   makes every later step cheaper.
3. Reshape: `model_scenario-resize-video`, `video` as a one-item array, `width` and `height` at the
   delivery size, `videoOutputFormat: "mp4"`. `fit` settles the shape at this step rather than
   later: `cover` lands an exact ratio once the edges are spendable, and a shape that has to keep
   the whole picture is the reframe decision above.
4. Grade: `model_schema_get`, then the LUT twin with `lutIntensity` near 0.6.
5. Texture: `model_schema_get`, then the Grain twin with `grainProfile` (a 22-value enum, default
   `kodak_portra_400` at authoring time) on that output, last, so its grain is sized for the
   delivered frame rather than resampled by a later resize.
6. `asset_display` the result's `firstFrame` to confirm the look, then `asset_download` with no
   `format`.

## Common mistakes

- Grading each source clip and then concatenating: grade the finished master once, or the shots
  drift apart.
- Reaching for local ffmpeg, or for an MCP tool named `video_edit`: the surface is `model_run` on
  tool models.
- Polling `job_get` in a loop instead of `jobs_wait`, whose timeout is not an error.
- Trusting a Grain profile to add grain: the 22 profiles are looks, not intensities, and some soften
  the picture instead. Compare a frame against the input.

© scenario-labs · MIT · scenario-labs/skills

Similar skills

Everything for AI and ML →

From the same set68

scenario-seedance Directs ByteDance Seedance video generation and editing on Scenario via MCP. It configures first and last frames, handles asset references, and extends clips. CX Codex +1 387installs scenario-seedance-music-video Turns a song into a finished music video: shot list built on the track's sections, clips from Seedance, and an edit laid over the untouched master. CX Codex +1 394installs scenario-formats A decision ladder for shipping one approved master at many sizes and ratios through Scenario. Use it when one visual has to feed stories, feeds, banners and previews. CX Codex +1 394installs scenario-workflows A skill for running saved Scenario workflows over MCP: list apps, build the inputs object, price a run before spending anything. CX Codex +1 391installs scenario-sonilo Generates sound effects and instrumental music through Sonilo models on Scenario. Useful for scoring silent video clips or creating standalone audio via MCP. CX Codex +1 380installs scenario-product-shots Turns a real product photo into packshots and lifestyle scenes while keeping the label, logo and shape exact. Built for marketplace listings and landing pages. CX Codex +1 388installs scenario-blender-uv-baking Walks the agent through UV unwrapping and map baking in Blender: seams, texel density, packing, UDIMs, and diagnosing failed bakes. CX Codex +1 389installs scenario-video-ads Orchestrates end-to-end video ad production in Scenario from a product photo and brief. Builds storyboards, gates budgets, and handles assembly for Reels or YouTube. CX Codex +1 379installs

Project sponsors

Companies that keep this analytics open
Gold sponsor

Impressions, clicks and code copies — open statistics. We keep the numbers public for the same reason NeBlask itself is public. Become a sponsor