105 lines
4.1 KiB
Markdown
105 lines
4.1 KiB
Markdown
# 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
|
|
|
|
```bash
|
|
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:
|
|
|
|
```bash
|
|
cd apps/fastvideo_studio
|
|
npm install
|
|
npm run dev
|
|
```
|
|
|
|
You can then access the app at [http://localhost:3000](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:
|
|
|
|
```bash
|
|
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:
|
|
|
|
```bash
|
|
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 |
|