Flask web app that combines a still image with an audio file into a YouTube-ready MP4 video queue.
Find a file
2026-08-05 22:29:01 +00:00
templates Initial commit: image+audio to YouTube MP4 queue 2026-08-05 22:29:01 +00:00
.env.example Initial commit: image+audio to YouTube MP4 queue 2026-08-05 22:29:01 +00:00
.gitignore Initial commit: image+audio to YouTube MP4 queue 2026-08-05 22:29:01 +00:00
app.py Initial commit: image+audio to YouTube MP4 queue 2026-08-05 22:29:01 +00:00
config.py Initial commit: image+audio to YouTube MP4 queue 2026-08-05 22:29:01 +00:00
docker-compose.yml Initial commit: image+audio to YouTube MP4 queue 2026-08-05 22:29:01 +00:00
Dockerfile Initial commit: image+audio to YouTube MP4 queue 2026-08-05 22:29:01 +00:00
init_db.py Initial commit: image+audio to YouTube MP4 queue 2026-08-05 22:29:01 +00:00
models.py Initial commit: image+audio to YouTube MP4 queue 2026-08-05 22:29:01 +00:00
README.md Initial commit: image+audio to YouTube MP4 queue 2026-08-05 22:29:01 +00:00
requirements.txt Initial commit: image+audio to YouTube MP4 queue 2026-08-05 22:29:01 +00:00
VERSION Initial commit: image+audio to YouTube MP4 queue 2026-08-05 22:29:01 +00:00
worker.py Initial commit: image+audio to YouTube MP4 queue 2026-08-05 22:29:01 +00:00

Dionysis Media Video

Version: v0.1.0

A small Flask web app that combines a still image with an audio file into a YouTube-ready MP4 video.

Features

  • Upload an image (PNG/JPG/WebP/etc.) and an audio file (MP3/WAV/etc.).
  • Background worker queue processes jobs one at a time.
  • Queue shows status: Waiting, Processing, Complete, or Error.
  • Download completed videos from the queue.
  • Click an Error status to see the traceback and retry (move to end of queue).
  • Delete queued jobs unless they are currently processing.

Tech Stack

  • Python 3.12 + Flask + Gunicorn
  • SQLite for the queue
  • ffmpeg + Pillow for video encoding
  • Docker / Portainer deployment

Environment Variables

Variable Description Default
APP_SECRET_KEY Flask secret key generated at startup
ADMIN_PASSWORD Plain password for /admin none (when unset, login is disabled and admin is open)
PUBLIC_BASE_URL External URL for download links http://localhost:5000
INTERNAL_PORT Port Gunicorn listens on 5000
DATABASE SQLite path /app/data/app.db
UPLOAD_FOLDER Raw uploads directory /app/uploads
OUTPUT_FOLDER Completed videos directory /app/outputs

Local Development

cd ~/workspace/dionysis-media-video
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
python init_db.py
flask --app app run

Open http://localhost:5000.

Deployment

Build and run with Docker:

docker compose up --build -d

For Portainer, use the repository stack URL:

https://gitlab.hallsworth.ca/yrtria/dionysis-media-video.git

Branch: main, Compose path: docker-compose.yml.

Then run once inside the container:

python init_db.py