INGEST
Ingest is the media offload + verification panel. Its job is to take a source (card/folder or an explicit file list), copy it to a destination (optionally a second backup destination), and prove the copy is correct.
Core responsibilities
1) Source acquisition
-
Accepts either:
-
a source folder (typical card/drive offload), or
-
a source file list (hand-selected files)
-
-
Resolves paths and builds a deterministic “job plan” (what will be copied, where it will land, and how it will be verified).
2) Copy execution
-
Copies files using a “safe write” strategy (temp output then rename) so you don’t end up with partial files that look complete.
-
Supports preserving the source folder structure or flattening into a single-level destination layout (depending on workflow).
3) Verification
Verification is an explicit job setting. It’s not implied and it’s not silent.
-
Default is hash verification (fast, reliable).
-
Optional byte-for-byte compare exists (slow, absolute).
-
“No verification” is treated as a risk state and requires an explicit user confirmation.
4) Deduplication
-
“Skip duplicates” is implemented via a persistent hash cache so repeat ingests don’t waste time/disk.
-
Cache writes are crash-safe (atomic write + recovery behavior).
Operational modes
Normal Ingest
For standard offloads.
-
Source: folder or file list
-
Destination: required
-
Backup destination: optional
-
Options: flatten/preserve structure, extension filters, verification method, skip duplicates, ignore/cache behavior
Clone Mode (selective folder cloning)
For “copy parts of this drive/card, not everything.”
-
Source: folder only
-
Selection: folder tree (choose subfolders)
-
Same copy/verify/dedupe pipeline as Normal Ingest, but the job plan is built from the selected tree nodes.
Watch Mode (continuous ingest)
For “ingest anything new that appears in this folder.”
-
Source: watch folder only (not a manual file list)
-
Tracks already-processed items internally to prevent reprocessing.
-
Preserves relative paths under the watch root so subfolders mirror cleanly.
-
Includes guardrails to prevent writing outputs back into the watched tree (classic infinite loop failure).
Safety and guardrails
Path sanity
-
Validates source/destination early.
-
Enforces approved-path rules for filesystem scanning and estimation (prevents unintended traversal).
-
Avoids symlink loops and “escape the root” traversal during size/byte estimation.
Noise control
-
Default ignore patterns exclude typical junk/dev/cache directories.
-
“Include cache” flips that policy intentionally.
-
Always-skipped system junk stays skipped because it adds risk/no value.
Automation hook (n8n webhook)
-
Optional webhook call on ingest events (and optionally include logs/metadata).
-
URL validation is strict, with protections against accidentally targeting private/local addresses unless explicitly allowed.
-
Bad webhook config blocks queueing so jobs don’t run with broken automation assumptions.
What the user experiences in practice
-
Pick source(s) → pick destination(s) → choose mode/options → queue job.
-
Panel shows progress, logs, and final status.
-
Verification/QC failures produce actionable “this file failed and why” outcomes instead of silent corruption.
