A containerized web-based UI for capturing DV video from your favorite FireWire-connected camcorders straight from the glory 90ies using dvgrab.
- Web-based control - Start/stop capture from any browser
- Multiple formats - DV2 (AVI), DV1, RAW, QuickTime MOV
- Autosplit - Automatic scene detection and file splitting
- File management - Download and delete captured files via web UI
- Live status - Real-time capture status updates
- Device detection - Auto-detects connected camcorder with vendor/model info
- PWA support - Install as a standalone app on your device
- Headless-friendly - Perfect for servers without displays
- Retro CRT-style UI - Nostalgic interface with scanlines and LCD aesthetics
- Linux system with FireWire (IEEE 1394) port
- DV camcorder with FireWire connection
- Docker and Docker Compose
- FireWire kernel modules loaded (
firewire_ohci,firewire_core)
Works with any OHCI-compliant FireWire controller. Virtually all FireWire cards follow the OHCI (Open Host Controller Interface) standard, so you don't need to worry about specific card compatibility.
- The Linux kernel automatically detects and supports any OHCI-compliant FireWire card
- Common chipsets (TI, VIA, NEC, Agere, etc.) all work out of the box
- The
/dev/fw0device is created automatically regardless of card manufacturer
Multiple FireWire devices: If you have multiple FireWire cards or devices, you may see /dev/fw0, /dev/fw1, etc. Adjust the device path in docker-compose.yml if needed.
git clone https://github.com/henniiiing/dvgrab-WebUI.git
cd dvgrab-WebUIdocker compose up -d --buildOpen your browser and navigate to:
http://<your-server-ip>:5151
- Connect your DV camcorder via FireWire cable
- Set camcorder to Play/Edit mode (or Camera mode for live capture)
- Open the web UI at
http://<your-ip>:5151 - Enter a filename prefix (e.g.,
vacation-2024-) - Select output format (DV2/AVI recommended)
- Enable Autosplit if you want automatic scene detection
- Click Start Capture
- Click Stop Capture when done
- Download your files from the file list
Change the port in docker-compose.yml:
ports:
- "5151:5000" # Change 5151 to your preferred portFiles are saved to /captures inside the container. To change the host directory:
volumes:
- /path/to/your/captures:/capturesIf you have multiple FireWire devices, change the device path in docker-compose.yml:
devices:
- /dev/fw1:/dev/fw0 # Use fw1 instead of fw0Check which device your camcorder is connected to:
ls -la /dev/fw*| Format | Extension | Description |
|---|---|---|
| DV2 | .avi |
DV Type 2 AVI (recommended) |
| DV1 | .avi |
DV Type 1 AVI |
| RAW | .dv |
Raw DV stream |
| MOV | .mov |
QuickTime format |
| Endpoint | Method | Description |
|---|---|---|
/ |
GET | Web UI |
/api/start |
POST | Start capture |
/api/stop |
POST | Stop capture |
/api/status |
GET | Get capture status |
/api/device |
GET | Get camcorder connection status |
/api/files |
GET | List captured files |
/api/download/<filename> |
GET | Download a file |
/api/delete/<filename> |
DELETE | Delete a file |
Start capture:
curl -X POST http://localhost:5151/api/start \
-H "Content-Type: application/json" \
-d '{"prefix": "myvideo-", "format": "dv2", "autosplit": true}'Stop capture:
curl -X POST http://localhost:5151/api/stopGet status:
curl http://localhost:5151/api/statusGet device info:
curl http://localhost:5151/api/device-
Verify FireWire device is present:
ls -la /dev/fw* -
Check kernel modules:
lsmod | grep firewire -
Ensure camcorder is powered on and in Play/Edit mode
The container runs in privileged mode. If you still have issues:
sudo chmod 666 /dev/fw0Check logs:
docker compose logs -f- Python 3.11 - Runtime
- Flask - Web framework
- dvgrab - DV capture tool (bundled in container)
- Docker - Containerization
This project uses dvgrab, licensed under GPL-2.0, for DV video capture over FireWire.
MIT License
