Skip to main content

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

  1. Copy environment file values as needed.
  2. Start the stack:
docker compose up --build
  1. 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 /download
  • GET /downloads
  • GET /downloads/{job_id}
  • POST /downloads/{job_id}/retry

Media

  • GET /media
  • GET /media/{media_id}/file
  • GET /media/{media_id}/download
  • DELETE /media/{media_id}

Environment variables

Backend

  • DATABASE_URL
  • FFMPEG_LOCATION
  • DOWNLOADS_DIR
  • MAX_VIDEO_DURATION_SECONDS
  • MAX_ACTIVE_DOWNLOADS
  • ALLOWED_SOURCE_HOSTS
  • CORS_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

See docs/OPERATIONS.md

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

smx_youtube_app-0.1.7.tar.gz (4.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

smx_youtube_app-0.1.7-py3-none-any.whl (247.6 kB view details)

Uploaded Python 3

File details

Details for the file smx_youtube_app-0.1.7.tar.gz.

File metadata

  • Download URL: smx_youtube_app-0.1.7.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

Hashes for smx_youtube_app-0.1.7.tar.gz
Algorithm Hash digest
SHA256 02c4990188f411744ad5147b522eb9e9db9152ff75a18c4a585ab97e813f19f3
MD5 a1c13658528f12e807eb725ae008fa28
BLAKE2b-256 2a45ed13004543406057d26d3e48d222ce3681ad9726509b3d8c2603b92de57f

See more details on using hashes here.

File details

Details for the file smx_youtube_app-0.1.7-py3-none-any.whl.

File metadata

File hashes

Hashes for smx_youtube_app-0.1.7-py3-none-any.whl
Algorithm Hash digest
SHA256 bf7b06f9e0f24478f6559fdcb22b9b30d88305c5f1994dd7b7d65a6550eb2677
MD5 f9820f5747d1cc6f136fd96b2aacd517
BLAKE2b-256 9d7f4c2b5db1a09d43a48accc1b4bc81b801496b9b7d27079b0e83d5b9083e70

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page