Video Factory
Plugin marketplaces
This plugin belongs to AIGC content creation.
| Category | Marketplace | Purpose |
|---|---|---|
| Full-stack development | Full Stack Plugins | Architecture and UI design, code understanding, quality checks, code review, workflow governance, and server operations |
| AIGC content creation | Full AIGC Plugins | Image, video, audio, music, 3D, and multimodal content creation |

Analyze shots, plan an edit, approve it by hash, render locally with FFmpeg, and hand back a receipt for every output file — no cloud service and no API key.
English | 简体中文 · Install · Quick start · Skills · Troubleshooting
Positioning
video-factory turns existing footage into an approved, verifiable edit. The host agent analyzes shots, proposes a closed EditDecision, quotes the stage, waits for your approval, renders through local FFmpeg, and records media receipts for every output.
The repository keeps the canonical video spelling across repository, plugin, package, CLI, and skill identifiers. There is no cloud service, no API key, and no vendor upload.
| Property | Value |
|---|---|
| Plugin ID | video-factory |
| Version | 0.5.1+codex.20261018 |
| Maturity | Local composition is stable; the recorded runtime acceptance covers the 0.1.0 line |
| Runtime | Node.js 18+, FFmpeg and ffprobe on PATH |
| MCP server | None; the plugin exposes a skill-driven CLI instead |
The 0.5.0 line has no fresh runtime acceptance record in this repository. Treat recorded media evidence as line-specific and re-verify before claiming a release.
Installation
Prerequisites
- Node.js 18 or newer on
PATH. - FFmpeg and ffprobe on
PATH; required for every probe and render. - Chrome or Chromium only for the enhanced synchronized review video.
- Your footage as local regular files beneath
--input-root; the plugin never fetches a URL.
From the plugin marketplace
codex plugin marketplace add partme-ai/full-aigc-plugins
codex plugin add video-factory@full-aigc-plugins
From the repository-local marketplace
codex plugin marketplace add full-aigc-plugins/video-factory-plugin --ref v0.5.1
codex plugin add video-factory@partme-ai-video-factory
Restart Codex or the ChatGPT desktop app and open a new task so the skills load. There is no build step and no npm install: the CLI has zero runtime dependencies.
For development, clone the repository and run bin/video-factory probe; it reports Node, FFmpeg, and ffprobe availability plus whether the enhanced review path is usable. codex plugin list should show video-factory@partme-ai-video-factory installed, enabled.
Quick start
- Probe the footage, then let the host annotate the shot analysis. Finalize it with the measured track and keyframes:
bin/video-factory analyze source.mp4 --out reelbench-analysis
bin/video-factory analyze-finalize reelbench-analysis/shots.json \
--track reelbench-analysis/track.json --frames reelbench-analysis/frames
- Validate the edit decision, quote the rough cut, and approve that exact revision:
bin/video-factory validate-plan video-plan.json
bin/video-factory quote video-plan.json --stage rough
bin/video-factory run video-plan.json --stage rough --approval rough-approval.json
- Build the synchronized review, quote and approve the final cut, then record your acceptance:
bin/video-factory review-sync output/rough.mp4 reelbench-analysis/shots.json
bin/video-factory quote video-plan.json --stage final
bin/video-factory run video-plan.json --stage final --approval final-approval.json
bin/video-factory accept final-job.json --decision approved --note "played and accepted"
An approval binds the stage, plan hash, edit hash, round, and quote revision. Any change to an asset, an edit, or an output specification invalidates the old approval. The rough cut and the final cut are approved separately, and a rejected stage returns to planning.
What you can build
| Workflow | Built-in path | Verifiable output |
|---|---|---|
| Break footage into shots | analyze, analyze-finalize, video-shots |
shots.json, track, keyframes, and a shot report |
| Assemble a rough cut | validate-plan → quote → run |
Resumable H.264/AAC MP4 with per-segment receipts |
| Review picture against shot data | review-sync |
Internal review MP4 with synchronized shot data |
| Finish with audio, subtitles, and titles | final stage run |
Multi-track final MP4 plus embedded subtitle track |
| Judge and accept | evaluate, accept |
Three-state media gates and a recorded human decision |
| Resume an interrupted render | recover |
Pending segments resumed without re-rendering completed ones |
| Slice a talking-head recording | episode-slice, episode-roughcut |
Rough-cut MP4, aligned SRT, and cutlist.json |
Skills
| Skill | Purpose |
|---|---|
video-factory-use |
Routes an editing request to the correct workflow |
video-factory-plan |
Converts local assets and shot evidence into a validated EditDecision |
video-factory-run |
Renders an approved stage and records receipts without automatic retry |
video-factory-judge |
Runs media gates, advisory semantic review, and human acceptance or rework labels |
video-factory-recover |
Reads the durable ledger and determines the only legal next action |
video-factory-harness |
Calling spec for the CLI surface and the rough → review → final approval gate |
video-episode-slicing |
Word-level ASR timeline → cut points → rough cut, SRT, and cutlist |
video-shots |
Vendored ReelBench shot breakdown with deterministic evidence |
video-sync |
Vendored annotated review video that pairs picture with shot data |
The video-factory-use/plan/run/judge/recover skills are vendored from video-factory-skills v1.0.2 through skills.lock.json. video-shots and video-sync are ReelBench snapshots pinned by Git blob and SHA-256 in upstream/reelbench.lock.json; video-episode-slicing and video-factory-harness are plugin-local. Edit none of these copies in place.
Slash commands
| Command | What it does |
|---|---|
/video-factory |
Total entry point; routes by capability |
/video-factory-plan |
Builds the timeline and edit decision |
/video-factory-run |
Renders the approved edit and collects receipts |
/video-factory-judge |
Reviews finished media and records the verdict |
/video-factory-recover |
Resumes an interrupted composition job |
/video-episode |
Slices and rough-cuts a talking-head recording |
Configuration
| Setting | Where it lives | Notes |
|---|---|---|
| Job ledger | <plan>.job.json, or the --ledger path |
Plain JSON with atomic per-segment updates |
| Input root | --input-root |
Only regular files beneath it are accepted |
| Render outputs | The output directory you choose | Never overwritten silently |
| Review assets | The analysis directory | Keyframes and contact sheets stay local |
| Credentials | None | The runtime never reads an API key or token |
Architecture and security
flowchart LR
A[Footage] --> B[analyze / probe]
B --> C[EditDecision]
C --> D{quote + approval}
D -->|approved| E[FFmpeg segments]
D -->|rejected| C
E --> F[Assemble audio + subtitles]
F --> G[Media gates]
E -->|interrupted| H[(Job ledger)]
H --> E
| Component | Owns | Does not own |
|---|---|---|
src/cli.mjs |
Command dispatch, exit codes, argument validation | Media processing |
src/orchestrator.mjs |
Run, approve, and recover sequencing | FFmpeg argv construction |
src/ffmpeg-compiler.mjs |
Deterministic argv and content-addressed segment keys | Approval decisions |
src/job-ledger.mjs, src/approval.mjs |
Durable state, resume points, hash-bound approvals | Cost estimation |
skills/ (9) |
Routing, planning, review, and recovery instructions | Runtime behaviour |
The plugin makes no network call for generation; local FFmpeg is the only execution engine. Approvals are single-use and bound to content hashes, so they cannot be replayed against different content. Input containment rejects paths outside --input-root, path traversal, symlink escapes, special files, arbitrary FFmpeg filter graphs, and credential fields. All child processes run with shell: false.
Troubleshooting
| Symptom | Check first | Resolution |
|---|---|---|
probe reports a missing tool |
FFmpeg and ffprobe on PATH |
Install FFmpeg and re-run probe |
| Plan validation fails | EditDecision schema |
Fix the named field; unknown fields are rejected |
| Run refuses to start | The approval file | Re-quote the stage and approve the new revision |
| Render stops mid-way | Ledger state | Run recover; completed segments are never re-rendered |
| Review video is unavailable | Chrome presence | Install Chrome, or skip the enhanced review |
| Subtitle burn-in is missing | The local FFmpeg build | The verified FFmpeg 9.0.1 lacks libass; the step is recorded as SKIPPED |
| Semantic consistency is unproven | Gate status | It stays NOT_RUN; Codex or a human reviews it |
| Verification is missing for your platform | Recorded evidence | Media acceptance was recorded on macOS; re-verify on your platform |
| A remote generation path was expected | Plugin scope | Native video generation is blocked by design |
Upgrade
codex plugin marketplace upgrade partme-ai-video-factory
codex plugin add video-factory@partme-ai-video-factory
Contributing and support
Open functional issues at https://github.com/full-aigc-plugins/video-factory-plugin/issues. Before proposing a change, state the target Node version and whether it alters the approval binding or the ledger format, and include the affected tests.
License
Apache-2.0 — see LICENSE and THIRD_PARTY_NOTICES.md. Vendored ReelBench skills keep their upstream terms.
No comments yet. Be the first to write one.