tubearchivist

YouTube media organizer and archive platform via the bbilly1/tubearchivist OCI image.

The service runs as a Podman container alongside its two backends — Elasticsearch (tubearchivist-es) and Redis (tubearchivist-redis). The blueprint declares both as dependsOn so the backends start before the main service. The image reference is digest-pinned per ADR-0005.

AttributeValue
RuntimeOCI (Podman)
Port8000
Idle timeout43200 s (12 h)
OCI imagebbilly1/tubearchivist
Depends ontubearchivist-es, tubearchivist-redis

Blueprint environment defaults:

VariableDefault
TZEurope/Berlin

Consumer must provide:

  • Environment variables: ES_URL, REDIS_CON, TA_HOST, TA_USERNAME, TA_PASSWORD.
  • Volume mounts for /youtube (downloaded media) and /cache (working state).
  • A co-located tubearchivist-es service and a co-located tubearchivist-redis service in the same zone (the dependsOn declaration assumes same-zone resolution).

The blueprint pins recommended.main to the following digest-pinned image reference (verified against merlin production 2026-05-17):

v0.5.9@sha256:b827a713f55b2b1933f8b130f36dc8b38cec3dd56998c389b7c9694a7238f3df

The v0.5.9 pin is anchored to running production content. See the Drift Diagnostics section for the rule set the versions module enforces, and the upgrade-sandbox runbook (docs/runbooks/upgrade-sandbox.md) for the per-blueprint upgrade procedure.

Usage

The canonical consumer pattern calls mk {} and merges host-specific identity and volumes via lib.recursiveUpdate:

nixda.zones.private.services.tubearchivist = lib.recursiveUpdate
  ((blueprint "tubearchivist").mk {})
  {
    id = 10;
    runtime.oci = {
      environment = {
        ES_URL = "http://localhost:9200";
        REDIS_CON = "redis://localhost:6379";
        TA_HOST = "tubearchivist.private.lan";
        TA_USERNAME = "admin";
      };
      volumes = [
        "/mnt/storage/youtube:/youtube"
        "/var/lib/tubearchivist/cache:/cache"
      ];
    };
  };

TA_PASSWORD is a secret and should be supplied through environmentFiles rather than inline in the configuration. See the consumer host documentation for the secret-wiring pattern.

To opt into the recommended pin explicitly (suppressing the inheritance warning):

nixda.zones.private.services.tubearchivist = lib.recursiveUpdate
  ((blueprint "tubearchivist").mk {
    versions = (blueprint "tubearchivist").recommended;
  })
  {
    id = 10;
    # ... environment + volumes as above
  };

Pinning to a Different Tag

A consumer who needs a different upstream tag must supply the full digest-pinned form per ADR-0005:

nixda.zones.private.services.tubearchivist = lib.recursiveUpdate
  ((blueprint "tubearchivist").mk {
    versions = {
      main = "v0.5.10@sha256:<64-lowercase-hex-chars>";
    };
  })
  {
    id = 10;
    # ... environment + volumes as above
  };

When bumping the TubeArchivist main image, also confirm the tubearchivist-es tag remains compatible per the upstream compatibility matrix at the TubeArchivist project.


Back to Blueprint Catalog