Skip to content

Repository files navigation

CallItWrap

CI License: MIT Python 3.11–3.14

Reconcile the shot plan, take log, and files on disk before you call it a wrap.

CallItWrap is a private-by-default command-line release gate for small film crews. It joins a strict shot plan, a take-log CSV, and the actual media directory, then answers one question: is every declared shot ready to hand to editorial?

It catches missing planned coverage, incomplete multicamera takes, absent picture or sound files, reused references, unlogged media, unknown shots, and take gaps. It never uploads, opens, copies, renames, or deletes footage.

中文说明 · input contract · failure repairs · generated broken report

See It Fail Honestly

$ callitwrap check examples/complete/plan.toml examples/complete/take-log.csv examples/complete/media
CallItWrap: Night Window — complete wrap
Verdict: READY
Shots: 2/2 ready | Blocks: 0 | Warnings: 0

$ callitwrap check examples/broken/plan.toml examples/broken/take-log.csv examples/broken/media
CallItWrap: Night Window — broken wrap
Verdict: HOLD
Shots: 0/3 ready | Blocks: 9 | Warnings: 0
[BLOCK COVER001] (shot=12C) Planned shot 12C has no take-log rows.
  repair: Record a take or remove the shot from the reviewed plan with production approval.
...

The second command returns exit code 1, so it can stop a handoff script without hiding the actionable report.

Quick Start

Requirements: Python 3.11–3.14 and uv.

git clone https://github.com/KanadeK/callitwrap.git
cd callitwrap
uv sync --locked
uv run callitwrap demo build/my-first-wrap
uv run callitwrap check build/my-first-wrap/complete/plan.toml build/my-first-wrap/complete/take-log.csv build/my-first-wrap/complete/media

To install the published standalone command from the GitHub Release wheel:

uv tool install https://github.com/KanadeK/callitwrap/releases/download/v0.1.0/callitwrap-0.1.0-py3-none-any.whl
callitwrap --version

Use It on a Shoot

Create a versioned plan:

schema_version = 1
project_name = "Night Window"

[[shots]]
id = "12A"
scene = "12"
description = "Two-camera master"
required_cameras = ["A", "B"]
min_usable_takes = 1
sound = "sync"

Export or write a take log with this header:

shot_id,take,camera,camera_file,sound_file,status,preferred,notes
12A,1,A,camera/A001.mov,sound/T001.wav,usable,true,clean master
12A,1,B,camera/B001.mov,sound/T001.wav,usable,true,clean master

The paths are relative to the media root. Then compile portable evidence:

callitwrap compile plan.toml take-log.csv /path/to/media --out wrap-report

wrap-report contains:

  • report.html — escaped, script-free coverage board for humans;
  • report.json — stable schema for automation;
  • editor-handoff.csv — sorted recording rows with coverage status.

All output is deterministic and contains relative paths only. The input contract is documented in docs/input-format.md.

Exit Codes

Code Meaning Next action
0 Ready; warnings may still be present Review warnings, then hand off
1 Hold; one or more blocking findings Follow each finding's repair text and rerun
2 Invalid input, I/O failure, or command usage Correct the named boundary error; no compile output is written

The full finding-code table and a symptom-first recovery path are in docs/repair.md.

What “Ready” Proves

A take counts only when every required camera is logged as usable, every referenced camera file is present, and a sync-sound take references a present sound file. A shot is ready only when it reaches its planned minimum number of complete usable takes.

CallItWrap proves declared coverage and filename presence, not codec playability, file-byte integrity, synchronization quality, or creative adequacy. The committed .mov and .wav demo files are deliberately tiny non-playable placeholders used to exercise filename reconciliation.

Development and Acceptance

One command runs the locked release gate:

uv run --frozen python scripts/check.py

It verifies formatting, lint, strict typing, tests with branch coverage, dependency audit, generated example drift, package build, and a clean installed-wheel run. See CONTRIBUTING.md for focused commands and SECURITY.md for the trust boundary.

Why This Exists

Production-management suites author and coordinate a whole shoot; media managers ingest and search assets; visual tools analyze continuity. CallItWrap performs a smaller, auditable final join across records teams already have. The researched distinction and rejected overlaps are recorded in docs/research.md; the architecture decision is in ADR-0001.

License

MIT

About

Offline film-wrap reconciliation for shot plans, take logs, and local media.

Topics

Resources

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages