archivist
archivist · sources · schema v1ARCHIVIST — universal Internet Archive (archive.org) media SOURCE. Pick a media type (IMAGE / AUDIO / VIDEO / ANY), type a search term + press Enter, and the card searches archive.org, picks a RANDOM matching item, and loads it; "↻ next" re-rolls another random match from the same results. Optional FROM/TO year-range narrows the search (e.g. 1970–1989). All searching + metadata happen client-side (the archive.org search + metadata APIs are CORS-open, so NO proxy is needed). PER-TYPE OUTPUTS (subject to archive.org CORS on the SERVED file — verified): IMAGE → the still image is uploaded as a CORS-clean WebGL texture on the `image` output (image upcasts to `video` for free, so it can drive video inputs). AUDIO → the clip plays + scrubs and its stereo audio routes out CORS-clean on `audio_l` / `audio_r` (analysable downstream, e.g. into SYNESTHESIA for beats). VIDEO → archive.org does NOT send CORS headers on served video files, so the clip is PLAY-ONLY: it plays + scrubs in the card preview, but the texture would be tainted, so the `video` output is NOT delivered for an archive video (the card shows a "play-only" warning). SCRUBBING for time-media (audio + video): a draggable timeline seeks the playhead, with ±10s skip, a "jump to random position" button (⤭), and an mm:ss readout — robust to archive.org's byte-range support (verified: audio + video serve HTTP 206 ranges). GATE/TRIGGER + CV OUTPUTS: `loaded` (trigger — a short pulse each time a new item finishes loading, any type), `ended` (trigger — pulses when a time-media item reaches its end), `playing` (gate — HIGH while a time-media item is playing), and `playhead` (CV — 0..1 normalized playhead position). The `play_trigger` gate INPUT toggles play/pause on a rising edge. PATCHING: all inputs + outputs live in the card's yellow drill-down PATCH PANEL (top-left / top-right affordances → INPUT / OUTPUT → grouped Gates / CV / Audio / Video rows) — there are no side jacks. PLAYABLE-FILE PICKING: for video the card prefers an HTML5-playable derivative (h.264 .mp4 → theora .ogv → .webm) chosen by the metadata format token, NOT just the file extension — so an un-decodable MPEG-4-Part-2 / HEVC .mp4 ORIGINAL or an old MPEG-2 / AVI / MOV is skipped; if the picked file still can't decode, the card surfaces a "couldn't play — skipping" status and AUTO-ADVANCES to the next random match (it never hangs on "Loading"). Only publicly-streamable items are loaded (the query excludes access-restricted / lending / DMCA items). Attribution: the card surfaces the item title + a link to its archive.org details page and labels the source as Internet Archive. A clean VIDEO texture output would require a same-origin streaming proxy (re-serving archive.org video with our own CORS + Range passthrough) — out of scope for v1; image + audio ship with real clean outputs, video ships play/scrub-only with the limitation documented.
the faceplate
inputs
| id | cable | what it does |
|---|---|---|
play_trigger | gate | Gate input (declared edge=gate, routed on the gate cable): the card reads its level and toggles play/pause for the loaded time-media item (audio or video) when the level crosses above mid-scale (high). No-op for an image item. It targets the cv_play_trigger param internally, so the same toggle can be driven from that synthetic param. gate / trigger; modulates cv_play_trigger (summed directly (the destination DSP scales it)); gate — acts while the level is high (reacts to both edges) |
outputs
| id | cable | what it does |
|---|---|---|
image | image | Image-type texture output carrying the loaded still image as a clean WebGL texture. Live only for IMAGE items (archive.org images are CORS-clean); idle pattern otherwise. RGB still image |
video | video | Video-type texture output. An IMAGE item free-upcasts here to drive video inputs. For an actual VIDEO item this stays the idle pattern because archive.org video is CORS-tainted (play-only, no clean texture). RGB video stream |
audio_l | audio | Left channel of stereo audio, routed via the cross-domain audio bridge (channel splitter on a MediaElementSource). Live and clean for AUDIO items; for VIDEO items the audio track is CORS-tainted so it is best-effort / typically dead; silent for images. audio signal |
audio_r | audio | Right channel of stereo audio (same bridge/splitter as audio_l, output 1). Live and clean for AUDIO items only; dead for video items and images. audio signal |
loaded | gate | Trigger out (edge=trigger): a short rising-edge pulse fired once each time a new item finishes loading and attaching. gate / trigger; trigger — fires once per rising edge |
ended | gate | Trigger out (edge=trigger): a short rising-edge pulse fired once when a time-media item plays through to its `ended` event. gate / trigger; trigger — fires once per rising edge |
playing | gate | Gate out (edge=gate): held HIGH while a time-media item is actively playing (not paused, not ended); LOW otherwise. gate / trigger; gate — acts while the level is high (reacts to both edges) |
playhead | cv | CV out: the normalized 0..1 playback position of the loaded time-media item, updated each frame while playing/seeking. control voltage (CV) |
params
| id | label | range | default | curve |
|---|---|---|---|---|
gain | Gain | 0..2 | — | linear |
cv_play_trigger | Play trigger | 0..1 | 0 | linear |
controls
| control | what it does |
|---|---|
| Play trigger | Synthetic edge-detector param (linear 0..1, default 0) mirroring the play_trigger gate input; the card polls it and edge-detects a rising crossing of mid-scale (0.5) to toggle play/pause. Normally driven through the play_trigger jack rather than directly. |
| Gain | Output gain, linear 0..2 (default 1). Reserved in v1 — declared on the module but not yet consumed in the signal path. |
source
archivist.ts on GitHub.