Installable companion YouTube media app for SyntaxMatrix-based client ecosystems.
Project description
YouTube Video Downloader & Media Library
A self-hosted web application for inspecting YouTube videos, downloading permitted content, and managing a local media library.
Current status
This project currently supports:
- YouTube single-video inspection
- Resolution selection
- Non-blocking download jobs
- Progress tracking
- Saved media library
- Open / download / delete actions
- Docker-based local deployment
- PostgreSQL persistence
- Alembic migrations
Important usage note
Use this software only for content you own, control, or are otherwise permitted to download and store.
This project is intended as a self-hosted tool. Operators are responsible for ensuring their usage complies with applicable platform terms, copyright obligations, and local law.
Features
- Paste a YouTube URL and inspect metadata
- Choose a resolution before download
- Queue a download without blocking the UI
- Track job status and progress
- Prevent duplicate library entries for the same URL and resolution
- Search media and jobs
- Retry failed jobs
- View simple admin stats
- Run locally or via Docker Compose
Stack
Frontend
- React
- TypeScript
- Vite
Backend
- FastAPI
- SQLAlchemy
- Alembic
- yt-dlp
- FFmpeg
Data / Infra
- PostgreSQL
- Docker Compose
Architecture summary
The application currently uses:
- FastAPI backend API
- PostgreSQL for persistence
- Alembic for schema migrations
- Docker Compose for local container orchestration
- In-process background threading for download execution
Current limitation
Background downloads are currently executed in-process via Python threads.
That is acceptable for the current single-instance baseline, but it is not yet the final multi-worker production architecture. A dedicated worker/queue model can be introduced later.
Project structure
.
├── app/
│ ├── main.py
│ ├── config.py
│ ├── db.py
│ ├── models.py
│ ├── schemas.py
│ ├── tasks.py
│ └── services/
├── migrations/
├── web/
├── docker/
├── downloads/
├── docker-compose.yml
├── alembic.ini
├── requirements.txt
└── README.md
Local development
See docs/SETUP.md
Docker quick start
- Copy environment file values as needed.
- Start the stack:
docker compose up --build
- Open:
- Frontend:
http://localhost:8080 - Backend health:
http://localhost:8000/health - API docs:
http://localhost:8000/docs
API overview
Health
GET /health
Admin
GET /admin/stats
Inspect
POST /inspect
Downloads
POST /downloadGET /downloadsGET /downloads/{job_id}POST /downloads/{job_id}/retry
Media
GET /mediaGET /media/{media_id}/fileGET /media/{media_id}/downloadDELETE /media/{media_id}
Environment variables
Backend
DATABASE_URLFFMPEG_LOCATIONDOWNLOADS_DIRMAX_VIDEO_DURATION_SECONDSMAX_ACTIVE_DOWNLOADSALLOWED_SOURCE_HOSTSCORS_ORIGINS
Frontend
VITE_API_BASE_URL
See:
Screenshots
Add screenshots here later:
- main downloader screen
- inspect result with formats table
- active job progress
- saved media library
- admin stats
Roadmap
- dedicated worker queue
- cancel active job
- pagination controls in UI
- auth and role separation
- cloud object storage support
- better operational metrics
- release automation
- test suite expansion
Troubleshooting
Releases
See docs/RELEASE.md
Changelog
See CHANGELOG.md
Licence
smx-youtube-app
Installable companion YouTube media app for SyntaxMatrix-based client ecosystems.
This package is intentionally separate from the SyntaxMatrix framework itself.
Client projects that need the YouTube app can install and run it as a companion service.
Client projects that do not need it do not install it.
What it provides
- FastAPI backend
- PostgreSQL persistence
- Alembic migrations
- Packaged frontend served by the backend
- CLI entry point:
smx-youtube
Requirements
- Python 3.11+
- PostgreSQL
- Docker Desktop recommended for local PostgreSQL
- Node.js is only required by maintainers when rebuilding the frontend bundle
Install
pip install smx-youtube-app
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file smx_youtube_app-0.1.4.tar.gz.
File metadata
- Download URL: smx_youtube_app-0.1.4.tar.gz
- Upload date:
- Size: 4.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d824605a2f7dd822d18b6a020c513632cb24367b167ea074fca073865f271958
|
|
| MD5 |
7eef33d9cb73468cb437b4348a7c5772
|
|
| BLAKE2b-256 |
3befe9216fe7be903d41fb5dd78004915d0eb223812d0b632f46cd73da86182b
|
File details
Details for the file smx_youtube_app-0.1.4-py3-none-any.whl.
File metadata
- Download URL: smx_youtube_app-0.1.4-py3-none-any.whl
- Upload date:
- Size: 110.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d5b6228efe51fd8b9280885ee5f60d803ccddba85c2a8f4a6df1cb88ea9a80b8
|
|
| MD5 |
bf74769650bba57fdea3d105d9f43d9e
|
|
| BLAKE2b-256 |
cbe4cc06e6afc0a0fda8dab4b4438814347b025ceba78c92b1842e267823021f
|