Skip to main content
🎛️

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

Every morning a script runs on one computer and, about an hour later, two 3D anchors read the day’s self-driving news. 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 cron job a day, on a Mac, with open-source models running locally.
  • Sources: publishers’ own RSS feeds, Google News, Hacker News and a few subreddits, filtered for self-driving relevance.
  • Every story is credited out loud and linked; the script may only say what the source summaries say.
  • Outputs: the 3D show, a podcast episode, an RSS feed, email notifications, and a Knowledge Base link on every story that has one.

The pipeline at a glance

Scrape → filter → cluster → summarise → pick → script → illustrate → voice → stage → publish. The first half is ordinary news-aggregation plumbing; the second half is where the machine has to write 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 three kinds of source. Publishers’ RSS feeds are the best, because they link straight to the article and the summariser can read the whole thing: transportation desks at technology outlets, an engineering magazine, and the blogs of the operators themselves, which are read as primary sources, not as news. Google News searches for the obvious terms fill in what the feeds miss. Hacker News and a few subreddits surface the stories engineers are arguing about.

Everything then passes a relevance filter: a story must mention self-driving, driverless, robotaxi, a named operator or a driver-assistance system, and it must not be about cruise ships, aircraft autopilots or robot vacuums. Broad outlets are gated harder than the specialist ones.

2. Cluster and summarise

Stories about the same event are grouped so the show can say “several outlets are reporting” instead of reading the same news three times. Each article is then summarised by a small local language model into a few neutral sentences, grounded strictly in the article’s text. 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 larger local model plays two roles in turn. As editor it picks the most interesting stories from the day’s menu, favouring real technical and regulatory news over event listings and rumours, and spreading the picks across outlets. As writer it produces the two-anchor script in a fixed reader-and-reactor form: one anchor reports a story from its summary and names the outlet; the other reacts in a line; they swap each story. The opening changes every night by design, because left alone the model settles into one greeting forever.

The rules that matter most are the ones about honesty: credit the outlet out loud, every story, no exceptions; report what the summary says and nothing it does not; no invented numbers, quotes or dates. After the draft is written, a checking pass compares each line against its source summary and sends back anything unsupported or any story that went uncredited.

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 street, a vehicle, a sensor, a depot, a piece of infrastructure. The scene writer is told never to show a person or a real brand, and every prompt the image model receives carries the same fixed rule on top: no people, no faces, no text, no logos. On the show page each picture is marked “AI illustration”.

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 photographs of what happened. If the picture step fails, the show airs without them.

5. Voices: local speech synthesis that listens to itself

The anchors’ voices are synthesised on the same machine with an open-source text-to-speech model, cloned from short reference clips so that Lane and Otto sound consistently like themselves. Speech synthesis fails quietly, by skipping or garbling a phrase, so every line is transcribed back to text by a speech-recognition model and compared to the script; a line that does not match is re-synthesised, and one that never passes is flagged for a human.

6. The studio: two models on a three.js set

The show page renders a small 3D studio in the browser: a desk, a backdrop screen that shows the current story’s image, and the two anchors, whose mouths are driven by the loudness of the line being spoken. 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, normalised 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.

What breaks

The two big models cannot share the machine’s memory at once, so the pipeline runs them one after another and a global lock stops a second run from starting while one is in flight. Feeds go quiet, change format or block bots. The summariser occasionally over-reads a headline; the checking pass catches most of that, not all. Speech synthesis has good days and bad days. 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, 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. Tell us at contact; the original reporting is always one click away for you to check us against.