Important
This project is still in early development and may not be fully functional yet. Expect broken things and missing features π
Skellysubs provides in-browser video translation and subtitling capabilities. Video processing is handled client-side using ffmpeg.wasm, keeping server load light enough to wrangle significant-ish traffic on a free-tier GCP Cloud Run instance π€π
2025-01-27-jsm-video_subtitled.mp4
2e69e2563cb2d378200eb4afdb0086d2.mp4
- Install
uv
: https://docs.astral.sh/uv/getting-started/installation/ - Create and activate virtual environment:
uv venv
.venv/Scripts/activate # Windows
source .venv/bin/activate # Unix
- Install dependencies:
uv sync
- Run the server:
python skellysubs/__main__.py
The API documentation will be available at http://localhost:8080
- Navigate to the UI directory:
cd skellysubs-ui
- Install dependencies:
npm install
- Start development server:
npm run dev
Commits to the production
branch automatically trigger deployment to Google Cloud Run.
- No video, audio, or translation data is stored on our servers
- Translations are processed through OpenAI's API and subject to their standard privacy policy
- All video processing occurs in your browser (using a WebAssembly version of ffmpeg bundled along with the webpage)
- OpenAI API costs are currently covered by the FreeMoCap Foundation as a service to the community
- If usage grows beyond our free-tier infrastructure capacity or token costs become prohibitive... we'll figure something out β€οΈ
For local containerized testing:
docker build -t skellysubs . && docker run -p 8080:8080 --name skellysubs-docker skellysubs
[!WARNING] This section was generated by feeding the repository map into an LLM (deepseek or claude 3.5 Sonnet), may not be totally accurate.
A full-stack web application with:
- Python FastAPI backend
- React/TypeScript frontend
- Redux state management
- FFmpeg.wasm client-side video processing
- Containerized deployment (Docker + Cloud Run)
see - typescript App.tsx
- Core Stack: React + TypeScript + Vite + TailwindCSS
- State Management:
- Redux Toolkit with slices for processing status, subtitles, logs
- Thunks for async operations (file processing, API calls)
- Video Processing:
- FFmpeg.wasm integration via context providers
- Subtitle editor components with timeline visualization
- UI System:
- Configurable panel layouts
- Multi-stage processing workflow
- Real-time logging terminal
see - server_manager.py
- Core Framework: FastAPI with REST/WS endpoints
- Key Modules:
- AI Service integration (OpenAI/HuggingFace/Ollama)
- Video processing pipeline (transcription/translation/subtitles)
- Main Components:
core/
: Business logicapi/
: Endpoint routersai_clients/
: AI Provider strategies
see - useFfmpeg.ts
- FFmpeg.wasm for browser-based processing
- Avoids server-side resource usage
- Enables offline-capable workflows
see - ai_client_strategy.py
- Strategy pattern implementation
- Unified interface for multiple providers
- Easy integration of new AI services
- Currently focused on OpenAI API, but has the beginnings an Ollama, HuggingFace, Deepseek, and others
see Dockerfile
- Single container deployment:
- Python backend (UVicorn)
- Pre-built React frontend
- FFmpeg.wasm dependencies
- Cloud Run optimized
- Stateless design:
- Client-side state management
- No persistent storage
see - package.json
- @ffmpeg/ffmpeg - WASM video processing
- @mui/material - UI components
- react-resizable-panels - Layout system
see - pyproject.toml
- fastapi - Web framework
- openai - AI integrations