Basic Cohub abilities. Most agents already have these mounted; listed here for reference.
Platform Published by the Neta team.
Official Made by the Neta team.
Verified Reviewed by the Neta team.
Community Shared by a Cohub user. Not reviewed — read SKILL.md before you use it.
manga-panel-mv
Verified@siosan/manga-panel-mv
Use it in Cohub
Paste this into your agent's chat — it fetches the skill and follows it.
Use the skill: manga-panel-mv. Run `npx -y @neta-art/neta-search-cli@latest skills use @siosan/manga-panel-mv --via site` and follow what it prints. Read its complete output, redirecting it to a temporary file first if necessary, and resolve relative paths from the skill directory it prints.
npx -y @neta-art/neta-search-cli@latest skills use @siosan/manga-panel-mv
Summary
Turn one video into a 10-second music video laid out as a manga page, with panels that jump on the beat.
Give it one video and get a 10-second widescreen edit where every panel shows that same video at a different moment.
Panels echo, freeze, stutter and change style, then rearrange on the beats, with flashes and graphic symbols and no text on screen.
Music is made to fit your video, with its own sound kept underneath. Or give a song and it uses the strongest 10 seconds, or the part you name.
Optionally share a reference image and the panel shapes follow its layout, never its art. Choose calm, normal or hyper energy.
You get a web page that plays the finished video, with a cover image and a download link. Clips with clear action and a visible subject work best.
SKILL.md
# Manga Panel Music Video
A video editor. The user brings one video; they get a finished 10-second music video in which that video is told across a manga page. Narrow strips, tilted insets and supporting panels show its moments, echoes a beat behind, freezes, stutters and restyles, so the page reads as one story, not a collage. The soundtrack is a 10-second BGM made for this video — its genre, tempo and mood matched to what is on screen — with the video's own sound kept underneath; if the user gives a song, its strongest 10 seconds (or the part they name) is used instead. The whole edit is code: the scripts analyse the music and the video, write an edit decision list (`edit.json`), turn it into a [HyperFrames](https://github.com/heygen-com/hyperframes) HTML composition and render it headless, so every run is reproducible and the same steps work on any model.
Read this file fully before running anything or writing files. Resolve paths from this skill's directory. `$SK` below is that directory's absolute path (installed: `/workspace/.agents/skills/manga-panel-mv`). Shell state may not carry between tool calls, so start each command with `SK=<that path>;`. Run every command from the world root (`/workspace`).
## Language
Reply in the user's language, whatever language this file is in. This holds for every message of the run — status lines and above all the final handover — even after reading this English file and English script output: translate what the scripts print, don't paste it. Work titles and the user's own words stay as written. Text the user sees in the deliverable — Work title, page title, the play button and download label — follows the user's language: pass `--lang` and a title in that language. The BGM brief is written in English (it goes to the music model, not to the user). The video itself carries no text, letters or numbers.
## When to use / when not
Use when the user supplies a video and wants it edited into one beat-synced manga-panel music video.
Not for:
- **No video.** This skill edits a video; it does not make one from a picture, a card or a description. Ask for a video (see *When to stop*).
- **A different length.** Every film is 10 s. Say so if they ask for another length, and make the 10 s one unless they decline.
- **Vertical 9:16 or square output.** This version renders 16:9 only. Say so and stop, unless they accept 16:9.
- **Lyrics, captions, titles or any on-screen text.** The edit is deliberately text-free. If text is the point of the request, say this skill makes no typography and stop.
- **A plain cut with no panel grid.** Say this skill makes manga-panel edits and stop.
## Inputs
| Item | Required | Counts as given when |
|---|---|---|
| Video | yes: one (2–4 only when the user explicitly wants several combined) | The message attaches or links a video file, gives its path, or names a video Work in this world. A video file the user just uploaded with this message (newest in `uploads/`) counts. Several videos supplied without asking to combine them: use the one the message points at, else the newest, and say so. Do not pick a video from the world on your own. |
| Soundtrack | no, default: a 10 s BGM made for this video | An audio file (mp3, wav, m4a, flac, ogg) attached, linked or in `uploads/` → `--music <file>`, and no BGM is made. Without one, `go` has you write a music brief from the video's frames and makes the BGM (one music generation). Neither case is a reason to ask. |
| Section of the music | no, default: the strongest 10 s | Only with the user's song. They name where it starts ("from 0:30", "the chorus at 1:05") → `--section 30` / `--section 65`, in seconds; 10 s from there are used. |
| Reference image | no | An image the user offers for the panel layout — a file, or an image Work in this world they name (pass its file or its `work_…` id) → `--ref`. Used for geometry only, never for its art or style. |
| Energy | no, default `hyper` | "calm", "chill", "slow" → `calm`. "Not so busy", "easier to follow" → `normal`. Anything else, including no mention → `hyper`. |
| Title | no | Default: a short title in the user's language, made from the video. |
| Clip sound level | no, default 0.35 | "Keep the dialogue loud" → 0.6. "Music only" → 0. |
If the video is missing, ask for it in one line and stop. Otherwise ask nothing and don't wait for a go-ahead: build straight through to delivery. A long prompt that already sets the style (like "dynamic asymmetrical manga panels, style infections, impact freezes…") is fully covered by this skill's defaults; it is not a reason to ask anything.
## Steps
**One command does everything:** it makes the BGM, analyses, plans the edit, renders and runs QA. Each call works for at most 8 minutes, so give the tool call a timeout of at least 540 s. It stops and prints `"status": "working"` with a `next`; run what `next` says, and keep going until it prints `"status": "done"`. Each rerun continues where the last one stopped; it never repeats a finished step and never submits a second generation. Typical total: about 3–5 min.
```bash
# first call
node "$SK/scripts/mv.mjs" go --clips <video> [--music <song>] [--section <from>] [--ref <image>] [--intensity calm|normal|hyper] --lang <code> --title "<title>"
# when it stops at "describe-bgm" (no --music given)
node "$SK/scripts/mv.mjs" go --root <root> --bgm "<music brief>"
# every other rerun
node "$SK/scripts/mv.mjs" go --root <root>
```
- **`"at": "describe-bgm"`** — the BGM is made to fit the video, so look first. Open the `look` image (frames of the video in order) and write one brief in English, under 200 characters: genre, tempo in BPM, mood, lead instruments and how the energy moves, matched to what the video shows and how fast it moves; end with "instrumental, no vocals". Example shape: "epic hybrid orchestral trailer, 140 BPM, tense then triumphant, taiko and low brass, builds to a hit at the end, instrumental, no vocals". Then run `next` with it. Don't ask the user for it, and say in one line that a BGM is being made (one music generation).
- The music model returns a full track; `go` keeps its strongest 10 s, cut on bar lines. The track is saved in the world as an audio Work.
- The first call prints `root`, the run folder. Default `_runs/manga-panel-mv/<timestamp>/`. If the user or the environment asks for outputs in a particular folder, pass it as `--root`; never move, rename or delete the run folder afterwards.
- `"status": "done"` means **QA passed**: `go` runs the QA itself (the `finish` stage, `node "$SK/scripts/mv.mjs" finish --root <run>` on its own), passes only when every check passes, and writes the report to `<run>/qa/qa.json`. The checks: the film is exactly 10 s (±1.5 frames), 16:9 at the planned size, audio present, several moments used, panel re-arrangements, effects present, no black gaps, no long frozen picture, the music uninterrupted, and the clip's sound kept. Open `frames` (16 frames of the result) and check that every hero panel shows a recognisable subject.
- `"at": "trace-reference"`: the reference image gave fewer than two panels (a single-panel page, or art across the gutters), so nothing has been rendered yet. Do what its `todo` says: look at the image, trace its shapes (banner, big frame, side frames, inset boxes), run `ref`, then `go --root <run>` again. Only if the page has no shapes to borrow, run `go --root <run> --ref-ok` and tell the user the built-in layouts were used.
- Changed `moments.json` or traced panels after a render? Just run `go --root <run>` again: it re-plans and re-renders on its own.
- `ok: false` names the failing step. Follow `references/editing.md` → Repair table, at most two repair rounds, then report it as blocked and deliver nothing. The single stages (`prepare`, `plan`, `build`, `wait`, `finish`, `status`) and hand annotation of `moments.json` are described there too. Use them only when the user wants finer control.
## Deliver
The deliverable is **one web Work**: a page that plays the finished MP4, with a poster and a download link. Delivery is four steps, in this order. Steps 1–3 are three separate tool calls; step 4 is the reply itself. The run is not delivered until step 4 is done.
```bash
# 1
node /mods/neta/neta work init web works/webs/<slug> --title "<title in the user's language>"
# 2
node "$SK/scripts/mv.mjs" page --root <run> --work works/webs/<slug> --title "<same title>" --lang <code>
# 3
node /mods/neta/neta work publish web works/webs/<slug> --title "<same title>"
```
4. **Hand over with a card — required, never prose links alone.** Load the `interaction-components` skill and put one Link card on its own line whose target is `{ "type": "work", "workId": "<id>" }`. Take `<id>` from step 3's publish output (the Work id it prints); if you can't find it there, read `cohubWorkId` from `works/webs/<slug>/meta.json`. Never make up the id, and never point the card at the folder, `index.html` (a `world-file` target) or a cohub.live address. The card's fallback is the Work's name in a sentence. Write the lines around the card in the user's language (see *Language*).
- `<slug>`: short kebab-case from the title (romanize non-Latin titles), unique under `works/webs/`.
- `page` refuses to run unless QA passed. It copies `mv.mp4` and `poster.jpg` into the Work and writes `index.html` with its labels in the user's language.
- If publish returns `world_slug_required`, the world has no public address yet. Tell the user that publishing needs one, name a suggested slug, and stop until they agree. Do not set it yourself.
- Before handing over, check that `works/webs/<slug>/` contains `index.html`, `mv.mp4` (a few MB or more) and `poster.jpg`, and that publish returned `ok`.
- With the card from step 4, add one or two lines: it is 10 s, what the soundtrack is (a BGM made for this video, or their music — and which part of it, from `section`), and one standout moment (a drop, a freeze). Also link the full-quality master `[mv-master.mp4](/workspace/<run>/out/mv-master.mp4)`. When a BGM was made, say it is saved in the world as its own audio Work.
## Out of scope
- Do not change world settings (WORLD.md, visual style, the world slug) and do not delete or overwrite files that existed before the run. The user's video, music and reference are only read.
- Do not modify memory, character cards, installed scripts (including this skill's own files), existing Works or roleplays.
- Do not generate images or video, and do not make a video from a picture or a card. The only generation is the one BGM, made by `mv.mjs go` — never by calling `neta generate` yourself, and none at all when the user gave a song. Every frame of the film comes from the user's video; the effects are made in code.
- Make only the one music video asked for. No alternate cuts, trailers, posters or extra Works, and do not act on your own next-step suggestions.
- This version does not do lengths other than 10 s, vertical or square output, lyrics or captions, speed ramps, or more than four clips.
## When to stop
- No video: ask in one line for a video (a file, or the name of a video Work in this world), then stop. Do not make one.
- The BGM generation failed, or was refused for credits or permission (`go` says so): tell the user, and offer one more try or a song of their own. Then stop.
- A clip has no video, or the user's song has no audio or is shorter than 10 s (`prepare` says so): tell the user which file and why, offer a BGM instead of a short song, then stop.
- Asked for something this skill doesn't do (see *When to use / when not*): say what it makes and stop.
- `prepare` cannot install its tools (no network) or finds no ffmpeg or Chrome: report it as blocked, with the message it printed. Do not try another renderer.
- QA still failing after two repair rounds: report it as blocked with the failing checks; deliver nothing.
## Gotchas
- **A finished render is not a delivered film.** Deliver only after `go` prints `"status": "done"` and the page is published. A Work that is still rendering is not ready to hand over.
- **Publishing is not handing over.** A run that published and then ended on prose links left the user without the Work card. Step 4 of *Deliver* — the `work` card with the id from the publish output — is what finishes the run.
- **The handover drifted into English.** After reading this file and English script output, a run answered a Chinese request in English. Write every reply in the user's language and translate script output; keep only titles and quoted words as given.
- **Rerun `go`, never `build`, to check on a render.** `build` restarts the render from zero. `node "$SK/scripts/mv.mjs" status --root <run>` shows progress without touching anything.
- **A tool call that timed out may still have rendered or generated.** `go --root <run>` picks up the render, and polls a BGM that was already submitted — it never submits twice. Never start a new run folder to retry.
- **`"at": "provider-busy"` is not a failure.** The music model refused the submit as busy and nothing was charged. Don't ask the user or offer other routes: run the same `go` command again after a minute or two, as many times as it takes within the chat.
- **Write the brief from the frames, not from the title.** A brief that ignores what is on screen (a calm lakeside given a drum-and-bass track) makes the edit fight its own music. Pace matters most: fast cuts and action → 120–150 BPM; slow, wide or quiet shots → 70–95 BPM.
- **The soundtrack decides the cuts.** Never loop the music or stretch it. Clips are re-used, offset and frozen to fill the 10 s; a video shorter than 10 s is fine.
- **With the user's song, tell them which 10 s were used** (`section` in the output: `how: "auto"` means `go` picked the strongest part).
- **One video is the default — don't mix in other videos from the world.** Only combine clips the user gave and asked to combine. Panels from unrelated videos read as a collage, not a story.
- **Hero panels must stay readable.** The planner never gives a hero panel ink or negative styles. If a hero panel shows something unreadable (a dark frame, a blur), mark that moment `skip` and plan again, rather than turning effects down globally.
- **Portrait clips are cropped into landscape panels.** If a face is cut off, set that moment's `focus` (e.g. `[0.5, 0.3]`). Don't change the layout.
- **Text in the source footage** (signs, subtitles burned into a clip) is the user's footage, not added typography. Leave it; mark the moment `skip` only if the user objects.
- **Keep the run folder where it is.** Later steps, re-renders and the QA report look for files there.