MEDIA HARVESTER

USER GUIDE & TECHNICAL REFERENCE

Version 3.0.0 May 2026

TABLE OF CONTENTS

  1. Quick Start Guide
    1. Prerequisites
    2. First-Time Setup
    3. Default Login
    4. Verify Installation
    5. Your First Job
    6. Deploying Remote Workers
  2. Basic User Operations Guide
    1. Logging In
    2. Submitting a Job from a URL
    3. Uploading a File
    4. Monitoring Your Jobs
    5. Downloading Completed Files
    6. Cancelling a Job
  3. Detailed Configuration Guide
    1. Server Configuration
    2. Admin Panel Features
    3. KeyManager (License Server)
    4. Remote Workers
    5. Watch Folder
    6. Authentication
  4. Licensing System
  5. Technical Architecture
    1. System Overview
    2. Job Flow
    3. Worker Polling Flow
    4. License Flow
    5. Watchdog Pair Architecture
    6. MAM & 3rd Party Integration

1. QUICK START GUIDE

1.1 Prerequisites

RequirementDetails
Operating SystemWindows 10/11 (x64), macOS, or Linux
Node.jsv20+ (must be installed system-wide)
ffmpegInstalled via winget install ffmpeg (Windows)
yt-dlpInstalled via winget install yt-dlp (Windows)

1.2 First-Time Setup

  1. Extract the MediaHarvester-3.0.0-win-x64.exe portable executable to a folder of your choice.
  2. Run the executable as Administrator.
  3. A splash screen appears for ~10 seconds while the server starts.
  4. The application minimizes to your system tray (bottom-right corner).
  5. Right-click the tray icon → Open Admin Panel — this opens the web interface at http://localhost:5000.
Splash Screen ▶ Loading... Tray Icon
Fig 1.1 — Splash screen at startup, tray icon after initialization

1.3 Default Login

FieldValue
Usernameadmin
PasswordMediaKey2026!

Change this password immediately after first login (Admin → Users).

MEDIA HARVESTER MEDIA INGEST SYSTEM Username admin Password ••••••••••••• LOGIN
Fig 1.2 — Login screen (dark theme)

1.4 Verify Everything Works

After logging in, check the System Status area:

ComponentExpected Status
ServerRunning on port 5000
ffmpegInstalled (version number)
yt-dlpInstalled (version number)
LicenseTrial (60 days remaining)

1.5 Your First Job

  1. Go to the Ingest tab (default view after login).
  2. Click New Job.
  3. Enter a URL or upload a file.
  4. Choose a Workflow: Transcode or Delivery.
  5. Click Submit.
MEDIA HARVESTER LICENSED ▶ Ingest ⚙ Admin QUICK ACTIONS + New Job ↑ Upload File STATUS ● Server: Running ● ffmpeg: 6.1 ● yt-dlp: 2026.03.17 NEW JOB Source URL https://www.youtube.com/watch?v=... Workflow Transcode ▾ Quality Best ▾ SUBMIT JOB ACTIVE JOBS YouTube — Product Demo Reel Workflow: Transcode | Format: MP4 / H.264 | 1080p PROCESSING 62% Vimeo — Training Module 3 Workflow: Delivery | Format: Original | Best DOWNLOADING 33%
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

  1. Click New Job in the Ingest tab.
  2. 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
  3. Select a Workflow:
    • Transcode — Downloads and converts to your delivery format
    • Delivery — Downloads only (no transcoding)
  4. Set Quality (optional): Best, 1080p, 720p, 480p
  5. Add Metadata Tags (optional): Free-form labels to organize jobs.
  6. Click Submit Job.

2.4 Monitoring Your Jobs

The Ingest tab shows all jobs with status indicators:

StatusBadgeDescription
QueuedQUEUEDWaiting to be processed
DownloadingDOWNLOADINGFetching source media
ProcessingPROCESSINGTranscoding in progress
DeliveringDELIVERINGUploading to destination
CompleteCOMPLETEFinished successfully
ErrorERRORFailed (hover for details)
CancelledCANCELLEDManually cancelled

3. DETAILED CONFIGURATION GUIDE

3.1 Server Configuration

3.1.1 Environment Variables

VariableDefaultDescription
PORT5000HTTP port for the web server and API
YTDLP_BINyt-dlpPath to yt-dlp executable
FFMPEG_BINffmpegPath to ffmpeg executable
LICENSE_SERVER_URLhttps://keys.thaisen.dkKeyManager URL for licensing
LICENSE_PSKMH-TRIAL-RESET-PSK-2026Pre-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).

MEDIA HARVESTER ▶ Ingest ⚙ Admin LICENSED SYSTEM STATUS Server Running :5000 ffmpeg v6.1 yt-dlp 2026.03.17 License Licensed 334 days ADMINISTRATION 👤 Users & Roles ⚡ Workflows 🖥 Workers 🔐 LDAP 🔑 License Keys 📦 Upgrade Tools CONNECTED WORKERS WORKER ID TYPE ACTIVE JOBS STARTED LAST SEEN ACTIONS tc-remote-1 TC 1 / 2 2h ago 2s ago ⟳ ■ dl-remote-1 DL 0 / 2 2h ago 5s ago ⟳ ■
Fig 3.1 — Admin panel with system status and connected workers

3.2.4 User Management

RolePermissions
adminFull access to all features, user management, system settings
operatorManage all jobs, view all jobs, no admin settings access
userSubmit jobs, view own jobs only

4. LICENSING SYSTEM

4.1 License States

StateDescriptionMedia Substitution
Trial60-day evaluation, all features activeNo
LicensedFull 1-year licenseNo
RevokedLicense removed, returned to fresh 60-day trialNo
BlacklistedLicense revoked, trial backdated to expiredYes — all output replaced
KEYMANAGER — LICENSE ADMIN LICENSE ID NICKNAME INSTANCE ID PRODUCT CLIENT STATE ADMIN STATE 9d34ca [edit nickname] mh-ae81539c... Media Harvester LICENSED LICENSED f72b1a ✏️ mh-f72b1a... mh-f72b1a8d... Media Harvester TRIAL TRIAL a1c93e ✏️ mh-a1c93e... mh-a1c93ef2... Media Harvester BLACKLIST BLACKLIST Actions: Licensed Trial Blacklist ✕ Last seen: 1s ago
Fig 4.1 — KeyManager admin panel showing instance management

4.4 Instance ID

The Instance ID is derived from the machine hostname: mh-xxxxxxxxxxxxxxxx.

5. TECHNICAL ARCHITECTURE

5.1 System Overview

MEDIA HARVESTER ECOSYSTEM KEYMANAGER License Server Tray App + Web UI keys.thaisen.dk SSE + Heartbeat MEDIA HARVESTER Core Server — Port 5000 Web UI + REST API Job Queue + Workflows User Auth + LDAP ffmpeg + yt-dlp Zero npm dependencies REMOTE WORKERS ▸ Transcode Worker Port 5030 (UI) ▸ Delivery Worker Port 5031 (UI) ▸ Watch Folder System tray only Polls server API Watchdog HA pairs EXTERNAL SYSTEMS MAM Systems (via API) Cloud Storage (S3, FTP) Ingest Services (HTTP) YouTube/Vimeo (yt-dlp) Active Directory (LDAP) SSE HB :30s POLL HB REST API
Fig 5.1 — System architecture and component relationships

5.2 Job Flow

STEP 1 Job Created Status: queued Stored in store.json STEP 2 Download Status: downloading yt-dlp / HTTP GET STEP 3 Transcode Status: processing ffmpeg encodes STEP 4 Deliver Status: delivering S3 / FTP / HTTP ✓ Complete Output in downloads/ Server Server / Worker TC Worker DL Worker
Fig 5.2 — Job lifecycle from creation to delivery

5.5 Watchdog Pair Architecture

WORKER MACHINE WATCHDOG A Port 5020 Monitors: • Watchdog B • Worker Process → Restarts worker if peer + worker dead WATCHDOG B Port 5021 Monitors: • Watchdog A • Worker Process → Restarts worker if peer + worker dead WORKER Process (ffmpeg/yt-dlp)
Fig 5.5 — Watchdog pair providing high availability for remote workers

5.6 MAM & 3rd Party Integration

5.6.1 Supported Ingest Sources

Source TypeMethodNotes
YouTube/Vimeo/etc.yt-dlp1000+ sites supported
Direct HTTP URLsHTTP GET.mp4, .mov, .mxf, .webm
File UploadHTTP POST multipartVia admin panel
Watch FolderFilesystem monitorAuto-creates jobs

5.6.2 MAM Integration Patterns

  1. REST API — External systems can create jobs, query status, and upload files via /api/jobs and /api/upload.
  2. Webhook-style callbacks — Job completion triggers HTTP POST to configured callback URLs.
  3. Metadata embedding — Completed files include custom tags, source URLs, and XML sidecars (PBCore, EBUCore).
  4. SSE for real-time monitoring — External dashboards connect to /api/sse for live progress updates.

5.6.3 Port Summary

ServiceDefault PortConfigurable
Media Harvester Server5000Yes (PORT)
KeyManager Server3000Yes
Transcode Worker UI5030Yes (UI_PORT)
Delivery Worker UI5031Yes (UI_PORT)
TC Watchdog A/B5020 / 5021Yes (WD_PORT_A/B)
DL Watchdog A/B5032 / 5033Yes (WD_PORT_A/B)