Tiled Media is an app for browsing and displaying local media in a flexible, composable grid. The API serves media and configuration, and the Web UI renders tiles like video, audio, slideshow, text, exec, and program. It supports lightweight programmability through a JSON interface.
- API default port:
8000 - Web default port:
3000
- Tiled layout: Arrange tiles in a grid; set sizes and positions.
- Multiple tile types: Video, audio, slideshow, text, exec, program.
- api: Serves
/mediaand reads JSONC configs fromCONFIG_DIR. - web: Dev server for the UI (Vite/Next/Vue/etc. depending on repo).
# Copy env example and adjust ports if needed
cp .env.example .env
# Build and run the base demo
docker compose up --buildOpen:
- API:
http://localhost:8000 - Web:
http://localhost:3000
The public demo uses config/layout.jsonc and config/program.jsonc.
Create an overlay directory e.g. tiled-media-overlay as a sibling directory
to this repo. You can modify the overlay directory contents freely without
affecting this repo
Move your .env and move the config directory file into the overlay
directory.
Create a new docker-compose.yml. Example:
services:
api:
volumes:
- type: bind
source: /home/user/sounds/ # E.g. notification.mp3
target: /app/media
read_only: false
- type: bind
source: /home/user/media/ # Point to your media dir
target: /app/media/.host
read_only: true
- type: bind
source: /home/user/tiled-media-overlay/.config # Custom json dir
target: /config
read_only: falseThis is what you should have now:
tiled-media/
tiled-media-overlay/
config
docker-compose.yml
.env
Run run-overlay.sh from the overlay directory.
# Build both services
docker compose build
# Start (public demo)
docker compose up
# Start with personal override (dotfile)
docker compose -f docker-compose.yml -f .docker-compose.local.yml up
# Stop and remove containers
docker compose down -v