← FrameoCONTENT HISTORY

Update to Frameo

Snapshot Oct 8, 2026 · 18:02 UTC · version 1.2.1

Collection source: downloaded plugin package.

WHAT CHANGED · RULE-BASED ANALYSIS

First saved snapshot

No earlier snapshot is available to establish a change.

Compare saved observations

Download comparison JSON
Full technical diff · 0 changed fields
Full snapshot data
{
  "description": "Trim, resize to 9:16 or 16:9, join clips, add a music bed, and burn captions from timings, a script, or a transcription of the footage — on footage the user already has. Free, except a transcription.",
  "included_files": [
    {
      "relative_path": "agents/openai.yaml",
      "size_in_bytes": 376
    },
    {
      "relative_path": "ass-skeleton.md",
      "size_in_bytes": 1081
    },
    {
      "relative_path": "assets/icon.svg",
      "size_in_bytes": 430
    }
  ],
  "name": "subtitles-and-cut",
  "skill_md_contents": "---\nname: subtitles-and-cut\ndescription: \"Trim, resize to 9:16 or 16:9, join clips, add a music bed, and burn captions from timings, a script, or a transcription of the footage — on footage the user already has. Free, except a transcription.\"\n---\n\nNeeds: the user's video(s), uploaded through show_upload, imported from a web link with import_media_url, or already in Frameo; the caption text with timings, a script to fit, or nothing (the speech is transcribed)\nCredits: 0 (ffmpeg is free; a music bed is ~1 per 50 characters of its prompt; transcribing the footage is a few credits per minute, charged after the run)\nTime: 5–10 minutes\n\n## When\n\nEditing, not generating: cut a long take, make a vertical from a horizontal, join\ntakes, burn subtitles. Not for generating scenes.\n\n## Ask first\n\n1. **The footage** — links (uploaded or from `read_project`), each clip's length in\n   seconds (`extract_frames` needs it; `read_project` reports `seconds` only for items the app has\n   placed and saved, a generated clip's `wait_task` result has it as `duration_seconds`, and\n   uploads carry none), and\n   the target frame.\n2. **Captions** — text with timings (SRT-like), a script to spread evenly, the footage's own\n   speech (transcribed, a few credits per minute), or none.\n3. **Sound** — keep the original, add a bed, or both.\n\n## Steps\n\n**Before anything.** `list_projects` (or `create_project`) for the `project_id` and, when the\nproject has several modules, the `module_id` — `extract_frames` and `run_ffmpeg` take that\npair. Nothing below spends credits. The one exception is a music bed the user wants\ngenerated: one `generate_music` under the usual quote (`estimate_cost` with the same\nproject, told to the user, then the call with that `quote_id` and `confirmed_by_user=true`,\nand `wait_task` for the link); a bed is at most 120 s (the tool's cap) and is looped at the\ncut (`-stream_loop -1` on the bed input, `-shortest`) for longer footage.\n\n**1. Look first (free).** `extract_frames(video_url, duration=<that clip's length>,\nat_seconds=[…])` at a few timestamps to see what is in the footage before cutting; confirm the trim points with the user.\n\n**2. Captions.** Write the `.ass` sidecar: one dialogue line per cue with start/end from\nthe user's timings. When only a script is given, spread the lines across the trimmed\nlength in proportion to their character counts and say the timing is approximate. When the\nuser wants the footage's own speech captioned, `analyze_media(media_url, question=\"Transcribe\nthe speech with start and end timestamps for every line\", confirmed_by_user=true)` — the one\npaid call with no quote: it is charged by clip length, a few credits per minute, the user is\ntold that and agrees first, and the finished run (`wait_task`) reports `credits_charged_estimate`.\nCues come from those timestamps, offset by the trim start.\nStyle: bottom-anchored, white with a dark outline, 15% of the height from the bottom\nso phone UI does not cover it.\n\n**3. The cut (free).** `run_ffmpeg` takes at most 10 inputs and 4 outputs: with more than\nnine clips (plus the bed) concatenate in groups of at most 10 first — each input scaled, cropped,\n`setsar=1` and set to one frame rate in that group call, since clips of different sizes do not join —\n`wait_task`, and feed\nthose to the final call, repeating until the final call fits. That call: `-ss`/`-t` for the trim, `scale`+`crop` for 9:16\n(centre crop unless the user points at a subject), `concat` for joins, `ass=subs.ass` for\ncaptions, the bed mixed under with `amix`. Output `final.mp4`. `wait_task`, return the\nlink and `open_in_frameo`.\n\n## Done\n\nThe cut on the Frameo project's canvas, shown with `show_generations` and `final: true`\nwhere the chat app displays Frameo cards.\n`open_in_frameo` on the result opens the project in the Frameo app, where every take sits on\nthe canvas, ready for retakes and edits.\n\n## Files\n\n- `ass-skeleton.md` — a minimal `.ass` file to fill in.\n"
}

SHA-256 of public snapshot: 21637b10b9e849b1c0b1f917498edff6dabf7a908d40d1ae82df0bf10f825231