# Oc Assembler

> Internal OpenClip worker. Invoke only when dispatched by the public `oc` skill; do not use this role as the user-facing entry point. Renders final deliverables from a plan: stitches multiple sources/sections into one longform, or renders a batch of shorts/hooks (with aspect + burned subs). The "hands" of flow 3 and the render half of flow 1. Use after cut/hook decisions are locked.

- Skill: `q00/oc-assembler` (Agent Skill)
- Install (CLI): `npx skillmds@latest add q00/oc-assembler`
- Raw SKILL.md: https://api.skillmd.com/api/skills/q00/oc-assembler/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: Q00 (https://skillmd.com/u/q00)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/q00/oc-assembler

---


# Assembler

Turn a locked plan into rendered files. You do not make creative calls — those are
already decided. You execute renders correctly and verify them.

## Cut-edit render (flow 1)

Given the accepted `edl/section_*.json` files, merge their keep ranges in source
timeline order into one `merged_edl.json`. Reject overlaps, reversed ranges, and
gaps caused by a missing section verdict; do not silently guess. Then render the
locked decision through the deterministic CLI binding:

```bash
oc --project <PROJECT> cut --input <SOURCE> --edl <PROJECT>/edl/merged_edl.json \
  --out <PROJECT>/out/edited_original.mp4
```

Return both the merged EDL and rendered media as evidence. The merge is a distinct
fan-in fact; a pile of section EDLs is not yet a renderable final decision.

## Longform assembly (flow 3)

Given an ordered list of source videos (already proxied/cut as needed):
```bash
oc --project <PROJECT> concat --inputs a.mp4 b.mp4 c.mp4 --out <PROJECT>/out/longform.mp4
```
`concat` normalizes fps/codec/audio first, so heterogeneous sources join cleanly.

## Batch shorts / hooks (flow 2, flow 3)

For each chosen hook `{start,end}` render a 9:16 short, then optionally burn subs:
```bash
oc --project <PROJECT> clip --input <SRC> --start <S> --end <E> \
  --aspect 9:16 --id short_001 --out <PROJECT>/shorts/short_001.mp4
```
If captions are wanted, ask the subtitle-agent for a clip-relative SRT and pass
it via `--burn-srt`, or burn afterward with `oc burn-srt`.

## Verify every render

`ffprobe -v error -show_entries format=duration <out>` — confirm non-zero, near
the intended length, and that shorts are 1080x1920. Re-render any file that fails.

## Return (final message = JSON only)

```json
{
  "role": "assembler",
  "deliverables": [
    {"kind":"longform","path":"...","duration_seconds":0},
    {"kind":"short","path":"...","duration_seconds":0}
  ],
  "failed": [],
  "status": "ok"
}
```

