reorg
@@ -186,13 +186,13 @@ pull_request_rules:
|
||||
label:
|
||||
add: ["scope: docs"]
|
||||
|
||||
- name: "label scope: ui"
|
||||
- name: "label scope: studio"
|
||||
conditions:
|
||||
- files~=^ui/
|
||||
- files~=^apps/fastvideo_studio/
|
||||
- -closed
|
||||
actions:
|
||||
label:
|
||||
add: ["scope: ui"]
|
||||
add: ["scope: studio"]
|
||||
|
||||
- name: "label scope: model"
|
||||
conditions:
|
||||
|
||||
@@ -88,7 +88,7 @@ docs/distillation/examples/
|
||||
dmd_t2v_output/
|
||||
preprocess_output_text/
|
||||
|
||||
# Next.js / Node artifacts under ui/: see ui/.gitignore
|
||||
# SvelteKit / Node artifacts under apps/fastvideo_studio/: see apps/fastvideo_studio/.gitignore
|
||||
|
||||
# Next.js / Node artifacts under apps/dreamverse/web/
|
||||
apps/dreamverse/web/node_modules/
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# FastVideo UI
|
||||
# FastVideo Studio
|
||||
|
||||
A lightweight web-based UI for interacting with FastVideo.
|
||||
|
||||
@@ -16,7 +16,7 @@ The UI currently supports:
|
||||
The easiest way to run the application is:
|
||||
|
||||
```bash
|
||||
cd ui
|
||||
cd apps/fastvideo_studio
|
||||
npm install
|
||||
npm run build
|
||||
npm run start
|
||||
@@ -33,10 +33,10 @@ The UI is composed of two separate components:
|
||||
|
||||
To run each component separately, you can use the commands `npm run start:web` and `npm run start:api`.
|
||||
|
||||
You can also run the API server with this command from the root directory:
|
||||
You can also run the API server with this command from the `apps/` directory:
|
||||
|
||||
```bash
|
||||
python -m ui.server --output-dir /path/to/videos --log-dir /path/to/logs
|
||||
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.
|
||||
@@ -0,0 +1,7 @@
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
"""Allow ``python -m fastvideo_studio`` to start the server."""
|
||||
|
||||
from fastvideo_studio.server import main
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -1,6 +1,6 @@
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
"""
|
||||
SQLite persistence for FastVideo UI.
|
||||
SQLite persistence for FastVideo Studio.
|
||||
|
||||
Stores jobs and default settings. Uses Python's built-in sqlite3.
|
||||
"""
|
||||
@@ -14,7 +14,7 @@ import threading
|
||||
from pathlib import Path
|
||||
from typing import Any
|
||||
|
||||
logger = logging.getLogger("fastvideo.ui.database")
|
||||
logger = logging.getLogger("fastvideo.studio.database")
|
||||
|
||||
# Default options schema - used for settings table defaults
|
||||
DEFAULT_SETTINGS: dict[str, Any] = {
|
||||
@@ -24,14 +24,14 @@ from dataclasses import dataclass, field
|
||||
from pathlib import Path
|
||||
from typing import Any
|
||||
from fastvideo.utils import get_mp_context
|
||||
from ui.database import Database
|
||||
from ui.training_config import (
|
||||
from fastvideo_studio.database import Database
|
||||
from fastvideo_studio.training_config import (
|
||||
build_training_args,
|
||||
get_training_env,
|
||||
get_training_module_info,
|
||||
)
|
||||
|
||||
logger = logging.getLogger("fastvideo.ui.job_runner")
|
||||
logger = logging.getLogger("fastvideo.studio.job_runner")
|
||||
|
||||
# Regex patterns for parsing tqdm-style progress output.
|
||||
# Matches e.g. " 40%|████ | 20/50 " or " 20/50 "
|
||||
@@ -0,0 +1,14 @@
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
"""Pydantic request/response models for the API."""
|
||||
|
||||
from fastvideo_studio.models.create_job_request import CreateJobRequest
|
||||
from fastvideo_studio.models.settings_update import SettingsUpdate
|
||||
from fastvideo_studio.models.create_dataset_request import CreateDatasetRequest
|
||||
from fastvideo_studio.models.update_caption_request import UpdateCaptionRequest
|
||||
|
||||
__all__ = [
|
||||
"CreateJobRequest",
|
||||
"SettingsUpdate",
|
||||
"CreateDatasetRequest",
|
||||
"UpdateCaptionRequest",
|
||||
]
|
||||
@@ -1,11 +1,11 @@
|
||||
{
|
||||
"name": "fastvideo-ui",
|
||||
"name": "fastvideo-studio",
|
||||
"version": "0.1.0",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "fastvideo-ui",
|
||||
"name": "fastvideo-studio",
|
||||
"version": "0.1.0",
|
||||
"dependencies": {
|
||||
"@sveltejs/kit": "2.57.1",
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"name": "fastvideo-ui",
|
||||
"name": "fastvideo-studio",
|
||||
"version": "0.1.0",
|
||||
"private": true,
|
||||
"type": "module",
|
||||
@@ -8,7 +8,7 @@
|
||||
"build": "vite build",
|
||||
"preview": "vite preview",
|
||||
"start": "concurrently --kill-others-on-fail \"npm:start:api\" \"npm:start:web\"",
|
||||
"start:api": "cd .. && python -m ui.server",
|
||||
"start:api": "cd .. && python -m fastvideo_studio.server",
|
||||
"start:web": "node build",
|
||||
"lint": "eslint ."
|
||||
},
|
||||
@@ -13,7 +13,7 @@ import threading
|
||||
from pathlib import Path
|
||||
from collections.abc import Callable
|
||||
|
||||
logger = logging.getLogger("fastvideo.ui.preprocess_runner")
|
||||
logger = logging.getLogger("fastvideo.studio.preprocess_runner")
|
||||
|
||||
|
||||
def build_preprocess_args(
|
||||
|
Before Width: | Height: | Size: 119 KiB After Width: | Height: | Size: 119 KiB |
|
Before Width: | Height: | Size: 5.7 KiB After Width: | Height: | Size: 5.7 KiB |
@@ -8,8 +8,8 @@ video-generation jobs powered by the FastVideo library.
|
||||
This is the API-only server. Use web_server.py to serve the frontend.
|
||||
|
||||
Usage:
|
||||
python -m ui.api_server # from repo root
|
||||
python ui/api_server.py --output-dir ./videos # explicit output dir
|
||||
python -m fastvideo_studio.server # from the apps/ directory
|
||||
python -m fastvideo_studio.server --output-dir ./videos # explicit output dir
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
@@ -31,15 +31,15 @@ from fastapi.middleware.cors import CORSMiddleware
|
||||
from fastapi.responses import FileResponse
|
||||
|
||||
from fastvideo.registry import (get_registered_model_paths, get_registered_models_with_workloads)
|
||||
from ui.database import Database, _get_db_path
|
||||
from ui.job_runner import JobRunner, JobStatus
|
||||
from ui.models import (CreateDatasetRequest, CreateJobRequest, SettingsUpdate, UpdateCaptionRequest)
|
||||
from fastvideo_studio.database import Database, _get_db_path
|
||||
from fastvideo_studio.job_runner import JobRunner, JobStatus
|
||||
from fastvideo_studio.models import (CreateDatasetRequest, CreateJobRequest, SettingsUpdate, UpdateCaptionRequest)
|
||||
|
||||
logging.basicConfig(
|
||||
level=logging.INFO,
|
||||
format="%(asctime)s [%(levelname)s] %(name)s: %(message)s",
|
||||
)
|
||||
logger = logging.getLogger("fastvideo.ui.api")
|
||||
logger = logging.getLogger("fastvideo.studio.api")
|
||||
|
||||
DEFAULT_OUTPUT_DIR = os.path.join(os.path.dirname(__file__), "..", "outputs", "ui_jobs")
|
||||
|
||||
@@ -571,7 +571,7 @@ def _setup_signal_handlers() -> None:
|
||||
|
||||
|
||||
def create_local_env(host: str, port: int) -> None:
|
||||
"""Check if .env.local exists in the ui directory, and create it if not."""
|
||||
"""Check if .env.local exists in the fastvideo_studio directory, and create it if not."""
|
||||
ui_dir = os.path.dirname(__file__)
|
||||
env_local_path = os.path.join(ui_dir, ".env.local")
|
||||
|
||||
|
Before Width: | Height: | Size: 119 KiB After Width: | Height: | Size: 119 KiB |
|
Before Width: | Height: | Size: 5.7 KiB After Width: | Height: | Size: 5.7 KiB |
@@ -210,7 +210,7 @@ Scope labels are inferred from changed files.
|
||||
| `scope: infra` | `.github/`, `.buildkite/`, `fastvideo/tests/`, `docker/` |
|
||||
| `scope: distributed` | `fastvideo/distributed/` |
|
||||
| `scope: docs` | `docs/` |
|
||||
| `scope: ui` | `ui/` |
|
||||
| `scope: studio` | `apps/fastvideo_studio/` |
|
||||
| `scope: model` | `fastvideo/models/`, `fastvideo/layers/`, `fastvideo/configs/models/` |
|
||||
|
||||
Process labels:
|
||||
|
||||
@@ -220,7 +220,7 @@ follow_imports = "silent"
|
||||
# ``*/_vendored/*`` matches upstream-provenance files vendored under any
|
||||
# ``_vendored/`` subdir (project-wide convention; mirrors the
|
||||
# ``_``-prefixed auto-discovery skip).
|
||||
skip = "./data,./wandb,ui/package-lock.json,performance_dashboard/frontend/package-lock.json,*/_vendored/*"
|
||||
skip = "./data,./wandb,apps/fastvideo_studio/package-lock.json,apps/performance_dashboard/frontend/package-lock.json,*/_vendored/*"
|
||||
# "tread" matches daVinci-MagiHuman's acronym "TReAD" (Token Routing and
|
||||
# Early Drop). codespell lowercases ignore-words entries, so the single
|
||||
# lowercase form silences all case variants.
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
"""Allow ``python -m ui`` to start the server."""
|
||||
|
||||
from ui.server import main
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -1,14 +0,0 @@
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
"""Pydantic request/response models for the API."""
|
||||
|
||||
from ui.models.create_job_request import CreateJobRequest
|
||||
from ui.models.settings_update import SettingsUpdate
|
||||
from ui.models.create_dataset_request import CreateDatasetRequest
|
||||
from ui.models.update_caption_request import UpdateCaptionRequest
|
||||
|
||||
__all__ = [
|
||||
"CreateJobRequest",
|
||||
"SettingsUpdate",
|
||||
"CreateDatasetRequest",
|
||||
"UpdateCaptionRequest",
|
||||
]
|
||||