From dd5165579258ab8d1cfa73c7fb86cb2b0c8ad859 Mon Sep 17 00:00:00 2001 From: JL Kruger Date: Sat, 28 Mar 2026 14:22:02 +0200 Subject: [PATCH] =?UTF-8?q?Add=20Watchlists=20section=20=E2=80=94=20hub,?= =?UTF-8?q?=205=20collection=20pages,=20build=20pipeline?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - watchlists-hub.html: comic book panel grid, neon-teal/green/toucan palette, Rambla-only type hierarchy, CSS stagger entrance, wired to star map - 5 collection pages built from *-watchlist.md sources via build.py: contentaddictionarchive, analogfrontier, culturaldecay, soundscapeanomalies, lastcinema - build.py: parses MD files, generates self-contained HTML pages, updates hub subtitle with live counts - index.html: Watchlists star node wired to Watchlists/watchlists-hub.html Co-Authored-By: Claude Sonnet 4.6 --- Watchlists/AnalogFrontier-watchlist.md | 30 ++ Watchlists/CulturalDecay-watchlist.md | 30 ++ Watchlists/SoundscapeAnomalies-watchlist.md | 33 ++ Watchlists/TheLastCinema-watchlist.md | 27 + Watchlists/analogfrontier.html | 436 ++++++++++++++++ Watchlists/build.py | 520 ++++++++++++++++++++ Watchlists/contentaddictionarchive.html | 451 +++++++++++++++++ Watchlists/culturaldecay.html | 436 ++++++++++++++++ Watchlists/lastcinema.html | 421 ++++++++++++++++ Watchlists/soundscapeanomalies.html | 451 +++++++++++++++++ Watchlists/watchlist-template.html | 505 +++++++++++++++++++ Watchlists/watchlists-hub.html | 257 ++++++++++ index.html | 2 +- 13 files changed, 3598 insertions(+), 1 deletion(-) create mode 100644 Watchlists/AnalogFrontier-watchlist.md create mode 100644 Watchlists/CulturalDecay-watchlist.md create mode 100644 Watchlists/SoundscapeAnomalies-watchlist.md create mode 100644 Watchlists/TheLastCinema-watchlist.md create mode 100644 Watchlists/analogfrontier.html create mode 100644 Watchlists/build.py create mode 100644 Watchlists/contentaddictionarchive.html create mode 100644 Watchlists/culturaldecay.html create mode 100644 Watchlists/lastcinema.html create mode 100644 Watchlists/soundscapeanomalies.html create mode 100644 Watchlists/watchlist-template.html create mode 100644 Watchlists/watchlists-hub.html diff --git a/Watchlists/AnalogFrontier-watchlist.md b/Watchlists/AnalogFrontier-watchlist.md new file mode 100644 index 0000000..96b6749 --- /dev/null +++ b/Watchlists/AnalogFrontier-watchlist.md @@ -0,0 +1,30 @@ +# The Analog Frontier + +--- + +>>on-first-load - lightbox - "Before everything was a file, sound was a voltage. Before everything was a stream, images were magnetic. The analog world didn't disappear — it got archived, obsessed over, and loved harder by the people who understood what was lost. This is a collection of playlists about those machines, that music, and the humans who still speak their language." + +--- + +- **Electronic Music And Synthesizer Documentaries \- YouTube** + - URL: https://www.youtube.com/playlist?list=PL9IOjFRFjrOlaSN20n8BVup9Sw5pECF_N + +- **Vintage Synth Music \- YouTube** + - URL: https://www.youtube.com/playlist?list=PL705B75747F552D89 + +- **Kosmische Wellen \- YouTube** + - URL: https://www.youtube.com/playlist?list=PLTESZvBAvs-21WEss2-tAc88YUVJvbHjt + +- **Analog Synths \- YouTube** + - URL: https://www.youtube.com/playlist?list=PLGPon0XahgRzdHHRcXIXOTYncuiTmihTQ + +- **Video Synth \- YouTube** + - URL: https://www.youtube.com/playlist?list=PLnwRAEdhoHKvgCHahY_Geef80sn98Q1yq + +- **Analog Ambient: Warm Synths \- YouTube** + - URL: https://www.youtube.com/playlist?list=PLSui2JfAn3uzFXSPuBOFdyUMOhjSQK_0O + +- **Old Hi-Tech \- YouTube** + - URL: https://www.youtube.com/playlist?list=PL1Qu_o1uczDrmRp0aaTDPfIChzMG3BsnG + +--- diff --git a/Watchlists/CulturalDecay-watchlist.md b/Watchlists/CulturalDecay-watchlist.md new file mode 100644 index 0000000..19606e4 --- /dev/null +++ b/Watchlists/CulturalDecay-watchlist.md @@ -0,0 +1,30 @@ +# Cultural Decay Observations + +--- + +>>on-first-load - lightbox - "The internet ate the 20th century and we watched it happen in real time. The video essay form — someone with a camera and a thesis, talking into the void — became the literature of my generation. These are the playlists I return to when I want to understand the shape of the thing we're all living inside. Criticism as a survival skill." + +--- + +- **Internet Analysis, by tiffanyferg \- YouTube** + - URL: https://www.youtube.com/playlist?list=PLeYBqpyQVyaYqtBAfbNy6d_xtxcrjCVy6 + +- **Internet Girl Mythology: Pop Culture & Digital Dissected \- YouTube** + - URL: https://www.youtube.com/playlist?list=PLkTkIkgJg3GsmoEsh4a9-YRUuZtHNr0w9 + +- **Essays: Media & Pop Culture \- YouTube** + - URL: https://www.youtube.com/playlist?list=PLa8L4_jjaB62-j89zcyfQ_ZV7bVceMSDB + +- **Media & Pop Culture Analysis \- YouTube** + - URL: https://www.youtube.com/playlist?list=PLJQUAVYdQ53t3hqA1t1hNcWrrZT5sGMfj + +- **Video Essays \(Solar Sands\) \- YouTube** + - URL: https://www.youtube.com/playlist?list=PLgp6-KTN0LyAkDMmtGROSmer8IpL7kUSd + +- **Media Video Essays \- YouTube** + - URL: https://www.youtube.com/playlist?list=PLK5fE38XOCnpWSvoxMNL8igQxPZlAi4_F + +- **Actually Interesting Video Essays \- YouTube** + - URL: https://www.youtube.com/playlist?list=PLbOF9TQmQrNgWHaLCPaE81l4hEL-2Rrjf + +--- diff --git a/Watchlists/SoundscapeAnomalies-watchlist.md b/Watchlists/SoundscapeAnomalies-watchlist.md new file mode 100644 index 0000000..c0a0ced --- /dev/null +++ b/Watchlists/SoundscapeAnomalies-watchlist.md @@ -0,0 +1,33 @@ +# Soundscape Anomalies + +--- + +>>on-first-load - lightbox - "There are sounds that shouldn't exist in the arrangements they appear in. Dark ambient. Ritual drone. Frequencies that feel like memory. I use this music for thinking, for deep work, for the hours before sleep when the brain needs to be occupied but not led. It doesn't have melody in the pop sense. It has texture. Atmosphere. Intention." + +--- + +- **Ritual, Drone & Dark Ambient Full Albums \- YouTube** + - URL: https://www.youtube.com/playlist?list=PLN_G7yTx9SXeR047RrbIuhsJFBeBZHaeO + +- **Frozen Echoes: Dark Ambient Meets Drone Textures \- YouTube** + - URL: https://www.youtube.com/playlist?list=PLnPbOOvxxh-cJNVhhQ05TldMrNv_ycNPW + +- **Dark Ambient Soundscapes & Industrial Noise Music \- YouTube** + - URL: https://www.youtube.com/playlist?list=PLg0P6LepONgLmkrXUQpIBjnvYoi_lolo0 + +- **The Sound of Isolation: Dark Ambient and Drone \- YouTube** + - URL: https://www.youtube.com/playlist?list=PLAsJFJTfcTKP-eGc0S6EbCfSoctELYM7t + +- **Misery Loves Company: Meditative Drone Atmospheres \- YouTube** + - URL: https://www.youtube.com/playlist?list=PLezayui57fOezxQBXfB0YIvM2EgSFdoZO + +- **Tribal Ambient: Shamanic Drumming & Deep Soundscapes \- YouTube** + - URL: https://www.youtube.com/playlist?list=PLCwOPk7IsaoA61VHcHD8M3rb5dRcLm7Dy + +- **Obstinator Dark Ambient \- YouTube** + - URL: https://www.youtube.com/playlist?list=PLNPzbTO0Qe116YhIxNIj083qeTlMpD32e + +- **Le Ombre del Non-Essere \- YouTube** + - URL: https://www.youtube.com/playlist?list=PLgvBz-Cwkzii_UJNJcU0Qtr5Gzu6tG66T + +--- diff --git a/Watchlists/TheLastCinema-watchlist.md b/Watchlists/TheLastCinema-watchlist.md new file mode 100644 index 0000000..bd641c6 --- /dev/null +++ b/Watchlists/TheLastCinema-watchlist.md @@ -0,0 +1,27 @@ +# The Last Cinema + +--- + +>>on-first-load - lightbox - "Short films are the ones that got away. The feature film has a machine behind it — financing, distribution, marketing. The short film has a person behind it, usually broke, always obsessed. This collection is experimental work, avant-garde work, cult films, archive footage — cinema that exists outside the machine. Watch them when you have 10 minutes and a reason to feel something strange." + +--- + +- **Experimental, Avant-Garde & Surreal Short Films \- YouTube** + - URL: https://www.youtube.com/playlist?list=PLx8zUw4PoWHgqy5bD0HcuuTgVqPOSNrHn + +- **Films: Cult Movies \- YouTube** + - URL: https://www.youtube.com/playlist?list=PLqqTsphh57d5czFm-bK404ripWFI-2a8c + +- **A History of Unique Visual Art \(Mega Compilation\) \- YouTube** + - URL: https://www.youtube.com/playlist?list=PLHPWDhsjb4ZFGV_3ezZHcQ142HwppW--Y + +- **Loops \- YouTube** + - URL: https://www.youtube.com/playlist?list=PLSpz5qTrO-GnziQviNzmarSRpTbe8OcgQ + +- **Movies \(Homerecorded Delicatessens\) \- YouTube** + - URL: https://www.youtube.com/playlist?list=PLo16qa3p5doyYLVw4JCm7bGBH7nf4vLnV + +- **Archives \- YouTube** + - URL: https://www.youtube.com/playlist?list=PLjf4Mu2Zp3kYtBZB38-huwZA3DJaIcGN_ + +--- diff --git a/Watchlists/analogfrontier.html b/Watchlists/analogfrontier.html new file mode 100644 index 0000000..69e2b90 --- /dev/null +++ b/Watchlists/analogfrontier.html @@ -0,0 +1,436 @@ + + + + + + THE ANALOG FRONTIER | WATCHLISTS + + + + + + + + + + +
+ +
+
+

ELECTRONIC MUSIC AND SYNTHESIZER DOCUMENTARIES

+ PANEL 01 +
+
+ +
+
+ +
+
+

VINTAGE SYNTH MUSIC

+ PANEL 02 +
+
+ +
+
+ +
+
+

KOSMISCHE WELLEN

+ PANEL 03 +
+
+ +
+
+ +
+
+

ANALOG SYNTHS

+ PANEL 04 +
+
+ +
+
+ +
+
+

VIDEO SYNTH

+ PANEL 05 +
+
+ +
+
+ +
+
+

ANALOG AMBIENT: WARM SYNTHS

+ PANEL 06 +
+
+ +
+
+ +
+
+

OLD HI-TECH

+ PANEL 07 +
+
+ +
+
+
+ + + + + diff --git a/Watchlists/build.py b/Watchlists/build.py new file mode 100644 index 0000000..836740e --- /dev/null +++ b/Watchlists/build.py @@ -0,0 +1,520 @@ +#!/usr/bin/env python3 +""" +Watchlists build script. + +For each *-watchlist.md in this folder: + - Parse title, optional first-load lightbox, and playlist entries + - Generate a self-contained HTML page + +Then update watchlists-hub.html subtitle with current totals. + +Output filenames: strip '-watchlist' suffix, lowercase the stem, no hyphens/spaces. + ContentAddictionArchive-watchlist.md → contentaddictionarchive.html + AnalogFrontier-watchlist.md → analogfrontier.html + etc. + +Run after adding or editing any *-watchlist.md file. +""" + +import re +from pathlib import Path +from html import escape + +HERE = Path(__file__).parent +HUB = HERE / "watchlists-hub.html" + +COLORS = ["teal", "green", "toucan"] # rotation order + +ALLOW = ( + "accelerometer; autoplay; clipboard-write; " + "encrypted-media; gyroscope; picture-in-picture; web-share" +) + +# ── MD parsing ──────────────────────────────────────────────────────────────── + +def slug_from_path(path: Path) -> str: + stem = path.stem # e.g. "AnalogFrontier-watchlist" + stem = re.sub(r'-watchlist$', '', stem, flags=re.IGNORECASE) + return stem.lower().replace('-', '').replace('_', '').replace(' ', '') + + +def parse_md(path: Path) -> dict: + text = path.read_text(encoding='utf-8') + + # Title: first # heading + m = re.search(r'^#\s+(.+)$', text, re.MULTILINE) + title = m.group(1).strip() if m else path.stem + + # Optional lightbox: >>on-first-load - lightbox - "text" + m = re.search(r'>>on-first-load\s+-\s+lightbox\s+-\s+"([^"]+)"', text) + lightbox = m.group(1).strip() if m else None + + # Playlist entries + # - **Name \- YouTube** + # - URL: https://www.youtube.com/playlist?list=PLxxxxxx + playlists = [] + for m in re.finditer( + r'-\s+\*\*(.+?)\s*\\-\s*YouTube\*\*\s*\n\s+-\s+URL:\s+(https://[^\s]+)', + text + ): + name = m.group(1).strip() + url = m.group(2).strip() + lid = re.search(r'[?&]list=([A-Za-z0-9_-]+)', url) + if lid: + playlists.append({'name': name, 'list_id': lid.group(1)}) + + return {'title': title, 'lightbox': lightbox, 'playlists': playlists} + + +# ── HTML generation ─────────────────────────────────────────────────────────── + +def build_lightbox_html(text: str, slug: str) -> tuple[str, str]: + """Return (lightbox_div_html, lightbox_js_html). Empty strings if no lightbox.""" + if not text: + return '', '' + + safe = escape(text) + div = f""" + """ + + js = f""" + // Lightbox: show on first load + const lightbox = document.getElementById('lightbox'); + if (!localStorage.getItem('watchlist-{slug}-seen')) {{ + lightbox.style.display = 'flex'; + localStorage.setItem('watchlist-{slug}-seen', '1'); + }} + + function closeLightbox() {{ lightbox.style.display = 'none'; }} + + lightbox.addEventListener('click', (e) => {{ + if (e.target === lightbox) closeLightbox(); + }}); + document.getElementById('caption-close').addEventListener('click', closeLightbox); + document.addEventListener('keydown', (e) => {{ + if (e.key === 'Escape') closeLightbox(); + }}); +""" + return div, js + + +def build_panels_html(playlists: list) -> str: + panels = [] + for i, pl in enumerate(playlists): + color = COLORS[i % len(COLORS)] + num = f"PANEL {i+1:02d}" + embed_url = f"https://www.youtube.com/embed/videoseries?list={pl['list_id']}" + title_esc = escape(pl['name'].upper()) + + panels.append(f""" +
+
+

{title_esc}

+ {num} +
+
+ +
+
""") + + return '\n'.join(panels) + + +def build_stagger_css(count: int) -> str: + lines = [] + for i in range(1, count + 1): + delay = (i - 1) * 60 + lines.append( + f" .playlist-panel:nth-child({i}) {{ animation-delay: {delay}ms; }}" + ) + return '\n'.join(lines) + + +def generate_html(data: dict, slug: str) -> str: + title = data['title'] + playlists = data['playlists'] + count = len(playlists) + title_upper = title.upper() + count_label = f"{count} PLAYLIST{'S' if count != 1 else ''}" + + lightbox_div, lightbox_js = build_lightbox_html(data['lightbox'], slug) + panels_html = build_panels_html(playlists) + stagger_css = build_stagger_css(count) + + # Lightbox CSS block (only if there's a lightbox) + lightbox_css = """ + /* ── Lightbox ── */ + #lightbox { + position: fixed; + inset: 0; + background: rgba(4, 6, 11, 0.92); + display: none; + justify-content: center; + align-items: center; + z-index: 2000; + padding: 2rem; + cursor: pointer; + } + + .caption-box { + background: #080d10; + border: 2px solid var(--wl-teal); + border-top: 10px solid var(--wl-toucan); + border-left: 6px solid var(--wl-green); + max-width: 640px; + width: 100%; + max-height: 90vh; + overflow-y: auto; + padding: 2rem 2rem 1.5rem; + position: relative; + cursor: default; + } + + .caption-close { + position: absolute; + top: 0.6rem; + right: 0.75rem; + background: none; + border: none; + color: var(--wl-teal); + font-family: 'Rambla', sans-serif; + font-size: 1.6rem; + font-weight: 700; + line-height: 1; + cursor: pointer; + padding: 0.1rem 0.3rem; + transition: color 100ms ease; + } + + .caption-close:hover { color: var(--wl-toucan); } + + .caption-text { + font-style: italic; + font-size: 1.05rem; + color: var(--text-warm); + margin-bottom: 1.25rem; + line-height: 1.65; + padding-right: 1.5rem; + } + + .dismiss-hint { + font-weight: 700; + text-transform: uppercase; + font-size: 0.62rem; + letter-spacing: 0.18em; + color: var(--muted); + text-align: center; + margin-top: 1.25rem; + } +""" if data['lightbox'] else '' + + return f""" + + + + + {escape(title_upper)} | WATCHLISTS + + + + + + + + +{lightbox_div} +
+{panels_html} +
+ + + + + +""" + + +# ── Hub subtitle update ─────────────────────────────────────────────────────── + +def update_hub_subtitle(collection_count: int, playlist_total: int): + hub_text = HUB.read_text(encoding='utf-8') + subtitle = ( + f'
' + f'{collection_count} COLLECTION{"S" if collection_count != 1 else ""}' + f' · CURATED VIDEO ARCHIVES' + f' · {playlist_total} PLAYLIST{"S" if playlist_total != 1 else ""}' + f'
' + ) + hub_text = re.sub( + r'.*?', + f'{subtitle}', + hub_text, + flags=re.DOTALL + ) + HUB.write_text(hub_text, encoding='utf-8') + + +# ── Main ────────────────────────────────────────────────────────────────────── + +def main(): + md_files = sorted(HERE.glob('*-watchlist.md')) + if not md_files: + print("No *-watchlist.md files found.") + return + + total_playlists = 0 + + for md_path in md_files: + slug = slug_from_path(md_path) + out = HERE / f"{slug}.html" + + data = parse_md(md_path) + count = len(data['playlists']) + + if count == 0: + print(f" SKIP {md_path.name} — no playlists found") + continue + + html = generate_html(data, slug) + out.write_text(html, encoding='utf-8') + total_playlists += count + print(f" BUILD {out.name} — {data['title']} ({count} playlists)") + + update_hub_subtitle(len(md_files), total_playlists) + print(f"\nUpdated hub subtitle — {len(md_files)} collections, {total_playlists} playlists total") + + +if __name__ == '__main__': + main() diff --git a/Watchlists/contentaddictionarchive.html b/Watchlists/contentaddictionarchive.html new file mode 100644 index 0000000..bebfba4 --- /dev/null +++ b/Watchlists/contentaddictionarchive.html @@ -0,0 +1,451 @@ + + + + + + AND ARCHIVE OF THE END OF MY ADDICTION | WATCHLISTS + + + + + + + + + + +
+ +
+
+

MUSICAL MEANDERINGS

+ PANEL 01 +
+
+ +
+
+ +
+
+

FOOD CURIOS

+ PANEL 02 +
+
+ +
+
+ +
+
+

CURIOSITIES

+ PANEL 03 +
+
+ +
+
+ +
+
+

BAN CAN WATCH QUEUE

+ PANEL 04 +
+
+ +
+
+ +
+
+

NEW WATCH QUEUE

+ PANEL 05 +
+
+ +
+
+ +
+
+

UNSORTED MIXES

+ PANEL 06 +
+
+ +
+
+ +
+
+

WATCH IT AGAIN FROM TIME TO TIME

+ PANEL 07 +
+
+ +
+
+ +
+
+

MISCELLANY

+ PANEL 08 +
+
+ +
+
+
+ + + + + diff --git a/Watchlists/culturaldecay.html b/Watchlists/culturaldecay.html new file mode 100644 index 0000000..7fcad4f --- /dev/null +++ b/Watchlists/culturaldecay.html @@ -0,0 +1,436 @@ + + + + + + CULTURAL DECAY OBSERVATIONS | WATCHLISTS + + + + + + + + + + +
+ +
+
+

INTERNET ANALYSIS, BY TIFFANYFERG

+ PANEL 01 +
+
+ +
+
+ +
+
+

INTERNET GIRL MYTHOLOGY: POP CULTURE & DIGITAL DISSECTED

+ PANEL 02 +
+
+ +
+
+ +
+
+

ESSAYS: MEDIA & POP CULTURE

+ PANEL 03 +
+
+ +
+
+ +
+
+

MEDIA & POP CULTURE ANALYSIS

+ PANEL 04 +
+
+ +
+
+ +
+
+

VIDEO ESSAYS \(SOLAR SANDS\)

+ PANEL 05 +
+
+ +
+
+ +
+
+

MEDIA VIDEO ESSAYS

+ PANEL 06 +
+
+ +
+
+ +
+
+

ACTUALLY INTERESTING VIDEO ESSAYS

+ PANEL 07 +
+
+ +
+
+
+ + + + + diff --git a/Watchlists/lastcinema.html b/Watchlists/lastcinema.html new file mode 100644 index 0000000..355541e --- /dev/null +++ b/Watchlists/lastcinema.html @@ -0,0 +1,421 @@ + + + + + + THE LAST CINEMA | WATCHLISTS + + + + + + + + + + +
+ +
+
+

EXPERIMENTAL, AVANT-GARDE & SURREAL SHORT FILMS

+ PANEL 01 +
+
+ +
+
+ +
+
+

FILMS: CULT MOVIES

+ PANEL 02 +
+
+ +
+
+ +
+
+

A HISTORY OF UNIQUE VISUAL ART \(MEGA COMPILATION\)

+ PANEL 03 +
+
+ +
+
+ +
+
+

LOOPS

+ PANEL 04 +
+
+ +
+
+ +
+
+

MOVIES \(HOMERECORDED DELICATESSENS\)

+ PANEL 05 +
+
+ +
+
+ +
+
+

ARCHIVES

+ PANEL 06 +
+
+ +
+
+
+ + + + + diff --git a/Watchlists/soundscapeanomalies.html b/Watchlists/soundscapeanomalies.html new file mode 100644 index 0000000..8e09966 --- /dev/null +++ b/Watchlists/soundscapeanomalies.html @@ -0,0 +1,451 @@ + + + + + + SOUNDSCAPE ANOMALIES | WATCHLISTS + + + + + + + + + + +
+ +
+
+

RITUAL, DRONE & DARK AMBIENT FULL ALBUMS

+ PANEL 01 +
+
+ +
+
+ +
+
+

FROZEN ECHOES: DARK AMBIENT MEETS DRONE TEXTURES

+ PANEL 02 +
+
+ +
+
+ +
+
+

DARK AMBIENT SOUNDSCAPES & INDUSTRIAL NOISE MUSIC

+ PANEL 03 +
+
+ +
+
+ +
+
+

THE SOUND OF ISOLATION: DARK AMBIENT AND DRONE

+ PANEL 04 +
+
+ +
+
+ +
+
+

MISERY LOVES COMPANY: MEDITATIVE DRONE ATMOSPHERES

+ PANEL 05 +
+
+ +
+
+ +
+
+

TRIBAL AMBIENT: SHAMANIC DRUMMING & DEEP SOUNDSCAPES

+ PANEL 06 +
+
+ +
+
+ +
+
+

OBSTINATOR DARK AMBIENT

+ PANEL 07 +
+
+ +
+
+ +
+
+

LE OMBRE DEL NON-ESSERE

+ PANEL 08 +
+
+ +
+
+
+ + + + + diff --git a/Watchlists/watchlist-template.html b/Watchlists/watchlist-template.html new file mode 100644 index 0000000..a57da80 --- /dev/null +++ b/Watchlists/watchlist-template.html @@ -0,0 +1,505 @@ + + + + + + AND ARCHIVE OF THE END OF MY ADDICTION | WATCHLISTS + + + + + + + + + + + +
+ +
+
+

MUSICAL MEANDERINGS

+ PANEL 01 +
+
+ +
+
+ +
+
+

FOOD CURIOS

+ PANEL 02 +
+
+ +
+
+ +
+
+

CURIOSITIES

+ PANEL 03 +
+
+ +
+
+ +
+
+

BAN CAN WATCH QUEUE

+ PANEL 04 +
+
+ +
+
+ +
+
+

NEW WATCH QUEUE

+ PANEL 05 +
+
+ +
+
+ +
+
+

UNSORTED MIXES

+ PANEL 06 +
+
+ +
+
+ +
+
+

WATCH IT AGAIN FROM TIME TO TIME

+ PANEL 07 +
+
+ +
+
+ +
+
+

MISCELLANY

+ PANEL 08 +
+
+ +
+
+ +
+ + + + + diff --git a/Watchlists/watchlists-hub.html b/Watchlists/watchlists-hub.html new file mode 100644 index 0000000..5ffebdd --- /dev/null +++ b/Watchlists/watchlists-hub.html @@ -0,0 +1,257 @@ + + + + + + WATCHLISTS | SINGULAR PARTICULAR + + + + + + + +
+ ← SPACE +

WATCHLISTS

+
5 COLLECTIONS · CURATED VIDEO ARCHIVES · 36 PLAYLISTS
+
+ +
+ + + +
+

AND ARCHIVE OF THE END OF MY ADDICTION

+
+
+ 8 PLAYLISTS +

A record of a long war with content addiction.

+
+
+ + + +
+

THE ANALOG FRONTIER

+
+
+ 7 PLAYLISTS +

Early digital artifacts and salvaged broadcast media.

+
+
+ + +
+

CULTURAL DECAY OBSERVATIONS

+
+
+ 7 PLAYLISTS +

Documenting the slow collapse of 20th century aesthetics.

+
+
+ + +
+

SOUNDSCAPE ANOMALIES

+
+
+ 8 PLAYLISTS +

Frequencies that feel like memory. Sound at the edge of perception.

+
+
+ + +
+

THE LAST CINEMA

+
+
+ 6 PLAYLISTS +

Short films found in the wreckage of the old world.

+
+
+ +
+ + + diff --git a/index.html b/index.html index 63dfbf3..4e76e21 100644 --- a/index.html +++ b/index.html @@ -694,7 +694,7 @@ body::after { { id: 'music', label: 'Music', sign: '♬', x: 12, y: 44, href: '' }, { id: 'images', label: 'Images', sign: '絵', x: 55, y: 35, href: 'Images/images.html' }, { id: 'playlists', label: 'Playlists', sign: '≡', x: 78, y: 50, href: 'Playlists/playlists.html' }, - { id: 'watchlists', label: 'Watchlists', sign: '視', x: 22, y: 66, href: '' }, + { id: 'watchlists', label: 'Watchlists', sign: '視', x: 22, y: 66, href: 'Watchlists/watchlists-hub.html' }, { id: 'toolsntoys', label: 'ToolsnToys', sign: '⚙', x: 50, y: 72, href: '' }, { id: 'creatorlists', label: 'Creatorlists', sign: '創', x: 75, y: 70, href: '' } ];