Nodes/UCLA Daily/UCLA Daily: Narrator (Qwen2.5)
ComfyUI Node

UCLA Daily: Narrator (Qwen2.5)

Qwen2.5 rewrites your dry event list into something readable

By jbrick2070·Created 5 months ago·Updated 5 months ago· 0
UCLA Daily: Narrator (Qwen2.5)
    • narrated_text
    segment_text
    modelobby_card
    model_sizeQwen2.5-3B-Instruct
    unload_aftertrue

    UCLANarrator is the node that turns a dry, semi-colon'd event listing - "SCF 2026, Hammer Museum, Thu 7pm, Free" - into a sentence someone might actually read while waiting for an elevator. It's a local LLM rewriter built on Qwen2.5-Instruct, and it's the only node in the UCLA Daily pack that needs a model download, real VRAM, and the transformers stack. Everything else is stdlib and chill; this one is the heavyweight.

    The pack, by Jeffrey A. Brick, aggregates UCLA campus events and news into lobby-display cards and daily briefs. The Narrator slots between a fetcher's segment_text output and the UCLALobbyCard (or a morning-brief text node), so the LLM pass is optional - wire it in when you want the copy polished, bypass it when raw is fine.

    How it works

    It lazily loads a Qwen2.5-Instruct model in fp16 on CUDA via Hugging Face transformers - no API keys, fully local. First run downloads the model (2–14 GB depending on size), and the author's VRAM math is realistic: Qwen2.5-3B-Instruct ~6GB VRAM, Qwen2.5-7B-Instruct ~14GB. After generation it unloads the model and empties the CUDA cache by default (unload_after), specifically so downstream TTS/video nodes get their VRAM back. That load/unload dance is the survival-guide pattern the author describes as "learned the hard way."

    The prompt engineering is baked in per mode. lobby_card tells the model to keep all facts exact while adding one or two sentences of human interest, readable in 15–20 seconds, no emojis, no marketing. morning_brief produces smooth prose under 100 words for email or audio. There's even a guard against the classic LLM refusal outputs ("I cannot…", "as an AI…") - if the model refuses or fails to load, the node returns your original text unchanged. Graceful to the end.

    The inputs

    • segment_text - required; the raw text from any fetcher's segment_text output.
    • mode - enum: lobby_card (default), morning_brief, or passthrough (return unchanged - useful for testing the wiring).
    • model_size - Qwen2.5-3B-Instruct (default, ~6GB, faster) or Qwen2.5-7B-Instruct (~14GB, better).
    • unload_after - boolean, default true. Free VRAM after generation; disable only if chaining multiple Narrators.

    Output

    One: narrated_text - wire it into UCLALobbyCard's segment_text input or a text display.

    Install

    ComfyUI Manager → search UCLA Daily, or:

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

    Then the Narrator needs torch and transformers in your ComfyUI environment (usually already present), plus enough VRAM. Expect a multi-GB model download on first run.

    Common issues

    This is where people get burned. On a 8GB card, 7B in fp16 will OOM - stick to 3B or skip the node. First-run "download" can look like a hang; give it time. And remember it's an optional garnish, not the pipeline's engine - if VRAM is tight for the rest of your graph, drop the Narrator and let the raw segment_text hit the card. The lobby still looks fine, and you've saved yourself 6GB.

    CategoryUCLA Daily

    Inputs (4)

    NameTypeDefaultDescription
    segment_textSTRINGRaw segment text from any fetcher node's segment_text output.
    modeoptCOMBOlobby_cardlobby_card: punchy on-screen summaries. morning_brief: prose for email/audio. passthrough: return unchanged.
    model_sizeoptCOMBOQwen2.5-3B-Instruct3B: ~6GB VRAM, faster. 7B: ~14GB VRAM, better quality.
    unload_afteroptBOOLEANtrueFree VRAM after generation. Disable if chaining multiple narrator nodes.

    Outputs (1)

    NameTypeDescription
    narrated_textSTRING