Skip to content

Releases: FavioVazquez/showtime

showtime 0.4.2

Choose a tag to compare

@FavioVazquez FavioVazquez released this 12 Oct 03:17
8396b5b

showtime 0.4.2: chapter mode for long films, two render failures under load fixed, more browsers without a GPU, sound that stays in sync when you cut a render, your own local voice engines, and help pages for when something goes wrong. Every change, with its reasons and limits, is in CHANGELOG.md under 0.4.2; the README has a short "New in 0.4.2" and What's new one sentence for each.

Render

  • Chapter mode. render --chapters plans the pieces from your chapters (or the film's acts), --chapter N --job J renders one, and --join --job J joins them with one soundtrack for the whole video and checks every seam before the file is named final. On one machine a whole render is faster: chapters are for a later fix of one chapter (after a whole render or a join), a long film, or a second machine (not measured) (#22).
  • Capture lanes keep the video's size under load. Under heavy load a lane could take its screenshots at the browser window's size and the frames were scaled without a word. The renderer now sets the page size again once the page is ready and checks every screenshot's size, retaking a wrong one. With 3 workers on a 6-core Intel Mac with a GPU under load, 7 of 40 renders had a wrong-sized lane before the fix and 0 of 30 after (#49).
  • A frame that never comes no longer stalls a render. It is drawn again in a new browser (render) or ends the check with an error naming its step, when the browser reports its processes' work; otherwise the 10-minute cap stays (#24). A WebGL canvas that loses its context on the GPU renders again without the GPU (--gpu off) instead of shipping white.
  • More browsers without a GPU. --workers auto uses CPU threads - 2 from 8 threads up (at most 8, within the frame, memory and SHOWTIME_MAX_WORKERS limits): 6 browsers instead of 3 on an 8-thread machine; with a GPU nothing changes (#41).

Footage and voice

  • edit render keeps the sound in sync with the picture on showtime's own renders; a range could come out up to 21 ms early (#38).
  • On Windows, several audio mix runs writing into one folder at once no longer fail with "permission denied".
  • voice script --fit S --estimate says up front whether the narration can fit, before it synthesizes a line (#28, #45).
  • Extra local voice engines load by name from ~/.showtime/engines/, and doctor no longer fails on Kokoro when you chose another engine (#8; proposed and designed by @heavygee, who also wrote a matching PR, #36).

Help

  • A first-video guide, troubleshooting by symptom and a glossary; showtime doctor ends with a link to the troubleshooting page when a check fails, and the site's docs start on "Start here".

Issues closed: #8, #13, #14, #21, #22, #23, #24, #26, #27, #28, #29, #30, #31, #32, #33, #34, #35, #38, #39, #40, #41, #42, #43, #44, #45, #46, #47, #48, #49.

Still open: #12 (nightly test_cut_frames on the Intel Mac runner). 0.4.2 ships the fix (a lost WebGL canvas renders again without the GPU); it closes once the nightly passes on the released code.

Testing

  • Full suite (every test file) on the release commit: green on Linux x64, Windows, macOS on Apple Silicon and macOS on Intel.
  • CI on the release PR: fast suite on Linux, Windows and macOS; end-to-end (install, setup, render, qa, captions, MCP) on Linux ARM, Windows x64, Windows ARM and macOS; check_release 0 errors, 0 warnings; version 0.4.2 in every manifest.

Install or update: in Claude Code, /plugin marketplace add FavioVazquez/showtime then /plugin install showtime@showtime; the README covers other agents. The attached showtime-0.4.2.mcpb is the MCP bundle for desktop clients.

showtime 0.4.1

Choose a tag to compare

@FavioVazquez FavioVazquez released this 08 Oct 18:55
46d270f

showtime 0.4.1: faster renders without a GPU, designed cards over a talking head, Claude Design exports to MP4, a long recording to its best clips, seven looks and shutter blur in showtime's own WebGL, a mixer that sounds right on a phone, and a voice-over that is heard back before it ships. Every change, with its reasons and limits, is in CHANGELOG.md under 0.4.1; the README has a short "New in 0.4.1".

Faster, on any machine

  • A 30 s launch film went from 42.0 s to 17.6 s (2.4x) on a 64-core Linux machine with no GPU; a 15 s DOM page from 31.8 s to 16.4 s. The encoder runs during the capture, the worker count follows the cores, a finished worker takes over the largest part left, and an unchanged soundtrack is reused.
  • Waits scale with the page's measured pace, so heavy pages on a busy machine no longer time out. Every page showtime opens has a deadline and one retry in a new browser, and check exits with the step it was stuck at instead of hanging.

New ways to make a video

  • Talking-head cards (cards in an EDL): titles, lower thirds, quotes, data callouts, lists and side panels timed to the words, captions kept off the face.
  • A word behind the speaker: showtime footage cutout cuts a person out on the CPU (MODNet), and the behind card puts a word between the background and the speaker.
  • A long recording to its best clips: showtime edit moments ranks whole-sentence moments; showtime edit clips makes finished vertical clips.
  • Claude Design to MP4: showtime adopt <export.zip> turns a Claude Design HTML export into a finished video, fonts and loop included.
  • Seven looks in showtime's own WebGL (fluted glass, tilt-shift, liquid metal, mesh gradient, god rays, marble, metaballs) and shutter blur on chosen elements, no GPU needed; check prints each look's cost.

Sound and voice you can trust

  • qa hears the mix as a phone speaker does (speaker_loudness), and the mixer is speaker-safe by default.
  • The voice-over is heard back by the local recognizer: a name, acronym or number said wrong is flagged before it ships; a second recognizer confirms before a FAIL, and a listener can clear a word.

Working with people

  • Notes name the elements they point at and can cover a stretch of time; showtime status <job> says what changed while the agent was away.
  • HTML exports pack every file they need, carry link previews, and play on servers without Range requests.

Clean installs, docs and examples

  • Fixes from fresh macOS, Windows and Ubuntu machines (uv and Node checked first, the Visual C++ runtime named, old ffmpeg refused, a failed loudness read never recorded as 0 LUFS).
  • Docs for people: an FAQ, What's new and ten task guides. New examples 23-32, and the 0.4.1 showreel is the site's hero.
  • GitHub as the public tracker: issue forms, a code of conduct, and a nightly that reports its own failures.

Issues closed: #15, #16, #17, #18, #19, #20.

Moved to 0.4.2: #12, #13, #14 (nightly runner timeouts on macOS Intel and Windows) and #24 (a render or check can stall under load; seen on the macOS CI runner).

Reviews
Four independent review rounds on the integrated work (correctness, security, docs truth, outputs), each fixed before merge, plus a focused review of the late macOS-runner changes. Clean-machine tests on fresh macOS, Windows and Ubuntu machines.

Testing

  • Full suite: 82/82 test files pass on Linux x64 (32 at a time), three times on the final changes.
  • CI on the release PR (#11): all checks pass, including the four-platform e2e (macOS arm64, Windows x64 and arm64, Ubuntu arm64). The macOS runner stalled intermittently during the release; re-running the same commit passed, and the cause is tracked in #24.
  • check_release: 0 errors, 0 warnings; version 0.4.1 in every manifest.

Install or update: in Claude Code, /plugin marketplace add FavioVazquez/showtime then /plugin install showtime@showtime; the README covers other agents. The attached showtime-0.4.1.mcpb is the MCP bundle for desktop clients, and showtime-0.4.1-showreel.mp4 is the 0.4.1 showreel (music: "Supernova" by Scott Buckley, CC BY 4.0).

showtime 0.4.0

Choose a tag to compare

@FavioVazquez FavioVazquez released this 06 Oct 05:27
1c13d77

showtime 0.4.0: videos that ask, notes on the finished video, a stricter quality gate, and a showreel mode that won its blind rematch. Every change, with its reasons and limits, is in CHANGELOG.md under 0.4.0; the README has a short "New in 0.4.0".

Videos that ask, and notes on the finished video

  • Videos that stop and ask. showtime.json "questions": the HTML export pauses on the question's frame, asks, marks the answer, replies and plays on. The MP4 gets a "pause and think" beat (the question-beat component, F.questionBeat on canvas). A question can sit on a narration line, so a re-voice moves it with the line. check names question problems.
  • Notes on the finished video. showtime review open <job> serves a local page over the latest render: pause, click a spot or drag a box, type. The agent reads them with showtime review notes, fixes, and replies on the same note.
  • Range links in the HTML player: video.html#t=10-20 plays that part on a loop.

New ways in

  • showtime pr-video <N | URL>: a pull request becomes a short video for its own description, with a copy under GitHub's 10 MB limit. A public PR works without a GitHub login. Values that look like secrets are masked before anything is written.
  • showtime new <template> <dir> --from-storyboard FILE: a storyboard table from another skill becomes a project.
  • The showreel tone for "showreel" or "go all out" briefs: 12-14 shots per 15 s, no technique twice, flash words, the name landing late and short. qa judges density, the ending and repeats. The showreel template renders at 16:9, 9:16, 1:1 and 4:5.

A stricter quality gate

  • The critic watches as a first-time viewer before it reads the brief. Explainers default to a cold open, a roadmap, bridges and a close that answers the opening.
  • Critic findings gate delivery. A Blocker or Should-fix must be fixed or waived with a reason (showtime review-respond). job note --stage deliver also refuses when the delivered final's latest qa is a FAIL. deliver exports and deliver poster write their files but record the delivery only through the same gate.
  • A hearing pass next to the visual critic. One delivery card with a mandatory Look: line.

Better-looking by default

  • Twelve look signatures for the page templates, picked away from your recent videos.
  • Every <video> is drawn on a canvas in renders: no blank or late first frames after a cut.

Also in this release

  • MCP tool schemas checked against the command line, and one dated price table.
  • Messages are read before building, and renders clean up after themselves.

Proof

  • A behaviour scoreboard anyone can rerun (claude plugin eval, 14 cases × 3 runs per arm): 35/42 with showtime, 25/42 without (SCOREBOARD.md).
  • A blind rematch on the round-1 showreel prompt (rounds 5 and 6). 0.4.0 lost round 5. After the density fix, its two takes ranked first and second in round 6, ahead of the plain take that won round 1. There was one voter and the vote was only partly blind.

Fixed before release (found by making the 0.4.0 release video with showtime itself):

  • A long single-word choice spilled out of its box in the question beat. The revealed answer's key letter missed contrast on light themes. Labels were too small upright.
  • In a pairwise round, the losing version's findings still held the review through the old caption rule.
  • retime --from-voice dropped the first line's lead-in.
  • job note --stage deliver passed on a qa FAIL.
  • pr-video run inside a job folder logged its render into that job.

Testing

  • Full suite: 64/64 test files pass on Linux x64 (16 at a time).
  • check_release: 0 errors.
  • The showreel template passes check with no warnings at 16:9, 9:16, 1:1 and 4:5.
  • CI: fast tiers on macOS, Linux and Windows and end-to-end runs on macOS 14, Linux Arm, Windows Server 2025 and Windows 11 on Arm, all green.

The release video (2:00) is attached: showtime-0.4.0-release-video.mp4, made with showtime 0.4.0.

showtime 0.3.5

Choose a tag to compare

@FavioVazquez FavioVazquez released this 03 Oct 15:07
8d918fb

Fixes found by running showtime in a locked-down agent sandbox (no writable HOME, no local listen(), egress only
through an HTTP proxy, .env files unreadable), plus a Windows race the push CI caught.

  • onnxruntime's telemetry was on, while PRIVACY.md says showtime has none. The onnxruntime that Kokoro,
    alignment, stem separation, rembg and faster-whisper load on Linux (1.30) carries Microsoft's telemetry client and
    starts it at import; where HOME is read-only it logged "Failed to persist telemetry device ID" and wrote a
    :memory:.ses session file into the current folder. Every showtime process and its children now get
    ORT_DISABLE_TELEMETRY=1 (set by st itself and by the launcher, unless already set), and
    onnxruntime.disable_telemetry_events() is called before each model loads. PRIVACY.md says which libraries'
    telemetry showtime turns off and how.
  • Site capture turned its private-address guard off for a site whose name did not resolve. 0.3.3 made
    hostIsPrivate fail closed, but site capture still used it to decide whether a page's assets may come from
    private addresses, so a public site that does not resolve locally (the normal case on a proxy-only network) let
    them. Only a file: page or a page on a known private host allows that now (privateAssetsAllowed in capture.mjs).
  • Node downloads ignored HTTPS_PROXY. Node's fetch and http(s).request use the proxy variables only with
    NODE_USE_ENV_PROXY=1, so on a proxy-only network the Python side downloaded and the Node side (icon fetches, site
    capture's assets) did not. When a proxy variable is set, the launcher gives Node children NODE_USE_ENV_PROXY=1 and
    adds localhost,127.0.0.1,::1 to NO_PROXY/no_proxy (keeping your entries), so the preview and studio servers'
    local requests stay local. Node reads the flag from 22.21 (24.5 for http.request); showtime doctor warns when a
    proxy is set and Node is older.
  • Voice could not start when both the showtime home and $TMPDIR had long paths, and setup still said it was
    done.
    espeak-ng cannot read a data folder whose path is over about 140 bytes, so showtime copies its data to a
    short folder first; in sandboxes where the home and $TMPDIR are both long (seen at 175-185 bytes) there was none.
    The copy now falls back to /tmp/showtime-espeak-<uid> on macOS and Linux (0700, used only when it is the current
    user's own); when even that fails, the hint names the path length and the fix. showtime setup now runs doctor's
    espeak-ng self-test, so it fails instead of reporting success with voice broken.
  • retime --from-voice left catalog music at full level under the voice. Placing the voice ducks music that
    has no duck, but only file, lib and compose tracks; a catalog track (what audio cut-plan writes) was
    skipped. Catalog music now ducks too.
  • voice ipa's "no lexicon.json" hint read as a flag voice script does not have. It now says that --project
    is voice ipa's flag and that voice script reads the lexicon.json next to its script, plus any --lexicon FILE.
  • Setup and doctor said "showtime is not on PATH yet" when it was. A skill's own bin/showtime on PATH (a
    plugin's or a checkout's) now counts, not only the ~/.showtime/bin command.
  • brand capture took the wrong lines from a README that starts with HTML. On showtime's own README (no H1) the
    title was a shell comment in a code block and the tagline a bare video URL. The title is now the first H1 outside
    code (markdown, setext or a multi-line HTML <h1>) and the tagline its lead paragraph, skipping URL-only lines,
    images, badges, comments and captions; prompts to type are no longer listed as install commands, and brand.md for an
    adopted kit never prints None.
  • check reported caption words at their karaoke state. A caption word sampled while its card faded in, or
    dimmed before it was spoken, was measured at that opacity (#e9b949 on #17120e came out at 2.98:1 instead of
    10.18:1). Caption words are judged at the caption's own opacity, and any text measured at partial opacity is named
    with it (#e9b949 at 45% opacity (shows as #765d29) on #17120e). Real low contrast still fails.
  • An adopted Python render could open on black frames, or show each frame late, on a busy machine. Chrome
    puts a paused <video>'s seeked frame on screen through the video's own compositor submission and skips it while
    the previous one is still unacknowledged; the frame then goes out only at the next seek, so the capture showed the
    frame before (black for the first two frames on the Intel Mac runner). seeked and requestVideoFrameCallback both
    fire before that submission, so 0.3.4's wait could not see it. In renders the stage now draws a video's frame on a
    <canvas data-st-video="ID"> and hides the video (a canvas is captured with the rest of the page), and showtime adopt writes its frames page that way (re-adopt, or --refresh, to update an existing one). test_adopt checks
    that every frame of the Python render shows its own time.
  • A finished background run on Windows could show as "lost", with no id or command. Windows refuses to open a
    file another process is replacing, so status and the run's supervisor could collide on run.json; the
    supervisor's failed read then rewrote the file with only its new fields. Reads and replaces now retry for up to 2 s,
    and a failed read never rewrites the file.
  • Code-scanning hardening (CodeQL). Found by GitHub's code scanning on a fork of 0.3.4; none was a reported
    exploit, all are fixed rather than suppressed. The site's player and previews take only http(s) media and script
    URLs from data-* attributes (and file: when the site itself is opened from disk), data-root must be a relative
    path, and search-result links are escaped. The standalone player detects a doctype with a loop instead of a regex
    that backtracked on many --><!--, and escapes attribute values and the stage URL it writes; the studio clamps a
    dial's default to a number from 0 to 100; the icon cache builds its CDN URL only from a valid package name and a
    pinned version; adopt escapes backslashes in the names it puts into regexes, matches </script > end tags, and
    strips --!> from a file name written into an HTML comment. The brand-block pattern matches exactly the <link>
    line showtime writes; the Wikimedia rate-limit hint compares the parsed hostname; the caption emoji class and the
    motion --where parser are written without patterns the scanner misreads (same results, checked over every code
    point and a set of filters); the ci workflow runs with read-only repository permissions.
  • MusicGen loads only safetensors, and outside Intel Macs needs torch 2.13+. The optional MusicGen extra now
    passes use_safetensors=True, so it never torch.loads a pickle (the pinned model revision ships
    model.safetensors). Intel Macs keep torch 2.2.2, the last x86_64 macOS build, whose known flaws are in
    torch.load and in functions MusicGen does not call with outside input; everywhere else the floor is 2.13, the
    first release with every published PyTorch security fix.
  • Tests in a sandbox that refuses listen() skip instead of failing. tests/_listen.py (LISTEN_BLOCKED,
    needs_listen, skip_if_listen_refused(), SHOWTIME_TEST_NO_LISTEN=1 to simulate) is used by every test that
    serves something; the keelson fixture tests skip when .env files are unreadable; test_delight runs alone under -j
    (pty devices).

Checked: the full test tier on macOS (Apple Silicon and Intel), Windows and Ubuntu, the end-to-end install-and-render test on four platforms, and CodeQL code scanning (now on for this repository, with Dependabot alerts).

Install or update: /plugin marketplace update showtime in Claude Code, npx -y @faviovazquez/showtime-mcp@0.3.5 for the MCP server, or the attached showtime-0.3.5.mcpb for Claude Desktop.

showtime 0.3.4

Choose a tag to compare

@FavioVazquez FavioVazquez released this 02 Oct 22:45
fae3aa8
  • Frame 0 of a page with CSS animations could show where the animation had got to in real time.
    The stage paused CSS animations and Web Animations at the first seek, but by then they had been running
    since page load, and transform/opacity animations run on the compositor: pausing them there left the
    last real-time value on screen until the property changed again, so the first capture had an element a
    few pixels along (the css-clock fixture's dot was 12 px out at t=0 on about half the runs, which the
    nightly reported as frames differ when reached in another order or after a pause (0s)), and layers
    that had been animated on the compositor rasterised differently depending on the frames seeked before
    (the Windows raster noise verdict). In render mode stage.js now holds every animation from the
    start (animation-play-state: paused in an adopted style sheet, and Element.animate() returns a
    paused animation), so nothing runs before the first seek and a frame depends only on t;
    data-st-free elements are left alone as before.
  • A seeked <video> could be captured before its new frame was on screen. seekOne waited for
    seeked and one frame, but the frame reaches the compositor after seeked, so a slow machine captured
    the previous frame: a black frame 0 in an adopted Python render (qa first_frame_black on macOS) and
    "frames depend on seek order" in check for a captured video on Windows. The seek now also waits for
    the frame to be presented (requestVideoFrameCallback), or 500 ms after seeked if it never comes.

Includes everything in 0.3.3 (security fixes and the audio mirror); 0.3.3 was not published to npm or the MCP Registry, so this is the next version there after 0.3.2.


Checked: the full test tier of the affected tests on macOS (Apple Silicon and Intel), Windows and Ubuntu, and the end-to-end install-and-render test on four platforms.

Install or update: /plugin marketplace update showtime in Claude Code, npx -y @faviovazquez/showtime-mcp@0.3.4 for the MCP server, or the attached showtime-0.3.4.mcpb for Claude Desktop.

showtime 0.3.3

Choose a tag to compare

@FavioVazquez FavioVazquez released this 02 Oct 21:37
d3aeeca

Behaviour changes to know about (all deliberate, all security or correctness):

  • A symlink inside a project that points outside it is no longer served by the preview or capture servers
    (403, with a message saying to copy the file into the project). showtime never creates such links itself.

  • Page capture refuses a host whose name does not resolve, unless an HTTP(S) proxy is configured for it.

  • job note --output: a hand-set final=/preview= that is not a video, or an unknown KIND=, is now an
    error (use report= for HTML and PDF deliverables).

  • An audio mirror for sandboxes. 0.3.2's model mirror covered models; the hosts real music and sound
    effects come from (opengameart.org, scottbuckley.com.au, incompetech.com, archive.org,
    upload.wikimedia.org, bigsoundbank.com, kenney.nl) are blocked by the same sandbox proxies, so a video's
    soundtrack and sound effects silently went missing instead. The music catalog's fetch, the audio
    library's download (also used by sound-effect packs) now try the primary host, then a
    SHOWTIME_AUDIO_MIRROR folder or URL, then the mirror bases in lib/st/mirror.json's new audio block
    (release assets under the audio-v1 tag of this repository) when the primary refuses; after one refusal
    a host's later files go straight to the mirror. Every copy is sha256-verified against the same pin as
    the primary, and a mismatch is never kept. The primary hosts' politeness rules (OpenGameArt's 10 s,
    Scott Buckley's no-bulk) still apply; a GitHub mirror needs no delay. SHOWTIME_AUDIO_MIRROR has the
    same semantics as SHOWTIME_MODEL_MIRROR (a base URL, a local folder checked before any network,
    comma-separated, or off), and when every source fails the error names the blocked hosts and the mirror
    file to provide. scripts/stage_audio_mirror.py downloads every pinned music track, sound-effect pack
    and library file from its primary (Scott Buckley's tracks included, with his permission, staged in bulk
    only by this script), verifies size and sha256, writes LICENSES.txt and SHA256SUMS, and prints the
    gh release create/gh release upload commands; it uploads nothing. showtime doctor reports a
    blocked network with a reachable audio mirror as a warning, not a failure. docs/agents.md's Claude app
    section and the music guide cover it.
    --pin first pins the 218 extended-tier library sources that had no size or sha256 yet (the
    library's own maintainer pin), so they can be mirrored and verified too.

  • A symlink inside a served project could point anywhere on disk. server.mjs's safeJoin/
    sendFile and capture.mjs's staticJoin/serveStatic checked requested paths only as text, so a
    symlink inside the served folder (evil -> /etc/passwd) was servable, and a name either server picks
    for itself afterwards (a directory's index.html, a pretty-URL .html, the SPA fallback, 404.html)
    was never re-checked at all. Both now resolve the real path and refuse (403) anything outside the
    served root, via a shared realpathUnderRoot helper in the new scripts/lib/pathguard.mjs.

  • The SSRF guard treated "DNS did not resolve" as "safe to fetch." capture.mjs's hostIsPrivate
    returned false (not private) when a lookup failed for any reason, so an unresolvable host passed
    the guard instead of being refused. hostPrivacy now distinguishes 'private' | 'public' | 'unknown',
    and hostIsPrivate/safeDownload fail closed on 'unknown' (reason unresolved-host) unless a
    proxy is configured for that URL (proxyConfiguredFor, honouring HTTP(S)_PROXY/NO_PROXY) --
    behind an explicit proxy with no local resolver, a failed lookup says nothing about reachability.

  • footage stabilize's deshake fallback used a radius ffmpeg often rejects. ffmpeg's deshake
    filter requires its search radius to be a multiple of 16; the strength-to-radius formula rounded to
    arbitrary integers (17, 33, 49, ...) that fail the whole encode, and render_edl.py's own fallback
    hard-coded rx=24:ry=24, which is not a multiple of 16 either. Both now go through a shared
    stabilize.deshake_filter() that snaps the radius to 16, 32 or 48.

  • job/ledger.py had no "report" output kind. An HTML or PDF deliverable saved with
    job note --output had nowhere to go: it was either ignored or, worse, could be set as the job's
    final/preview by name, which qa/review-pack/deliver then fail on as an unreadable video.
    Output kinds gain "report" (.html/.htm/.pdf), inferred from the file name or set with
    report=path; a hand-set final=/preview= that is not a video is now refused with a hint to use
    report= instead (a tool's own output, --auto, is logged as a variant rather than refused). An
    unknown KIND= (e.g. a typo) is now a clear error instead of being recorded as a literal file name.


Audio mirror release: https://github.com/FavioVazquez/showtime/releases/tag/audio-v1

Install or update: /plugin marketplace update showtime in Claude Code, npx -y @faviovazquez/showtime-mcp@0.3.3 for the MCP server, or the attached showtime-0.3.3.mcpb for Claude Desktop.

showtime 0.3.2

Choose a tag to compare

@FavioVazquez FavioVazquez released this 30 Sep 22:44
980c41f

Quality and variety: new videos stop sounding the same, the critic stops passing cheap-looking work, and voices work in sandboxed apps.

  • Music that varies. Recently used tracks and composers rank lower, no composer takes over a result list, and showtime history check warns on a repeat. Every film project now gets its own score (key, tempo, progression, motif, instruments) from curated mood tables; before, film-template videos all played the same one. 48 new tracks from 13 artists (297 in all), every licence checked and every file measured.
  • A model mirror for sandboxes. When Hugging Face or GitHub LFS is blocked (as in the Claude app), setup and first-use downloads come from sha256-verified release assets (models-v1); SHOWTIME_MODEL_MIRROR adds your own. docs/agents.md has a Claude app section.
  • The quality floor. The critic answers "would I post this?" (the bar: a stranger would not call it cheap, broken or wrong), and a "no" holds delivery in quality mode; caption should-fixes stay open until fixed or explained; qa warns on player controls in footage, soft footage, stepped caption boxes and big empty borders.
  • Devin. The receipt reads Devin's usage (models, tokens, estimated cost, Fusion shares); it flags a lead reviewing its own sidekick as not an independent critic.
  • Fixes. No bulk downloads from creators who ask for none (Scott Buckley's tracks always come one at a time); stills and posters match the video's brightness; review-pack works on silent videos; qa scopes footage edits to their own length; export html keeps per-frame images; chart yMin.

Tested: the fast suite on Linux (53/53 files), a fresh-home setup behind a proxy that blocks Hugging Face, and 8 + 6 real Devin runs. Full notes: CHANGELOG.md.

showtime 0.3.1

Choose a tag to compare

@FavioVazquez FavioVazquez released this 30 Sep 09:54
436d4ed

A patch for three things found while testing 0.3.0 in the Claude app and in one plugin directory.

  • The plugin's end-of-turn hook no longer fails before setup. Installing the plugin and working a few turns before
    showtime setup made the Stop hook (showtime receipt --hook, which keeps a job's token and cost receipt current)
    print "needs the showtime environment" and fail at the end of every turn. Before setup there is no job to refresh, so
    the hook now exits quietly: from the launcher when the environment is missing, and from bin/showtime when there
    is no Python yet. A real command run before setup still says what to install.
  • Setup is the user's call. In a test in the Claude app, the agent judged the one-time setup too big for a
    five-second clip and made the video with bare ffmpeg instead. SKILL.md and references/onboarding.md now say it
    plainly: give the size and time and run setup; if the user declines, say what cannot be made without it; never make
    the video another way.
  • SKILL.md's description is one line (it was a folded YAML block, which one directory's importer read as ">").

Update: in Claude Code, /plugin marketplace update showtime; in the Claude app, Customize → Plugins → showtime. Full notes for 0.3.0: v0.3.0.

showtime 0.3.0

Choose a tag to compare

@FavioVazquez FavioVazquez released this 30 Sep 05:24
924fcd3

showtime 0.3.0 reviews every video before you see it, makes videos less alike, and checks what viewers complain about
most: text that moves too fast, is too small on a phone, or a look every agent video seems to share. It also adds
explainers for repos and papers, a release-video command with a GitHub Action, and a receipt for every job that says what
the video took. Same idea as before: your coding agent directs, your machine renders, nothing is uploaded.

In my blind vote in benchmark round 4, 0.3.0 in lean mode was preferred to 0.2.0 on 4 of 6 tasks and to plain Claude
Code on 7 of 8, and its launch video beat a tool built only for launch videos for the first time in four rounds. The
full review, now the default, came after that round and was not part of it. One author, one run per task: anecdotes, not
a result (report).

A full review by default, lean when you ask

  • Quality mode is the default. Every finished video gets looks, qa and a critic round (a reviewer that did not build
    it) before delivery. qa and deliver warn "review pending" until the critic round has run.
  • Lean mode is one word away. Say "lean", run showtime config mode lean, pass --mode lean, or set it through MCP,
    for a lighter pass without the critic round. The mode is recorded in the job and in its receipt.
  • showtime look makes one 1280 px composite of the key frames and a brief for a disposable reviewer that answers
    in text with timestamps. Your agent no longer has to open a stack of full-size images.
  • Short command output. Without a terminal (agents, pipes, MCP), check, qa, doctor and render print the
    verdict, the findings with their fixes and the paths; the full report is in a file. --verbose prints everything.
  • showtime guide <topic> [section] prints a reference's rules or one section instead of the whole file. Every
    reference now opens with an Essentials block.
  • Check before render. render warns when the project changed since the last check, and after a second full
    render it names --from S --to S, which renders only that span and splices it into the full video.
  • showtime job init checks setup and prints setup: ready or the failures with their fixes.

Better videos

  • Variety guard. Each finished job's look (template, theme, palette, type pair, transitions, camera moves, music,
    structure, tone) is kept in a history on your machine. showtime check warns look_repeat when a project repeats one
    of the last five and offers two alternatives. showtime history off turns it off; nothing is uploaded.
  • Style references. showtime reference <video> measures a video's cut rhythm, shot lengths, palette, camera moves,
    rough type scale and loudness, and writes a brief. The storyboard borrows the grammar, never the words, logos or
    shots; the credit is written for you, and showtime qa fails a render that copies the reference's pictures.
  • Phone check. showtime check ends with phone check: PASS or FAIL with timestamps: text held long enough to
    read (per language), a minimum type size at phone width (16:9 5 pt, 1:1 10, 4:5 11, 9:16 15) and nothing under the
    platform's buttons. In qa a failure is a warning.
  • Pairwise review. For publish-bound work, showtime review-pack --against best sets the new render beside the best
    so far as a blind pair, judged twice with the order swapped. showtime review-verdict ships the new one only if it
    wins both; a tie or a split keeps the older render. Up to three rounds, no scores.
  • Brand first for launches. showtime brand capture <repo|url> --job <job> takes the product's palette, fonts, logo,
    wordmark, real copy (with file and line) and real UI before the storyboard; showtime new launch applies it. A launch
    with no kit records why, and check warns when the page ignores the kit. The launch workflow now states length
    defaults (teaser 10 to 15 s, feature 30 to 40 s, launch 45 to 60 s) and the two-second hook.
  • Fixes where agents tripped in the 0.2.0 runs: frames of a clip that is not active no longer depend on seek order,
    retime --from-voice --total works when every scene is narrated, Manim silent films and --mix paths work,
    manim check runs qa's black-frame and frozen-frame detectors on a draft, font errors name the exact missing
    characters and the fix, and doctor warns when the showtime command on your path is not your agent's.
  • Partial renders splice into the full video. render --from/--to --job re-renders a span and writes a complete
    final; a span file is never the deliverable. The Manim templates pass their own check, and qa no longer reads a dark
    design as a black frame.
  • Math by ear. voice script warns when a line repeats a word across a sentence break ("One. One plus three" is
    heard as "one one plus three"); the voice guide says how to read sums and symbols aloud.
  • Charts keep their numbers. A bar or point added to a chart grows in with its own label, while the labels already
    on screen stay lit and move with their bars (they used to blink out and back). Callouts carry their year or value
    ("2015: first year above 400 ppm") and move clear of the line's end label. check warns chart_labels_hidden when
    a page hides chart labels during motion.
  • Pacing you can feel. check warns slow_scene when a scene holds well past the time its text needs; launch
    films warn on still stretches from 3.5 s (they read as a frozen video); qa's dead_stop flags a fast move that halts
    in one frame, and check's same_frame_entrance three or more items landing on one frame, each with its fix. Data
    films dip between text-heavy scenes instead of blurring them together, and showtime look includes the middle of
    the fastest transition, where doubled text hides.
  • "Make it like this video" lands on the reference's style. showtime reference now measures the reference in
    frames (every cut, shot lengths, moves and easing, palette roles, margins and type sizes, tempo and every sound hit)
    and writes a spec with what to keep and what to change, plus a style.css that showtime new --job links into the
    project. The reference's colours carry over unless you have a brand kit or ask otherwise; its words, logos and shots
    never do. showtime reference diff <job> checks the render against the reference and names what drifted, by frame.

New kinds of video

  • Repo explainers and paper explainers (workflows repo-explainer and paper-explainer). A codebase explained in
    five parts, with one request traced through real files and lines at a pinned commit; a paper explained with claims
    tied to pages, figures shown only when their license allows, and Manim for the math. Every claim has a row pointing at
    its source. There is no example in the gallery yet.
  • showtime release-video turns release notes, a CHANGELOG section or a PR description into a ready-to-render
    project with no agent: the notes' own words, holds long enough to read, the people credited.
  • A GitHub Action (.github/actions/showtime-video, guide in docs/github-action.md) renders a release or PR video
    on the runner, checks it, exports an HTML video and a copy under 10 MB, and uploads them. It needs no API key unless
    you choose the mode that runs your own agent.
  • showtime adopt <folder | page | script> takes a video someone already wrote as a function of time (an HTML page
    with seek(t), a canvas draw(t), a CSS-animated page, a Python frame function) and gives it showtime's checks,
    sound, captions, qa, HTML export and review without a rewrite. Your original files are never changed.

Honesty

  • A receipt for every job. receipt.md, receipt.json and a line in share.txt: your request as typed, the
    assumptions, review rounds, full and partial renders, images made for looking, wall time, and tokens and cost when your
    agent's session log is named. Anything unknown says "not reported by this agent"; nothing is estimated. Claude Code
    costs are labelled API-equivalent, because a plan does not pay per video; Codex gives tokens only.
  • showtime qa re-extracts its contact-sheet frames when the video is newer than them (a re-render to the same
    final.mp4 used to show the old frames), and a 1:1 or 4:5 master is no longer an aspect warning for X or LinkedIn.
  • SECURITY.md says how to report a vulnerability privately.

Upgrading from 0.2.0

  • Claude Code: /plugin marketplace update showtime. Other agents: showtime install --agent <name> again, or pull the
    repository. No setup step is needed; showtime job init now checks setup itself.
  • New files appear in your job folders (receipt.md, receipt.json, work/look/) and a line in share.txt between
    receipt markers (delete it if you like).
  • The look history is a file at ~/.showtime/history/looks.json on your machine. showtime history off stops it,
    showtime history clear deletes it.
  • Commands print less when there is no terminal. If you scripted against the old long output, use --verbose or
    SHOWTIME_OUTPUT=full.
  • Launch jobs now warn (brand_missing) until they have a brand kit or a recorded reason.
  • MCP: tool results are capped at 40 lines, and there are new guide and receipt tools; snap takes look: true.
  • The review mode: 0.3.0 runs the full review by default. To keep 0.2.0's lighter behaviour for drafts, run
    showtime config mode lean.
  • The Claude Desktop bundle showtime-0.3.0.mcpb is attached to this release; the npm package
    @faviovazquez/showtime-mcp is 0.3.0.

Known limits

  • Tokens and cost come only from agents that expose a session log we can read (Claude Code and Codex); everything else
    says "not reported by this agent". Through MCP there is no session log.
  • Hosts without a sub-agent tool keep the look composite in the main context; it is...
Read more

showtime model mirror (models-v1)

Choose a tag to compare

@FavioVazquez FavioVazquez released this 30 Sep 18:32
436d4ed

Unmodified third-party model files (see LICENSES.txt) that showtime downloads when Hugging Face or GitHub LFS is blocked. Not a showtime release.