archivist

archivist · sources · schema v1

ARCHIVIST — 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.

ARCHIVIST is a universal Internet Archive (archive.org) media source for the VIDEO domain. You pick a media type (image / audio / video / any) and a search term (plus an optional year-from/year-to range), and the card runs an archive.org advancedsearch query, picks a RANDOM matching public item, and loads it into a resizable preview. Restricted/lending items are always excluded from the query, and the file picker only chooses HTML5-playable derivatives (jpg/png/gif/webp for images; mp3/ogg/m4a/flac/wav for audio; h.264/theora/webm-class video, rejecting bare MPEG-4-Part-2 / HEVC), auto-advancing to another random match if a chosen derivative will not decode — so it lands on something that plays instead of hanging on "Loading". CORS BEHAVIOR IS PER-TYPE: only IMAGE and AUDIO items are CORS-clean and deliver real downstream signal — an image becomes a clean WebGL texture on the `image` output (and free-upcasts to `video` so it can drive video inputs), and an audio item routes clean stereo to `audio_l`/`audio_r` via the cross-domain audio bridge. VIDEO items are PLAY-ONLY: archive.org video lacks CORS on the served file, so the texture is tainted and the `video` output stays the idle pattern (the card shows a "play-only (no clean output)" warning), and a video item's audio track is likewise CORS-tainted so its audio jacks are effectively dead. So archivist is video-output-only for VIDEO items, but its audio jacks ARE live and clean for genuine AUDIO items. Search and metadata are CORS-open and fetched directly with no proxy. Usage: choose "image" to feed clean stills into the video graph, or "audio" to pull found-sound stereo into the audio graph; use "video" only for in-card preview/scrubbing. Multiplayer-aware: the loaded item, search inputs, and play state mirror on the node so peers see and drive the same item. The card is corner-drag resizable (handle bottom-right, min 360x360, default 360x540), with a 16:9 preview screen inside showing the loaded image, the playing video, or a cover-art placeholder for audio items.

the faceplate

archivistplay_triggergateimageimagevideovideoaudio_laudioaudio_raudioloadedgateendedgateplayinggateplayheadcvaudiocvgatepitch
1 inputs · 8 outputs · 2 params

inputs

idcablewhat it does
play_triggergateGate 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

idcablewhat it does
imageimageImage-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
videovideoVideo-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_laudioLeft 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_raudioRight 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
loadedgateTrigger 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
endedgateTrigger 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
playinggateGate 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)
playheadcvCV out: the normalized 0..1 playback position of the loaded time-media item, updated each frame while playing/seeking.
control voltage (CV)

params

idlabelrangedefaultcurve
gainGain0..2linear
cv_play_triggerPlay trigger0..10linear

controls

controlwhat it does
Play triggerSynthetic 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.
GainOutput 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.

Generated from packages/web/src/lib/{audio,video}/module-registry.ts · repo