Skip to content

Joshuaeal/wrangler

Repository files navigation

Wrangler

Reliable media ingest. Built for real workflows.

Wrangler is a Docker-based ingest system designed for production environments where data integrity matters.

Cards come in. Files get selected. Wrangler handles structured ingest, dual backups, and checksum verification automatically.


Why Wrangler Exists

Ingest is one of the highest-risk parts of a shoot.

Manual copies fail. Drag-and-drop gets messy. Verifying footage is slow or skipped entirely.

Wrangler removes that risk.

  • Every file is tracked
  • Every copy is verified
  • Every job is repeatable

Core Features

  • Automatic media detection Detects mounted cards via a host-side helper

  • Project-based ingest Create structured project folders before copying begins

  • Manual or automatic ingest Run ingest manually by creating a project, selecting your source, and pressing ingest, or enable automatic ingest to trigger as soon as new media is detected

  • Selective file ingest Choose exactly what gets copied

  • Multi-destination backup Automatically mirrors to multiple locations

  • Checksum verification SHA-256 verification across all copies

  • Job tracking Full visibility of ingest status and results

  • Headless operation Runs independently of the UI, allowing ingest jobs to continue uninterrupted even if the browser is closed. Wrangler can run directly on the host machine or be operated from another device on the same network


How It Works

  1. Insert media
  2. Wrangler detects the volume
  3. Create a project in the web UI
  4. Choose manual or automatic ingest
  5. Select source, and optionally choose specific files (manual)
  6. Wrangler copies to a project folder
  7. Wrangler mirrors to destination A - and if desired, B and C
  8. Wrangler verifies all copies

Simple on the surface. Solid underneath.


Architecture

Wrangler is built as a set of small services:

  • API (apps/api) Express + SQLite backend managing projects, jobs, and checksums

  • Web UI (apps/web) React interface for ingest control and monitoring

  • Host Helper (macOS) (apps/host-helper) Detects volumes via /Volumes and diskutil

  • Host Helper (Windows) (apps/windows-host-helper) Native .NET helper exposing removable drives

  • Shared Package (packages/shared) Shared types and schemas


Quick Start

git clone https://github.com/Joshuaeal/wrangler
cd wrangler
cp .env.example .env
npm install

Start system

macOS and Windows:

npm run launch

This starts the correct host helper for your platform and brings the Docker stack up in the background, so you can close the terminal afterwards. Shut Wrangler down later from the Settings panel in the web UI.


Open UI

http://<your-machine-ip>:5173

For external access through a reverse proxy or Cloudflare Tunnel, point the public hostname at the web service only. The web container proxies /api/* to the API internally, so the app works behind a single public origin without exposing port 4001.


Requirements

  • Node.js 20+
  • npm 10+
  • Docker Desktop

Platform-specific:

  • macOS: diskutil
  • Windows: .NET 8 SDK

Installation

git clone https://github.com/Joshuaeal/wrangler
cd wrangler
cp .env.example .env
npm install

We reccomend running Wrangler for the first time locally as you will need to grant it permissions. After initialising, the GUI can be accessed on any machine in your network.

Update .env to match your storage paths, destinations, and network setup.


Run Wrangler

You can start the entire system with a single command:

cd /path/to/wrangler
npm run launch

This will:

  • build and start the host helper in the background
  • bring Docker services up in detached mode
  • allow you to close the terminal while Wrangler continues running

Wrangler can then be accessed from any device on your local network.


Stopping Wrangler

Wrangler can be stopped without touching the host machine:

  • Use Stop Wrangler in the Settings panel to stop only Wrangler services
  • Or return to the repository root and run docker compose down

Open UI

http://<your-machine-ip>:5173

For external access through a reverse proxy or Cloudflare Tunnel, point the public hostname at the web service only. The web container proxies /api/* to the API internally, so the app works behind a single public origin without exposing port 4001.


Important Notes

  • Source media is mounted read-only
  • /Users is mounted into containers for destination selection
  • SQLite database stored at DATABASE_PATH
  • API runs on 4001, UI on 5173
  • Designed for LAN access across multiple machines

AI Disclaimer

Wrangler has been developed with AI assistance and primarily tested on macOS.

Before production use, review and validate:

  • file operations
  • data integrity
  • path handling
  • platform-specific behaviour

Windows support exists but is not yet fully validated end-to-end.


**Positioning

Wrangler is for crews who don’t want ingest to be a liability.

It’s built for:

  • DITs
  • videographers
  • small production teams
  • live and event environments

Plug in. Select. Ingest. Verified. This is properly product-ready now.

About

Wrangler is a Dockerized media-ingest app for macOS and Windows hosts. A small host-side helper detects mounted SD cards, the web app lets an operator create a project and select source files, and a background worker copies the selection into the project folder and then out to two destinations with checksum verification.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors