- moduleloader builds the component-loading config and the inference
config as resolved configs (_build_training_resolved_config and
build_inference_resolved_config) instead of TrainingArgs objects mutated
after construction; the transformer override, weights path, and
teacher/critic flag are config values or load_module arguments.
keep_checkpoint_component_config keeps the trainer's PipelineConfig view
of the checkpoint-filled VAE and text-encoder configs.
- The validation callback builds its pipeline with
from_pretrained(path, resolved_config=...) and forwards with a resolved
config built per run; it no longer replaces or mutates the trainer's
pipeline_config, and generator_overrides takes nested GeneratorConfig
fields instead of flat names.
- Against the 3f6893a0 snapshots of the 67 trainer YAML files, every
PipelineConfig and value matches except ltx2_vae_tiling (the model's
vae_tiling) and the unread pretrained_model_name_or_path.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012M91wnVFmPEvJ9h39r5BH7
FastVideo Studio
A lightweight web-based UI for interacting with FastVideo.
Features
The UI currently supports:
- Inference
- Finetuning & Distillation
- Datasets
- Gallery View
Project Structure
apps/fastvideo_studio/
├── server.py / job_runner.py / database.py # FastAPI backend + job lifecycle
├── mock_server.py # In-memory API mock for e2e tests
├── models/ # Pydantic request models (shared with the mock)
├── training_config.py # Studio workloads → fastvideo/train YAML configs
├── tests/ # Backend unit tests (pytest)
├── e2e/ # Playwright specs (run against the mock)
└── src/
├── app/ # Next.js App Router pages (thin routes)
├── components/
│ ├── shell/ # App chrome: header, sidebars, layout
│ ├── jobs/ # Job queue, cards, create-job modal, log sidebar
│ ├── datasets/ # Dataset cards, upload, captions
│ └── ui/ # shadcn-style primitives (shared theme)
├── stores/ # Framework-agnostic state + React bridge (hooks/)
├── lib/ # API client, types, option persistence
└── test/ # Vitest setup + factories
The visual theme (slate light/dark palettes, IBM Plex type, #356cff accent)
is shared with apps/dreamverse; the toggle in the header persists the choice
per browser.
Testing
npm run typecheck # tsc
npm test # vitest unit tests
npm run e2e # Playwright against the in-memory mock backend
python -m pytest tests/ # backend unit tests (from apps/fastvideo_studio)
Quick Start
For local development, install dependencies and start the Next.js dev server:
cd apps/fastvideo_studio
npm install
npm run dev
You can then access the app at http://localhost:3000. Start the Python API server (default port 8189) in a separate terminal — see below.
For a production build of the web app together with the API server:
cd apps/fastvideo_studio
npm install
npm run build
npm run start:all
Running API and Web Separately
The UI is composed of two separate components:
- API Server
- Web Server
To run each component separately, you can use the commands npm run start:web (after npm run build) and npm run start:api.
You can also run the API server with this command from the apps/ directory:
python -m fastvideo_studio.server --output-dir /path/to/videos --log-dir /path/to/logs
Running it this way allows you to pass command line parameters.
The API server defaults to port 8189. To configure this, you can edit .env.local file.
Refer to .env.example for reference.
API Endpoints
| Method | Path | Description |
|---|---|---|
GET |
/api/models |
List available models |
GET |
/api/jobs |
List all jobs (newest first) |
GET |
/api/jobs/{id} |
Get a single job's details |
POST |
/api/jobs |
Create a new job |
POST |
/api/jobs/{id}/start |
Start a pending/stopped/failed job |
POST |
/api/jobs/{id}/stop |
Request a running job to stop |
DELETE |
/api/jobs/{id} |
Delete a job |
GET |
/api/jobs/{id}/video |
Stream the generated video/image |
GET |
/api/jobs/{id}/logs |
Get job logs (polling, supports ?after=) |
GET |
/api/jobs/{id}/download_log |
Download the job's log file |