Skip to content
Back to skills

Media Project

ASecurity

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.

  • 8 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added June 5, 2026
ai-agentsbash

Works with

  • cli

Security analysis

A100/100

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

Scanned June 5, 2026

npx -y skills add leynos/visual-storytelling-skills --skill media-project --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Media Project?

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

Security grade badge for Media Project
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/leynos-media-project/badge)](https://www.skillsdirectory.com/skills/leynos-media-project)

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: media-project
description: 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.
---

# 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:

```bash
command -v media-project
command -v ffprobe
```

If `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.md`
- `generated/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:

```bash
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.json
```

The 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 full `FFmpegReader` objects, not minimal path records.
- Each `clips[]` entry has a `reader` object with the same media metadata as
  its matching file entry.
- `reader.type` is `FFmpegReader`.
- `reader.duration_strategy` is `VideoPreferred`.
- 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 `gravity` is integer `4`, and clip `scale` is integer `1`.
- Clip `layer` matches an OpenShot layer number such as `1000000`, and the
  project has a matching `layers[]` entry.
- Clip properties such as `alpha`, `volume`, `time`, transforms, audio/video
  flags, and waveform colour are OpenShot keyframe curve objects with
  `Points`, 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:

```bash
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.osp
```

Expected values are:

```plaintext
"FFmpegReader"
"FFmpegReader"
4
1
1000000
```

When 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.

Files in this skill

  • SKILL.md5.5 KB
  • agents/openai.yaml210 B

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.

Comments

Loading comments…

Newsletter

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