continuator
A small Rust helper for stitching AI generated video clips together. It can talk to OpenAI’s Sora Video API and Google’s Veo 3 Preview on Vertex AI, pulls down the rendered MP4s, and shells out to ffmpeg to extract the last frame as the seed for the next shot. The crate ships both a library (continuator) and a CLI.
Requirements
- Rust 1.80+
ffmpegavailable on yourPATH- For Sora:
OPENAI_API_KEYexported in your shell - For Veo: a Google Cloud project with Vertex AI enabled, a location such as
us-central1, and eithergcloud auth print-access-tokenavailable on yourPATH(continuator will call it on demand), or- a short-lived OAuth token exported as
--gcp-access-token/$GCP_ACCESS_TOKEN
Installation
CLI quickstart
# create a fresh shot and store it as videos/intro.mp4 + videos/intro.json
# continue from the last frame of intro.mp4 for another 12 seconds
# list everything the tool knows about
# grab a fresh copy of a rendered asset
# stitch clips together into a single video under videos/test.mp4
# generate a multi-beat flow and stitched output (creates videos/test-flow.mp4)
# reuse an existing clip as the opener and continue it
Pass --model sora-2-pro, --seconds 12, etc. directly to the relevant subcommand, e.g. continuator create --model sora-2-pro --id ....
To target Veo 3 Preview instead of Sora, add a backend selector and (optionally) GCP metadata:
# Veo flow (project/location optional if gcloud defaults are set)
If you omit --gcp-access-token, the CLI shells out to gcloud auth print-access-token for you. continuator continue --provider veo --from dune-001 --id dune-002 --prompt "..." automatically captures the final frame of the parent clip and sends it as the first-frame reference. You can drop the project/location arguments entirely if your gcloud config already points at the right project and region.
Use continuator download --id <clip> --variant <variant> --output <path> to re-fetch assets. Variants may be video, thumbnail, or spritesheet.
Run continuator stitch --id <output> <clip...> to concatenate existing clips locally; the result lands at videos/<output>.mp4.
Library overview
use ;
# async context
let manager = new?;
let clip = manager
.create_video
.await?;
println!;
See continuator --help for the full command surface.
Example Clips (Veo 3 Preview)
https://github.com/user-attachments/assets/b245bc80-9e5c-4b1b-a0ec-ea332321312d
https://github.com/user-attachments/assets/ca23040c-4837-4e98-88f8-8f74e1f76128
https://github.com/user-attachments/assets/6ffdd85e-6598-452f-8a38-e73974e39ee9
Example Clips (Sora 2)
https://github.com/user-attachments/assets/427514aa-6717-4b4d-83d6-fbe4575c4e94
https://github.com/user-attachments/assets/f1d063c4-39cb-4b48-9b0a-2cb5ec6774cf
https://github.com/user-attachments/assets/e8e640ad-a5e2-4995-819e-b4312b926e47