Skip to main content
🎛️

How the Paranormal Daily Broadcast Is Made: An AI Newsroom on One Mac

Every day at 11 a.m. Eastern a script starts on one computer, and when it finishes, two glowing figures in a 3D studio read the day’s news about ghosts, cryptids, folklore and the unexplained. No newsroom, no cloud AI bill, no human in the loop except to fix what breaks. This is the whole pipeline, step by step, including the parts we are not proud of.

Quick facts

  • One scheduled run a day, at 11 a.m. Eastern, on a Mac, with open models running locally.
  • Sources: publishers’ own RSS feeds, Google News, Hacker News and a handful of subreddits, filtered for ghosts, hauntings, cryptids, folklore and the unexplained.
  • Two original anchors: Vesper, the believer, and Hollis, the skeptic. Claims are reported as claims, never as fact.
  • Every story is credited out loud and linked; the script is written only from the source summaries, and its numbers and quotations are checked against them.
  • Outputs: a show of about four minutes, a podcast episode, an RSS feed, email notifications, and a Knowledge Base link on every story that has one.

The pipeline at a glance

Gather → filter → summarize → group → pick → script → illustrate → voice → stage → publish. The first half is ordinary news-aggregation plumbing; the second half is where the machine has to write, paint and speak, and where most of the design effort went.

1. Sources: where the news comes from

The site’s own scheduler pulls the day’s stories from four kinds of source. Publishers’ RSS feeds are the best, because they link straight to the article and the summarizer can read the whole thing: a guide to the world’s curious places, popular-science, history and general-interest magazines, a skeptics’ magazine and a public broadcaster’s news feed. None of them covers only the paranormal, so every item from those feeds has to pass a relevance check. Google News searches fill in what the feeds miss; they use phrases such as “ghost sighting” rather than bare words, because “ghost” on its own brings in ghost kitchens and ghosting, and they avoid “haunting”, which is mostly an adjective in a review. Hacker News occasionally surfaces the science of the uncanny, which is exactly the skeptic’s material. Three subreddits, about the paranormal, cryptozoology and folklore, bring in first-hand accounts.

To get through, a story has to name the subject: a haunted place or a reported haunting, a poltergeist, an apparition, a séance, a named cryptid such as Bigfoot or the Loch Ness Monster, folklore or an urban legend, or something reported as unexplained. The subreddits are on topic by definition, so they skip that test. Then everything, from every source, is dropped if it is really about something else: ghost guns, ghost kitchens, ghost towns and ghostwriters; ticketed haunted attractions and hayrides; Halloween costumes, parties and candy; a sandwich, a beer or a fun run named after Bigfoot; reviews of films, shows, music and games; festivals, tours, talks and other event listings; sports teams; products for sale. A post in which someone may be describing a mental-health crisis rather than a strange event is dropped too: it is never broadcast as a haunting. UFO and alien stories are filtered out here too, and again by the editor, because this show covers ghosts, cryptids, folklore and the unexplained, and nothing else.

The filter is new and is still being tuned against real crawls. Some off-topic items will slip through; the editor below is the second net.

2. Summarize and group

Each article is summarized by a local language model into a short, neutral summary, grounded strictly in the material it is given. Where the full article cannot be fetched, as with Google News links and most Reddit posts, the summary is written from the headline and snippet alone, and is thinner for it. Stories about the same event are grouped so the show can say “several outlets are reporting” instead of reading the same news three times. The summaries are what everything downstream is allowed to know: the script writer never sees the raw web, only these.

3. The script: an editor and a writer, both the same model

A local language model plays two roles in turn. As editor it picks the day’s stories from the menu. It favors first-hand accounts with specifics (a place, a date, what was seen or heard), investigations and what they found, history and folklore with a real source, scientific explanations of strange experiences, and skeptics testing a claim, and it takes no more than two stories from any one outlet unless the day is too thin to fill the show otherwise. It is told to leave out Halloween events, haunted attractions and promotions, and other event listings; film, television, music and game reviews; real deaths or crimes framed as hauntings; anything that names or locates private people or their homes; anything about minors; posts in which someone may be describing a mental-health or medical crisis; anything sexual; medical or psychic-healing claims; mockery of living religions or traditions; and anything not in English.

As writer it produces a script for two anchors who are original characters: Vesper, the believer, who would love it to be true, and Hollis, the skeptic, who wants to see the evidence. One anchor reports a story from its summary and names the outlet; the other reacts in a line; they trade places story by story. The banter is meant to sound like someone who hopes talking to someone who checks: curious and kind, never mocking a witness, never breathless, never spooky for its own sake. The opening changes every day by design, because left alone the model settles into one greeting forever.

The rules that matter most are the ones about honesty. Claims are reported as claims (“witnesses say”, “the owners believe”), and the script may never state that a ghost, a creature or a power is real. Credit the outlet out loud, every story, no exceptions; report what the summary says and nothing it does not; no invented numbers, quotes, places or dates. After a draft is written, a checking pass compares every number and every quotation in it against that story’s summary. A draft that fails is rewritten, up to three drafts in all, and a sentence that still carries an unsupported figure or quote is cut before it can air. A story whose lines never name the outlet gets a credit added.

4. Pictures: one illustration per story, with nobody in it

While the language model is still loaded, it writes a short scene for each story, and a text-to-image model on the same Mac paints one illustrative still per story. The pictures stand for the story the way a newspaper illustration would: a place, an object, the weather, a trace left behind, such as an empty hallway, a misty shore or a lit window. The scene writer is told to suggest a presence with light, mist and stillness, never with a figure: no people, no ghost drawn as a person, no creature shown and never a brand. Every prompt the image model receives then carries the same fixed rule on top: no people, no faces, no text, no logos.

If a scene cannot be written, the story gets one of a handful of stock scenes rather than a picture made from its headline: headlines name people and companies, and in testing, pictures made from them came back with lookalike people, a logo and the headline itself painted into the sky. The pictures are illustrations, not evidence: they never show what anyone claims to have seen. If the picture step fails, the show airs without them.

5. Voices: local speech synthesis that listens to itself

Each anchor’s voice starts as a short reference clip synthesized by Kokoro-82M, an open-weight text-to-speech model released under the Apache 2.0 license, whose model card says it was trained only on permissively licensed or non-copyrighted audio. Vesper’s clip uses its American English voice af_heart and Hollis’s its British English voice bm_george, from a pinned model revision whose weights are checked against the hash the model card publishes. The show’s lines are then spoken on the same Mac by Chatterbox, an open-source text-to-speech model, which takes each anchor’s voice from those clips. Neither voice is a recording of a real person or designed to imitate one.

Speech synthesis fails quietly, by skipping or garbling a phrase, so every line is transcribed back to text by a small local Whisper speech-recognition model and compared with the script, and its pace is checked as well: a line that runs too fast has usually skipped words, and one that runs too slow has usually started spelling them out. A line that fails is synthesized again, up to three tries, and the best take is kept.

6. The studio: two glowing figures on a three.js set

The show page renders a small 3D studio in the browser: a desk with a glowing front edge, a dark wall, and the two anchors. Vesper and Hollis have no faces and no 3D models to download; each is a glowing silhouette built from a few simple shapes when the page loads, Vesper slender with a warm violet glow and Hollis broader with a cold cyan one. They speak by glowing brighter and nodding in time with the loudness of the line being played. While a story is being reported its picture is on screen, and the studio comes back for the reaction. Every line is captioned as it plays, and every story is listed under the player with its source. If the device cannot run the scene, the page falls back to audio with the same captions.

7. Publish: the podcast, the feeds, the email

Once the show has aired, the lines are mixed into a single episode with short stings between stories, brought to podcast loudness, tagged with cover art, and attached to the podcast feed. Subscribers who asked for email get a note that the show is up. The headlines feed and the OPML bundle update on their own, and each story’s page links to the original reporting and, where one fits, to a Knowledge Base article.

What breaks

The language model, the image model and the voice cannot share the machine’s memory, so the pipeline runs them one after another and shuts each down before the next starts. The same Mac runs other scheduled jobs, so a single lock lets only one of them use it at a time: a run that finds the machine busy waits up to an hour for its turn, and if it still cannot start, it gives up and emails the operator that the show did not run. Feeds go quiet, change format or block bots; several paranormal sites we wanted to read had no working feed at all.

The summarizer occasionally over-reads a headline, and the checking pass covers numbers and quotations, not names or places, so not everything wrong gets caught. Speech synthesis has good days and bad days: a line that fails all three tries still airs in its best take, and is listed in the run’s log for a human to check. A picture can fail, and the story airs without one; the operator hears about that too. And once in a while the machine simply does not wake up. When a run fails, the operator gets an email with the last forty lines of the log; if no show has aired two hours after the run was due to start, the site sends its own alert; and the previous day’s show stays up until the next one airs.

Corrections

When a broadcast says something its source did not, we correct the story page and note the correction there; the corrections policy has the details. Tell us at contact; the original reporting is always one click away for you to check us against.