Skip to content

videobook 0.3.3

Choose a tag to compare

@justintanner justintanner released this 27 Oct 12:18
· 170 commits to main since this release

Added

  • A TikTok-style subtitle editor in the chat composer. /subs @video, a
    video cell's Subtitles menu item, or asking chat or voice for subtitles
    opens it beside the chat: a portrait preview that plays with audio and
    highlights each spoken word, an editable transcript (text, timing, hidden
    and inserted words, phrase splits and joins), style, size, colours,
    outline, padding, language, frame and timing controls, and a draggable,
    keyboard-adjustable vertical position for all phrases or one. Drafts save
    as you edit, export to SRT or WebVTT, and Render creates a new subtitled
    video cell below the source (later renders become versions of it). The
    source video is never changed.
  • caption_video MCP tool with op: get | prepare | update | render. get
    reads the draft and preparation status without starting work (detail: full adds the document, face/text regions and loudness envelope);
    prepare starts word-timed transcription, vocal timing, optional face
    and on-screen-text placement and translation; update saves edits, a
    replacement document or a resolution (reseed, realign,
    keep_timings, discard) against expected_revision; render takes the
    reviewed revision, source_hash and a stable request_id and returns the
    same job on retries. Only prepare spends money.
  • Caption analysis is keyed by content: repeated or concurrent requests reuse
    one job, cached results return without provider calls, a failed refresh
    keeps the last result, and results for a video that changed mid-analysis
    are discarded. Subtitles render with bundled Montserrat and Anton (OFL),
    load Noto Sans subsets on demand for other scripts, and handle
    right-to-left text.
  • force on transcribe, translate_subtitles, describe_image,
    detect_scenes, suggest_cuts, suggest_sfx and analyze_jokes
    (analyze_video already had it) to run again on unchanged inputs.
  • Subtitles can replace the video in place instead of adding a new cell:
    choose Replace video beside the subtitle editor's export buttons. Render
    burns the subtitles into the source video, keeps its earlier version in
    history, and the cell shows RENDERING until the job finishes.
    caption_video render takes output: "new" | "replace".
  • /post posts a clip in one step. One sheet offers three destinations:
    iCloud · iPhone, Download (the clip and caption.txt download to this
    computer for a manual upload) and X, now or scheduled. Applying a
    destination creates the Post when needed, freezes the clip and caption and
    delivers them. A clip's menu offers Post…, and a Post's menu offers Save to
    iPhone and Download.
  • /files serves an artifact file as an attachment when given
    ?download=<name>, so download links save instead of playing inline.
  • Eighteen more MachGen video models. The picker offers LTX 2.3 Pro,
    MiniMax H3 Turbo, Seedance 2.0 Fast and Mini, Kling 3.0 and Kling 3.0 Omni,
    Veo 3.1 and Veo 3.1 Fast, Pixverse V6 and C1, HappyHorse 1.0 and Grok
    Imagine Video. Wan 2.2 A14B, Vidu Q3, Q3 Turbo, Q3 Pro, Q3 Pro Fast and Q4
    Preview, which MachGen hides from its own picker or keeps private, are
    available through generate_video and list_generation_models with
    include_hidden. Each model offers the resolutions, lengths, aspect ratios,
    frames and references MachGen accepts for it and is priced from MachGen's
    pricebook. Kling 3.0 Omni takes multi-shot settings: shot_type: "intelligence" lets the model plan the shots, and "customize" takes
    multi_prompt and shot_durations, which must add up to the duration.
  • MiniMax H3 2K regeneration (machgen:MiniMax-H3/upscale, available through
    generate_video): connect a 5-15 second MiniMax H3 768p video that MachGen
    generated, and MachGen renders it again at 1440p from its original prompt
    and inputs. It costs $0.05 per second of the source, counted twice (in and
    out). Other videos and URLs are refused before anything is spent.

Changed

  • The posting MCP tools shrink from 15 to 8. post takes to: icloud | download | x | draft with asset_id for a new Post or post_cell_id for
    an existing one. list_posts reads one Post with post_cell_id and the
    X posts waiting to publish with status: "scheduled". update_post takes
    url and posted_at after posting by hand, and cancel_schedule to turn a
    scheduled X post back into a draft. record_post_metrics without values
    fetches the current X metrics. service_status with service: "icloud",
    book_id and post_cell_id reports whether a Post's files finished
    uploading.

  • The Actions form and a timeline track's add-clip chooser are no longer
    modal dialogs. Both open as a review docked in the chat composer, like a
    generation review: Apply, or Enter on /apply, runs the action or adds the
    chosen clip, and Cancel, Escape or /cancel closes it. An action that needs
    confirmation shows its review and estimated cost on the first Apply and runs
    on the second; read results and their links stay on the review. In the
    fullscreen timeline editor the add-clip review docks at the editor's foot.

  • Image models default to 2K again (or the highest resolution they offer
    below 2K) instead of their highest resolution; 4K stays available to
    choose. New goals plan their scene at 2K. Video models keep their highest
    resolution, and a resolution a notebook remembers from a cell still applies.

  • Render in the subtitle editor no longer waits for the video: it queues the
    render, closes the editor and frees the chat, and the chat turn follows the
    job until the subtitled copy or the updated video is ready. caption_video
    render also returns the job's job_id, status and output_artifact_id
    at the top level.

  • Every analysis tool is keyed by the content it reads: speech-to-text by the
    transcribed audio and settings, translations by the timed transcript and
    language, video analysis by the video and the transcript it used, image
    descriptions by the image, scene scans by the video, cut and sound-effect
    suggestions by the video, transcripts, analysis and instructions, and joke
    analysis by the timed transcript. A repeat returns status: "cached"
    (suggestions and jokes include the earlier entries) without a provider
    call, a job or a write; otherwise the tools return queued or running
    with a numeric job_id, and concurrent or forced requests join one job.
    These tools no longer return enqueued, already_analyzed or string job
    ids.
    Automatic transcription and analysis jobs skip the provider when their
    result is current, results whose inputs changed mid-run are discarded, a
    failed refresh keeps the previous result, and undoing an edit serves the
    earlier analyses again. Sidecars written by earlier versions are adopted
    once instead of being paid for again.

  • describe_image returns the script asset it already wrote for an unchanged
    image instead of creating a new one per call.

  • Captions, keyword titles and watermark placement share one cache of face
    and on-screen-text regions per video frame, so each pass only sends frames
    no earlier pass analysed.

  • A render with a translated subtitle_language fails with the reason when
    the translation cannot be made, instead of burning the original language.

  • Editing a video's picture or sound still deletes its video analysis and,
    for sound or timing edits, its transcripts; scene scans, suggestions and
    joke analyses are kept and simply stop matching the edited media.

  • Thai, Lao, Khmer, Burmese, Chinese and Japanese speech is read as words.
    ElevenLabs returns these scripts a letter at a time; transcripts,
    subtitles, SRT exports, the transcript card, search text, suggestions and
    translations now join the letters into dictionary words without spaces
    between them, Thai syllables the dictionary does not know (loanwords,
    colloquial particles such as เหรอ) stay whole, and a space in Thai ends a
    subtitle phrase so it is never silently dropped. Subtitle phrases are
    measured by visible width (Thai vowel and tone marks take none, CJK
    characters take two), the seven-word cap applies only to spaced scripts,
    and a clause too long for one phrase splits into the fewest even phrases.
    The Impact and Highlight render styles no longer put gaps between Thai or
    CJK words. Short Thai and Chinese speech now counts as dialog, so it is
    transcribed automatically. Translations from Thai send whole clauses to the
    translator, and translations into these languages time real words instead
    of character pairs. Subtitle drafts saved by earlier versions are
    discarded, and caption vocal timing is measured again once per video.

  • /alive opens the new subtitle editor. Saved Alive caption settings seed
    the editor's style, a matching saved Alive analysis is reused instead of
    being paid for again, stored renders that still use the alive subtitle
    style render through the new captions, and queued analyze_alive_captions
    jobs run caption preparation.

  • render_video and render_project no longer accept highlight_style: "alive"; use caption_video for word-timed subtitles.

Removed

  • The create_post, get_post, link_post, save_post_to_icloud,
    post_icloud_sync_status, refresh_post_metrics and
    upload_post_to_dropbox MCP tools and their slash commands. Use post,
    list_posts, update_post, record_post_metrics and service_status
    instead.
  • Dropbox delivery: the Dropbox connection in connect_service and
    service_status, its Settings card and the @apicity/dropbox dependency.
    It needed a Dropbox app that was never configured, and Download covers
    manual uploads.
  • The alive_captions and set_alive_captions MCP tools and the
    full-screen Alive captions studio. Use caption_video and the subtitle
    editor instead.

Fixed

  • A Post delivery that finishes no longer overwrites a destination chosen
    while it was still running.
  • Settings shows the selected project's storage after switching projects
    while a storage check for the previous project is still loading.
  • Trimming an audio asset updates its recorded duration, streams and
    waveform, so the library and timeline report the trimmed length.

Security

  • Dependencies move to patched releases: the MCP TypeScript SDK server and
    client 2.4.0, vite 7.3.7, vitest 4.1.12, zod 4.6.7 (also inside Remotion
    Studio, through an override), undici 7.30.1, hono 4.13.14, body-parser
    2.4.0, follow-redirects 1.16.2, fast-uri 3.1.9 and ip-address 10.7.5.
    npm audit reports no vulnerabilities.