2026-03-19 23:10:12 -07:00
2026-03-19 23:10:12 -07:00
2026-03-19 23:10:12 -07:00
2026-03-19 23:10:12 -07:00
2026-03-19 23:10:12 -07:00
2026-03-19 23:10:12 -07:00
2026-03-19 23:10:12 -07:00
2026-03-19 23:10:12 -07:00
2026-03-19 23:10:12 -07:00
2026-03-19 23:10:12 -07:00

ComfyUI-UCLADaily

By Jeffrey A. Brick · March 2026

A self-contained custom node pack for ComfyUI that aggregates daily news, events, and press releases from across the UCLA campus into lobby-ready TV displays.

Built for the lobby TV at 6401 Wilshire Blvd (UCLA Housing, Miracle Mile). Outputs a looping 1920x1080 MP4 for OBS → YouTube streaming.

Inspired by the Data Media Machine project. Built following the principles of the ComfyUI Custom Node Survival Guide.


What It Does

Fetches live data from 10 UCLA sources, renders two types of cards, and stitches them into a single MP4:

  • Lobby Summary Cards — one per source, 4 events each, dark theme teletext style
  • Deep Dive Cards — one per event with venue address, enriched description, QR code, procedural geometric art, factual institutional context, and dynamic font sizing

Nodes

Node Description
UCLADailyDataInit Initializes the UCLA_DATA pipeline structure
UCLAMedFetch Health & Behavior news via Newsroom RSS
UCLAFilmArchiveFetch Film & TV content filtered from Newsroom RSS
UCLAFowlerFetch Fowler Museum events via HTML scrape
UCLAArtsFetch Arts & Culture news via Newsroom RSS
UCLANewsroomFetch Any of 11 UCLA Newsroom RSS categories
UCLACSFetch UCLA Computer Science events
UCLAHammerFetch Hammer Museum events via HTML scrape
UCLASEISFetch School of Education events
UCLAEventbriteFetch UCLA Eventbrite events
UCLAHousingInfo Housing info for Wilshire Apartments
UCLANarrator LLM-ready narration formatter
UCLALobbyCard Renders 1920x1080 lobby summary cards
UCLADeepDiveCard Renders 1920x1080 deep dive detail cards
UCLADeepDiveBatch Batch renders all deep dives as a tensor
UCLASlideshowExport Stitches cards into MP4 with fade transitions
UCLADailyPulse Compiles all data into a formatted report

Pipeline

DataInit → Fetchers (chain any combination) → LobbyCard / DeepDiveCard → SlideshowExport

All fetchers accept and return UCLA_DATA, so they can be chained in any order.

Standalone MP4 Generator

For OBS workflows, skip the ComfyUI GUI entirely:

cd ComfyUI/custom_nodes/ComfyUI-UCLADaily
python generate_obs.py

Outputs ComfyUI/UCLADAILYOUTPUT/UCLADaily_OBS.mp4 — 12 seconds per card, crossfade transitions, ~10 minutes total. Point OBS Media Source at it with loop enabled.

Deep Dive Card Features

  • Dynamic font sizing — description text scales from 72pt down to 38pt, picks the largest size that fits
  • Venue address database — 20+ UCLA venues mapped to real street addresses
  • Description enrichment — fetches og:description from event detail pages
  • Procedural geometric art — category-aware patterns (film strips, constellations, ripples, hexagons, etc.)
  • QR codes — scannable link to event detail page
  • Factual context — university-level institutional info, not marketing fluff

Data Sources

All public, no API keys needed:

  • UCLA Newsroom RSS (11 category feeds)
  • Hammer Museum (HTML scrape)
  • Fowler Museum (HTML scrape)
  • UCLA CS Events (HTML scrape)
  • UCLA SEIS Events (HTML scrape)
  • Eventbrite UCLA (JSON API)
  • UCLA Housing (built-in data)

Installation

cd ComfyUI/custom_nodes
git clone https://github.com/jbrick2070/ComfyUI-UCLADaily.git
pip install qrcode pillow requests

Restart ComfyUI. Nodes appear under the UCLA Daily category.

Testing

cd ComfyUI-UCLADaily
python test_fetch.py

Runs a 16-step integration test: data init, all fetchers, lobby cards, deep dive cards, batch rendering.

Survival Guide Compliance

Every node follows the ComfyUI Custom Node Survival Guide:

  • Custom type UCLA_DATA prevents accidental cross-wiring
  • IS_CHANGED returns time.time() — forces fresh data every queue run
  • Only stdlib at module scope — heavy imports deferred inside functions
  • NODE_CLASS_MAPPINGS keys are permanent — treated as public API
  • Shared http_utils with requests→urllib fallback for zero-dependency operation
  • Graceful error handling — fetch failures log to errors[] without crashing
  • Unicode cleanup — fixes mojibake from RSS feeds (curly quotes, em dashes, etc.)

License

MIT

S
Description
No description provided
Readme
90 KiB
Languages
Python 100%