Outbound tunnel, read-only
The connection starts from the Companion on your Windows PC. The tunnel serves playback and accepts no remote write operations.
Catalog your external drives, review captured frames, find likely duplicates and manage files from a private web app you host yourself. Original videos stay on your drives.
$ Starts PostgreSQL, the API and the web app with the official images. Then open http://localhost:8081 and sign in as admin with the password the installer shows.
Windows Companion v0.2.3
Windows tray app. Installs without admin rights and updates itself.
.videocat-disk.json Server with Docker (amd64 and arm64). Companion for Windows.
Real screenshot with a fictional catalog
Once your collection outgrows a single drive, finding anything becomes impossible: which drive was it on? Is it a duplicate? Did I already review it? Plugging in drive by drive does not scale, and media servers assume everything is always connected.
A server you host and a Companion on your Windows PC. The server keeps the catalog; the files stay where they are.
One command starts the web app, the API and PostgreSQL with Docker. Open http://localhost:8081 and sign in as admin.
Install the Companion on Windows, generate a code in Administration › Companions and paste it into the Companion.
Add drives or folders. The Companion reads metadata with FFmpeg, builds thumbnails and visual fingerprints, and uploads only that.
Private catalog with login, in English and Spanish, deployed with Docker Compose behind your own domain.
A tray app that detects your drives, scans them, serves remote playback and runs copies and deletes.
.videocat-disk.json The drive strip shows which drives are connected and how full they are. Videos on an unplugged drive stay in the catalog, marked as such, with their thumbnails and metadata.
Ctrl K search across filename and path that ignores accents. .videocat-disk.json, even when Windows changes the drive letter. A full-screen session with random pending videos, optionally only from connected drives. Every decision has its own key and can be undone.
Comparing file sizes will never find the copy you re-encoded years ago. VideoCAT samples visual fingerprints at 15 points in each video and combines them with metadata to suggest likely copies, even when resolution, codec or compression changed. The final decision is always yours.
1 or ← keeps A, 2 or → keeps B, Enter applies the recommendation. Queue videos and the Companion copies them, one at a time, from connected drives into a local Windows folder.
The Companion opens an authenticated outbound tunnel to VideoCAT. It exposes no Windows ports and mounts no drives on the server. The drive has to be connected to the PC to play.
The connection starts from the Companion on your Windows PC. The tunnel serves playback and accepts no remote write operations.
The server relays the bytes the player asks for, without revealing the local path and without storing the video.
Full screen, double-tap to seek back or forward, jump straight to another video and shuffle that persists across connected drives.
Each session belongs to the user who created it, has duration and idle limits, and closes if the tunnel drops.
-c copy). A bottom tab bar, slide-up sheets for filters and the same sections as on desktop.
The Companion is the only piece that touches your drives. It scans, uploads metadata and thumbnails, copies, deletes and serves remote playback.
Needs FFmpeg: winget install Gyan.FFmpeg.
The Companion windows are currently in Spanish only.
The interface adapts to how and where you use it. Your choice is saved in your browser.
The sections you don’t use every day, but need when something doesn’t add up.
A map of folders by size, navigable level by level, to see where the space goes.
Scan, metadata, thumbnail and delete errors, grouped, with search and CSV export.
Physical and cataloged capacity per drive, paired Companions, recent activity and cleanup.
PIN and protected folders, local Companion, optional Chromecast and appearance.
The server keeps metadata, relative paths and thumbnails. When you play remotely it relays the bytes the player asks for, but never stores them.
You mark a video for deletion. The server stores the intent and the history; it never touches the drive.
When the right drive is connected, the Companion checks the path lies inside a monitored folder.
It checks size, modification time and visual fingerprint. If the file changed, it cancels and clears the mark.
If everything matches, it deletes the file and reports the result, which stays in the history.
A physical deletion cannot be undone without a backup. If you would rather decide when, set “Delete marked files” to “Only on request” in the Companion.
No cloud, no subscription, no telemetry. Deploy with Docker Compose in minutes.
# 1. Download the compose file and settings
mkdir videocat && cd videocat
curl -fsSLO https://raw.githubusercontent.com/reiterstahl/videocat/main/docker-compose.hub.yml
curl -fsSL https://raw.githubusercontent.com/reiterstahl/videocat/main/.env.example -o .env
# 2. Change the secrets (openssl rand -hex 32)
nano .env
# 3. Start the stack
docker compose -f docker-compose.hub.yml up -d
# 4. On Windows, FFmpeg for the Companion
winget install Gyan.FFmpeg No. The catalog stores metadata, relative paths, thumbnails, tags and history. During remote playback the Companion streams the bytes the player asks for through the server, but the file is not stored there.
No. That is exactly the use case: the catalog stays searchable while a drive sits in a drawer. Playing, copying or deleting does require connecting that drive.
Nothing breaks. VideoCAT identifies each drive by the UUID in its .videocat-disk.json, not by the letter.
Yes, as a likely duplicate. It combines metadata with visual fingerprints sampled across the video and shows you the confidence and the reasons. It does not use AI, and the final decision is yours.
Yes, deferred and through the Companion. Before deleting it validates the drive, the path and the file’s identity. A confirmed physical deletion cannot be undone without a backup.
The web app is responsive and remote playback targets modern mobile browsers. Whether a video plays depends on the browser, the container and the codecs.
Not for now: it is Windows only. The server runs anywhere Docker does.
Not exactly. VideoCAT focuses on cataloging collections spread across drives that are usually unplugged, reviewing frames, finding duplicates and running local actions. It is not a transcoding server.
No. VideoCAT is free software under the AGPL. The support links are optional, and forks may remove them while respecting the license and attribution.
The project is free and open source. Your support funds development time and keeps it all open.