Files
techdj-test/README.md
2026-01-03 08:14:03 -06:00

4.3 KiB
Raw Blame History

TechDJ Pro

TechDJ Pro is a local DJ web app with a dual-port architecture:

  • DJ Panel (mix/load tracks + start broadcast): http://localhost:5000
  • Listener Page (receive the live stream): http://localhost:5001

It supports:

  • Local library playback (files in music/)
  • Downloading audio from URLs (via yt-dlp when available, with fallback)
  • Live streaming from the DJ browser to listeners using Socket.IO
  • Live listening via an MP3 stream (/stream.mp3) generated server-side with ffmpeg.

Requirements

System packages

  • Python: 3.10+ recommended
  • ffmpeg: strongly recommended (required for reliable downloads/transcoding and MP3 fallback)

Linux (Debian/Ubuntu):

sudo apt update
sudo apt install -y ffmpeg

macOS (Homebrew):

brew install ffmpeg

Windows:

Python dependencies

All Python dependencies are listed in requirements.txt:

  • flask
  • flask-socketio
  • eventlet
  • yt-dlp
  • python-dotenv
  • requests

Install (from scratch)

git clone https://git.computertech.dev/computertech/techdj.git
cd techdj

# Create venv
python3 -m venv .venv

# Activate venv
source .venv/bin/activate

# Ensure pip exists (some environments require this)
python -m ensurepip --upgrade || true

# Upgrade tooling (recommended)
python -m pip install --upgrade pip setuptools wheel

# Install deps
pip install -r requirements.txt

Optional configuration (.env)

Create a .env file in the project root if you want YouTube search results to work in the UI:

YOUTUBE_API_KEY=YOUR_KEY_HERE

Notes:

  • If you dont set YOUTUBE_API_KEY, you can still paste a YouTube URL directly into a deck/download box.

Run

Start the server:

source .venv/bin/activate
python server.py

You should see output like:

  • DJ panel: http://localhost:5000
  • Listener page: http://localhost:5001

Using the app

DJ workflow

  1. Open the DJ Panel: http://localhost:5000
  2. Click INITIALIZE SYSTEM
  3. Load/play music
    • Upload MP3s (folder/upload button)
    • Or download from URLs (paste into deck input / download controls)
  4. Open the streaming panel and click START BROADCAST

Listener workflow

  1. Open the Listener Page:

    • Same machine: http://localhost:5001

    • Another device on your LAN/WiFi:

      http://<DJ_MACHINE_IP>:5001

  2. Click ENABLE AUDIO if prompted

    • Browsers block autoplay by default; user interaction is required.

Multi-device / LAN setup

Find your DJ machine IP

Linux:

ip addr

Windows:

ipconfig

macOS:

ifconfig

Use the LAN IP (commonly 192.168.x.x or 10.x.x.x).

Firewall

Make sure the DJ machine allows inbound connections on:

  • TCP 5000 (DJ Panel)
  • TCP 5001 (Listener)

If listeners cant connect, this is often the cause.


Streaming

TechDJ serves the listener audio as an MP3 HTTP stream:

  • MP3 stream endpoint: http://<DJ_MACHINE_IP>:5001/stream.mp3

This requires ffmpeg installed on the DJ/server machine.

Debug endpoint

  • Stream debug JSON:

    http://<DJ_MACHINE_IP>:5001/stream_debug

This shows whether ffmpeg is running and whether MP3 bytes are being produced.


Troubleshooting

Listener says “Browser blocked audio”

  • Click ENABLE AUDIO
  • Try a normal click (not keyboard-only)
  • Disable strict autoplay blocking for the site, if your browser supports it

Listener says “NotSupportedError”

  • Your browser likely doesnt support the default WebM/Opus MediaSource path

  • Ensure ffmpeg is installed on the server

  • Try opening the MP3 fallback directly:

    http://<DJ_MACHINE_IP>:5001/stream.mp3

DJ says broadcast is live but listeners hear nothing

  • Confirm:
    • A deck is actually playing
    • Crossfader isnt fully on the silent side
    • Volumes arent at 0
  • Check http://<DJ_MACHINE_IP>:5001/stream_debug and see if transcoder_bytes_out increases

pip missing inside venv

Some Python installs create venvs without pip. Fix:

python -m ensurepip --upgrade
python -m pip install --upgrade pip

Dev notes

  • Main server: server.py
  • Client UI logic: script.js
  • Downloader: downloader.py
  • Static assets: index.html, style.css

License

No license specified.