Skip to main content

multimedia

This is a thin web client for a directory containing video files.

Installation

Installation is optional. It's recommended to use multimedia directly either by using uvx or docker (see running below).

pip install multimedia

Requirements

FFmpeg is required for video processing (thumbnail generation and metadata extraction).

  • macOS: brew install ffmpeg
  • Ubuntu/Debian: sudo apt install ffmpeg
  • Windows: Download from ffmpeg.org or use choco install ffmpeg

When using Docker, FFmpeg is included in the image.

Running

Using Docker

docker run \
    -p 8028:8028 \
    -v ${PWD}:/media \
    ozkatz/multimedia

Using UV

If you have uv installed, you can call multimedia directly with uvx:

MULTIMEDIA_DIR="${PWD}" uvx multimedia

Using pip

If installed via pip, simply run:

MULTIMEDIA_DIR="${PWD}" multimedia

Configuration

Configuring Multimedia is done using environment variables. Typically, minimal configuration is required:

Env var Default Value Description
MULTIMEDIA_DIR . Path to the directory to index video files and images from
MULTIMEDIA_PASSPHRASE (none) If set, requires this passphrase to access the UI and API

Authentication

To protect your multimedia server with a passphrase:

MULTIMEDIA_DIR="${PWD}" MULTIMEDIA_PASSPHRASE="your-secret-passphrase" uvx multimedia

When a passphrase is configured:

  • Users must enter the passphrase in the browser before accessing the UI
  • API requests require a Bearer token in the Authorization header
  • The passphrase is stored in the browser's session storage (cleared when tab closes)

Usage

Once you have a multimedia server running, access it in your web browser:

http://localhost:8028/

Development

Prerequisites

  • Python 3.10+
  • Node.js 18+
  • uv (Python package manager)
  • FFmpeg (for video processing)

Setup

Clone the repository and install dependencies:

git clone https://github.com/ozkatz/multimedia.git
cd multimedia

# Install Python dependencies
uv sync

# Install frontend dependencies
cd frontend
npm install

Building the Frontend

The React frontend must be built before running the server:

cd frontend
npm run build

This outputs the production build to src/multimedia/static/.

Running in Development

Start the backend server:

MULTIMEDIA_DIR="/path/to/videos" uv run multimedia

For frontend development with hot reload, run in a separate terminal:

cd frontend
npm run dev

The Vite dev server proxies API requests to http://localhost:8028.

Building for Distribution

Build the Python package:

# Ensure frontend is built first
cd frontend && npm run build && cd ..

# Build wheel
uv build

The wheel will be in dist/.

Publishing to PyPI

To publish a new version:

# Build frontend and package
cd frontend && npm run build && cd ..
uv build

# Publish to PyPI (requires PyPI token)
uv publish

To publish to TestPyPI first:

uv publish --publish-url https://test.pypi.org/legacy/

Set your PyPI token via environment variable or keyring:

export UV_PUBLISH_TOKEN=pypi-your-token-here

Building Docker Image

docker build -t multimedia .

License

This project is licensed under the Apache License, Version 2.0. See LICENSE for the full license text.

Metadata

Release files for multimedia 0.3.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for multimedia 0.3.0
File Size Uploaded
multimedia-0.3.0.tar.gz 129.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for multimedia 0.3.0
File Interpreter ABI Platform
multimedia-0.3.0-py3-none-any.whl Python 3 none any Details

Total release size: 227.9 kB

Release files / multimedia-0.3.0.tar.gz

Download URL multimedia-0.3.0.tar.gz
Size 129.0 kB
Tags Source
SHA-256 checksum
How to use checksums
f2c37c3c271de530b13fa99a975d36b403136acf5fb25e0d2f81675ecb91780a
BLAKE2b-256 checksum
How to use checksums
c02d4a06c450ad38a314323edb103cf98049c4c8c01f40322d9fd02e18168d37
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.10.3 {"installer":{"name":"uv","version":"0.10.3","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release files / multimedia-0.3.0-py3-none-any.whl

Download URL multimedia-0.3.0-py3-none-any.whl
Size 98.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
acfbd0306e1e08869a4a903490691cf1862ae33535390d6bca81755ab59482d2
BLAKE2b-256 checksum
How to use checksums
7a3755ff5f98dc8d41bfa1182897c479f987957cb00c3185453569e65c783fe5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.10.3 {"installer":{"name":"uv","version":"0.10.3","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release history Release notifications | RSS feed

This release

0.3.0 This release

2 release files

0.2.0

2 release files

0.1.4

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page