media-project
Skill9 starsChanged 6 months agoISCView on GitHub
Package completed visual storytelling video outputs into OpenShot editor projects with the system-installed media-project command. Use when an agent needs to run or verify a playable .osp handoff, preserve production sidecar metadata, or decide whether a project is ready for OpenShot packaging.
In this repository8 other files it gives its agents.
- AGENTS.mdAGENTS.md
- kling-3-0-deep-diveSkill
- nanobananaSkill
- phoneticizeSkill
- scene-inventory-extractorSkill
- seedance-2-deep-diveSkill
- shot-specifierSkill
- video-generatorSkill
The file
We split this skill into the rules it gives an agent
12 rules. About 0 are common, 4 are distinctive, and 8 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈4
Distinctive · estimate
This author's own choices. Worth a look.
8
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 8
Use this skill when packaging selected generated clips into an OpenShot project with the media-project command.
- Very specific: line 13
Do not assume the story project contains the media-project source tree.
- Very specific: line 19
Before running media-project package-openshot, verify both commands exist:
- Very specific: line 26
If media-project is absent, stop immediately and report that the command must be installed system-wide with uv tool install before …
- Distinctive: line 28
Do not look for repository-local source directories or try to run the command through a project checkout.
- Very specific: line 31
If ffprobe is absent, stop immediately.
- Very specific: line 38
Only package a project after video-generator has produced reviewed local media and these project-root-relative files:
- Distinctive: line 43
every selected local video file named by those tables
- Distinctive: line 75
Run the already installed command from the story project repository or from any working directory where project-root paths are clear:
- Very specific: line 89
Use --force only when replacing the generated .osp and sidecar is intentional.
- Distinctive: line 119
After packaging, inspect the generated project before handing it off:
- Very specific: line 136
When OpenShot is available, perform a manual smoke test: open the .osp, press play on the timeline, and verify that at least the first …
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Media-project OpenShot handoff
Use this skill when packaging selected generated clips into an OpenShot project
with the media-project command. The command is expected to be installed at
the system tool level before this skill is used, normally with uv tool
install.
Do not assume the story project contains the media-project source tree. The
story project normally contains only generated media, metadata, prompts, and
editor handoff outputs.
Hard stop
Before running media-project package-openshot, verify both commands exist:
command -v media-project
command -v ffprobeIf media-project is absent, stop immediately and report that the command must
be installed system-wide with uv tool install before packaging can proceed.
Do not look for repository-local source directories or try to run the command
through a project checkout.
If ffprobe is absent, stop immediately. Do not run the packager, do not write
a minimal .osp, and do not tell the user the project is packaged. Report that
ffprobe is required because OpenShot playback depends on full FFmpeg reader
metadata in both files[] and clips[].reader.
Inputs
Only package a project after video-generator has produced reviewed local
media and these project-root-relative files:
generated/assembly_order.mdgenerated/generation_log.md- every selected local video file named by those tables
Preferred generated/assembly_order.md columns are:
| Column | Meaning |
Order | Final timeline order. |
Shot ID | Stable shot identifier. |
Sub-clip | Sub-clip identifier. |
Selected clip | Project-root-relative local video path. |
Boundary after | Edit-boundary or transition intent after the clip. |
Notes | Editor handoff notes. |
Some older assembly files may use File instead of Selected clip or
Boundary (next) instead of Boundary after. Treat those as compatibility
aliases only when the installed tool version documents support for them.
Sub-clip is mandatory even when a shot was not decomposed into separate
sub-clips. The packager matches assembly rows to generation-log rows using
Shot ID, Sub-clip, and the selected local file path, so the same non-empty
Sub-clip value must appear in both tables. For non-decomposed shots, use -
as the placeholder in both generated/assembly_order.md and
generated/generation_log.md; do not leave the cell blank or omit the column.
generated/generation_log.md must identify the same selected files and include
completed statuses, accepted review states, duration metadata, model/job
metadata, actual file size, actual resolution, prompt hash, and audio mute
intent. Do not package blocked, missing, incomplete, or unreviewed required
clips.
Command
Run the already installed command from the story project repository or from any working directory where project-root paths are clear:
media-project package-openshot \
--project-root /path/to/story-project \
--assembly-order generated/assembly_order.md \
--generation-log generated/generation_log.md \
--manifest prompts/manifest.md \
--output generated/media-project/project.osp \
--sidecar generated/media-project/media-project.jsonThe command refuses to overwrite existing outputs unless --force is passed.
Use --force only when replacing the generated .osp and sidecar is
intentional.
Expected .osp shape
A playable OpenShot handoff needs full FFmpeg reader metadata. Check generated projects for these invariants:
files[]entries are fullFFmpegReaderobjects, not minimal path records.- Each
clips[]entry has areaderobject with the same media metadata as its matching file entry. reader.typeisFFmpegReader.reader.duration_strategyisVideoPreferred.- Reader metadata includes codecs, stream indexes, bit rates, time bases, frame count, file size, duration, frame rate, dimensions, display ratio, sample rate, channel data, pixel data, and container metadata.
- Clip
gravityis integer4, and clipscaleis integer1. - Clip
layermatches an OpenShot layer number such as1000000, and the project has a matchinglayers[]entry. - Clip properties such as
alpha,volume,time, transforms, audio/video flags, and waveform colour are OpenShot keyframe curve objects withPoints, not scalar values.
The sidecar JSON remains the production provenance record. Preserve transition intent there and in clip metadata; do not invent OpenShot transition effects unless the tool version explicitly supports them with a verified reference shape.
Verification
After packaging, inspect the generated project before handing it off:
jq '.files[0].type, .clips[0].reader.type, .clips[0].gravity, .clips[0].scale, .clips[0].layer' \
/path/to/story-project/generated/media-project/project.ospExpected values are:
"FFmpegReader"
"FFmpegReader"
4
1
1000000When OpenShot is available, perform a manual smoke test: open the .osp, press
play on the timeline, and verify that at least the first selected clip decodes
and plays rather than merely appearing as a timeline block. If OpenShot is not
available in the current environment, report that the manual smoke test was not
run.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

