MEDIA HARVESTER
USER GUIDE & TECHNICAL REFERENCE
Version 3.0.0
May 2026
1. QUICK START GUIDE
1.1 Prerequisites
| Requirement | Details |
| Operating System | Windows 10/11 (x64), macOS, or Linux |
| Node.js | v20+ (must be installed system-wide) |
| ffmpeg | Installed via winget install ffmpeg (Windows) |
| yt-dlp | Installed via winget install yt-dlp (Windows) |
1.2 First-Time Setup
- Extract the
MediaHarvester-3.0.0-win-x64.exe portable executable to a folder of your choice.
- Run the executable as Administrator.
- A splash screen appears for ~10 seconds while the server starts.
- The application minimizes to your system tray (bottom-right corner).
- Right-click the tray icon → Open Admin Panel — this opens the web interface at
http://localhost:5000.
Fig 1.1 — Splash screen at startup, tray icon after initialization
1.3 Default Login
| Field | Value |
| Username | admin |
| Password | MediaKey2026! |
Change this password immediately after first login (Admin → Users).
Fig 1.2 — Login screen (dark theme)
1.4 Verify Everything Works
After logging in, check the System Status area:
| Component | Expected Status |
| Server | Running on port 5000 |
| ffmpeg | Installed (version number) |
| yt-dlp | Installed (version number) |
| License | Trial (60 days remaining) |
1.5 Your First Job
- Go to the Ingest tab (default view after login).
- Click New Job.
- Enter a URL or upload a file.
- Choose a Workflow: Transcode or Delivery.
- Click Submit.
Fig 1.3 — Main Ingest view with job creation form and active job cards
2. BASIC USER OPERATIONS GUIDE
This section is for end users who submit media for ingestion. You don't need admin privileges.
2.2 Submitting a Job from a URL
- Click New Job in the Ingest tab.
- Paste a URL into the Source URL field. Supported sources:
- YouTube, Vimeo, Dailymotion, and 1000+ sites (via yt-dlp)
- Direct
.mp4, .mov, .mxf, .webm links
- Select a Workflow:
- Transcode — Downloads and converts to your delivery format
- Delivery — Downloads only (no transcoding)
- Set Quality (optional):
Best, 1080p, 720p, 480p
- Add Metadata Tags (optional): Free-form labels to organize jobs.
- Click Submit Job.
2.4 Monitoring Your Jobs
The Ingest tab shows all jobs with status indicators:
| Status | Badge | Description |
| Queued | QUEUED | Waiting to be processed |
| Downloading | DOWNLOADING | Fetching source media |
| Processing | PROCESSING | Transcoding in progress |
| Delivering | DELIVERING | Uploading to destination |
| Complete | COMPLETE | Finished successfully |
| Error | ERROR | Failed (hover for details) |
| Cancelled | CANCELLED | Manually cancelled |
3. DETAILED CONFIGURATION GUIDE
3.1 Server Configuration
3.1.1 Environment Variables
| Variable | Default | Description |
PORT | 5000 | HTTP port for the web server and API |
YTDLP_BIN | yt-dlp | Path to yt-dlp executable |
FFMPEG_BIN | ffmpeg | Path to ffmpeg executable |
LICENSE_SERVER_URL | https://keys.thaisen.dk | KeyManager URL for licensing |
LICENSE_PSK | MH-TRIAL-RESET-PSK-2026 | Pre-shared key for license generation |
3.1.2 Directory Structure
server/
├── data/
│ ├── store.json # Persistent config (users, settings, license)
│ └── jobs.json # Persisted job queue (restored on restart)
├── downloads/ # Completed job output files
├── uploads/ # Uploaded files from users
│ └── .pending/ # Files awaiting job assignment
├── frontend/ # Admin panel web UI
├── health/
│ └── heartbeat.json # Server health status
├── logs/
│ └── remote.log # JSON-line log file
├── server.mjs # Main server process
├── transcoder.mjs # Transcoding engine
└── ldap.mjs # LDAP authentication module
3.2 Admin Panel Features
The admin panel is accessed by clicking the ⚙ Admin button in the header (visible only to admin users).
Fig 3.1 — Admin panel with system status and connected workers
3.2.4 User Management
| Role | Permissions |
admin | Full access to all features, user management, system settings |
operator | Manage all jobs, view all jobs, no admin settings access |
user | Submit jobs, view own jobs only |
4. LICENSING SYSTEM
4.1 License States
| State | Description | Media Substitution |
| Trial | 60-day evaluation, all features active | No |
| Licensed | Full 1-year license | No |
| Revoked | License removed, returned to fresh 60-day trial | No |
| Blacklisted | License revoked, trial backdated to expired | Yes — all output replaced |
Fig 4.1 — KeyManager admin panel showing instance management
4.4 Instance ID
The Instance ID is derived from the machine hostname: mh-xxxxxxxxxxxxxxxx.
- Same machine = same instance ID (survives reinstall)
- Different machines = different instance IDs
- Each install gets a unique trial period
5. TECHNICAL ARCHITECTURE
5.1 System Overview
Fig 5.1 — System architecture and component relationships
5.2 Job Flow
Fig 5.2 — Job lifecycle from creation to delivery
5.5 Watchdog Pair Architecture
Fig 5.5 — Watchdog pair providing high availability for remote workers
5.6 MAM & 3rd Party Integration
5.6.1 Supported Ingest Sources
| Source Type | Method | Notes |
| YouTube/Vimeo/etc. | yt-dlp | 1000+ sites supported |
| Direct HTTP URLs | HTTP GET | .mp4, .mov, .mxf, .webm |
| File Upload | HTTP POST multipart | Via admin panel |
| Watch Folder | Filesystem monitor | Auto-creates jobs |
5.6.2 MAM Integration Patterns
- REST API — External systems can create jobs, query status, and upload files via
/api/jobs and /api/upload.
- Webhook-style callbacks — Job completion triggers HTTP POST to configured callback URLs.
- Metadata embedding — Completed files include custom tags, source URLs, and XML sidecars (PBCore, EBUCore).
- SSE for real-time monitoring — External dashboards connect to
/api/sse for live progress updates.
5.6.3 Port Summary
| Service | Default Port | Configurable |
| Media Harvester Server | 5000 | Yes (PORT) |
| KeyManager Server | 3000 | Yes |
| Transcode Worker UI | 5030 | Yes (UI_PORT) |
| Delivery Worker UI | 5031 | Yes (UI_PORT) |
| TC Watchdog A/B | 5020 / 5021 | Yes (WD_PORT_A/B) |
| DL Watchdog A/B | 5032 / 5033 | Yes (WD_PORT_A/B) |