Black Sheep Systems.
Chapter 1 · Overview

A news desk for people who go on camera

NewsDesk Studio collects gaming and technology news from the outlets you choose, groups the reporting of the same event into one story, works out how well that story is actually sourced, and gives you a place to read it, watch it, take notes on it and walk away with a running order.

What it is

It is a desktop application, not a website and not a feed reader with a fancy skin. It runs on your own machine, keeps its database on your own disk, and works without an account. Everything it knows comes from the feeds you point it at.

The difference between this and a reader is the grouping and the status. Twelve outlets running the same announcement is one story here, with twelve source tabs on it and a status that reflects who actually reported it first. You are never counting outlets by hand at eleven at night.

Who it is for

It was built for a gaming news show, and the working day it assumes looks like this: sit down, see what happened, read enough of it to know what is solid, write a line of your own on each item, put the ones you want in order, and export that order as a document you can read off while recording.

Anyone doing the same shape of work — a newsletter, a podcast, a weekly roundup, a community post — will find the same three panels useful. Nothing in the app assumes video.

The desk in one pass

Left

Story list

Every grouped story, colored by status, with filters, a search box and a sort. Refresh, Sources and Settings live at the bottom.

Center

Reader

One tab per outlet carrying the story. Article text stripped of the page furniture, with video played in place and controlled from a bar.

Right

Notes

A note per story and a single show prep pad, both rich text. The buttons underneath build the lineup and export it.

The window opens at 1600 by 950 and every panel width is adjustable, so the three columns hold up on a laptop as well as a second monitor.

Chapter 2 · Under the hood

How stories are built

Pressing Refresh News runs a five-stage pipeline. It usually takes a minute or two depending on how many feeds are active and which AI mode you are in. Progress appears in the status line at the bottom of the window.

The five stages

  1. Collect. Every active source in every active category is fetched. RSS and Atom feeds, plus Steam news for a specific game by its app ID. Reddit link posts are followed out to the article they point at, so a subreddit contributes the real story rather than a thread.
  2. Group. Articles covering the same event are clustered together. Titles and body text are embedded and compared, with a fuzzy title match as a second opinion, so "Blizzard announces…" from six outlets becomes one story with six sources.
  3. Classify. Each article is read and labeled: is it an announcement, reporting, a rumor, an opinion piece, a review, a guide or a deal? Which platforms, companies and franchise does it concern? This is the only stage an AI model touches.
  4. Score status. The status is computed from facts — the publisher tier you set and the number of outlets — never from the model's opinion. Chapter 3 covers the rules.
  5. Rank. Stories are ordered by the weight of the outlets carrying them, decayed by age, so this morning's single-outlet item does not outrank last night's confirmed announcement forever.

The five-day window

Stories older than five days drop out of the list. Three things keep one alive past that: starring it with Save Story, adding it to the lineup, or writing a note on it. Anything you have touched stays.

Reading while it works

The database is written in WAL mode, so a refresh running in the background does not lock you out of reading. You can keep working through it.

Working without a model

If no AI is configured, grouping falls back to title and word overlap and classification falls back to rules plus a small local classifier. The app still works. What you lose is precision: labels produced this way are marked internally and, as Chapter 3 explains, are never allowed to raise or lower a story's status.

Chapter 3 · The core idea

Status and trust

Every story carries one of six statuses. The point of the whole application is in this chapter: status is derived from who published something and how many outlets have it, both of which are facts, rather than from a model's guess about how official an article sounds.

The six statuses

  • confirmedThe company said it itself, or several outlets are carrying the same announcement.
  • corroboratedTwo or more outlets have the story, with no official word behind it.
  • credible rumorAn outlet is reporting a leak or unnamed sources.
  • single outletOne outlet has it and nobody else does.
  • unverifiedFan sites, forums or unknown sources only.
  • deniedYou marked it officially debunked.

Publisher tiers

Every source you add is given a tier. The tier is yours to set and is never inferred, which is what keeps status honest.

TierMeansExamples in the default list
1The company itselfXbox Wire, PlayStation Blog, a game's Steam news, Microsoft Blog, NVIDIA Blog
2Established outletIGN, GameSpot, Eurogamer, VGC, Polygon, GamesIndustry.biz, Ars Technica, The Verge
3Smaller or specialist siteNintendo Life, Wowhead News
4Aggregator or communityr/Games, r/GamingLeaksAndRumours, Hacker News

How status is decided

SituationStatus
A tier 1 publisher has itconfirmed
Rumor substance, carried by any tier 2 outletcredible rumor
An announcement carried by two or more tier 2 outletsconfirmed
Two or more tier 2 outlets on the storycorroborated
One tier 2 outlet onlysingle outlet
Tier 3 and 4 onlyunverified

A single outlet's word never earns confirmed. One outlet repeating a company press line is still one outlet, and the app exists to not overstate confidence. The two thresholds in that table — how many outlets an announcement needs, and how many a story needs to count as corroborated — are configurable, with a default of two each.

Why the model cannot inflate a status

The model is asked one question only: what kind of article is this? It is never asked whether something is official, because that question mixes a fact you already own — who published it — with a judgment about the text, and every model drew that line in a different place.

Two further guards sit on top:

  • If a model could not point at real words in the article to support its label, that label is dropped and the story's status rests on tier and corroboration alone.
  • Labels produced by the rule set or the small local classifier never raise or lower a status. They are useful for filtering and nothing more.

Rumor track record

When a rumor you are watching settles, mark the story Confirmed or Denied. Whichever source carried that rumor first gets the credit or the ding, and the Record button shows the running tally per outlet.

It takes a few weeks to become interesting, and then it becomes the most useful thing in the app: a list, from your own feeds, of which outlets are right when they run a leak.

Chapter 4 · Setup

Installing and first run

NewsDesk Studio installs like any other Windows application and can live in Program Files. Nothing is written into the install folder, so it survives updates and reinstalls cleanly.

What you need

  • Windows. macOS and Linux are planned, in that order.
  • An internet connection when you refresh news.
  • Optionally, an AI setup — a local model, a cloud API key, or a Claude subscription. The app runs without one; see Chapter 7.

First run

The first time you open the app it checks what your machine can run and offers a setup guide with a recommendation based on the measured result. You can take the recommendation, choose something else, or press Later and get on with reading news. The guide is always available again under Settings → Setup Guide.

Press Refresh News and the first collection begins. The default source list ships with two categories switched on — Games and Tech — and two switched off — Sports and Politics.

Where your files live

Two locations, never mixed.

%APPDATA%\NewsDesk
The story database, your source list, your settings and your notes. Per user, writable, and untouched by an update or a reinstall.
Documents\NewsDesk
Exports. Show prep files go where you would actually look for them rather than into an application data folder.

The program folder itself holds the pipeline and its rule files and is only ever read.

Portable installs

Set the NEWSDESK_DATA environment variable to put the data folder somewhere else — a thumb drive, a synced folder, or a second copy for testing.

Chapter 5 · Daily use

The workspace

Three panels, left to right: find it, read it, write about it. You can work through an entire morning without leaving them.

The story list

Each row shows the headline, its status color, how many sources carry it and how long ago it broke. A search box filters on text; five checkboxes filter on kind.

FilterKeeps
TrackedStories matching one of your tracked terms
24hStories from the last day
News onlyHides opinion, reviews, guides and deals. On by default.
Has videoStories with a video on at least one source page
SavedStories you starred, queued or wrote a note on

Under the filters sits the status key. Ticking nothing shows everything; ticking one or more statuses narrows to those. Sort by Top, Newest or Most sources.

Row markers

★Saved
▣In the lineup
✎Has a note
▶Has video

The reader

Selecting a story fills the middle panel. Across the top is one tab per outlet carrying it, ordered so the most authoritative source comes first. Three buttons sit above them:

  • Reader — article text pulled out of the page and set for reading, without navigation, adverts or newsletter boxes. Toggle it off to see the page as published.
  • Reload — fetch the page again.
  • Open in Browser — hand it to your normal browser.

The headline bar above the tabs restates the story's status, so you always know what you are reading before you write about it.

Video

When a source page carries video, a bar appears listing what is on the page. If video is on another source's tab instead, the bar says so and offers to jump there.

Each video gets three controls: play it in place, drop its address into your note, or open it in your browser. Video from a source the app does not recognize is marked with a question mark and plays only when you click it.

Player controls

Once something is playing, a player bar replaces the video bar: play and pause (Space), mute (M), a volume slider, ten seconds back and forward, Skip Ad for when it becomes skippable, and a Mute ads checkbox that silences ad breaks by itself and puts the sound back afterwards. Link puts the video in your note, credited to the source you found it on.

Notes

The right panel has two tabs.

  • Story Note — one note per story, saved as you type. This is the text that becomes that item in your export.
  • Show Prep — a single pad for the whole show. Cold open, sign-off, anything that is not tied to one story. It lands at the end of the export.

Both are rich text with a toolbar: three heading levels, bold, italic, strikethrough, inline code, bulleted, numbered and task lists, indent and outdent, quote blocks, horizontal rules, code blocks, a three by three table, links, undo and redo.

Quote Story

Puts a proper link to the outlet you are currently reading straight into the note. It is the fastest way to build a sourced line, and it means the export carries real links rather than bare addresses.

Chapter 6 · The output

Building a show

The lineup is the running order. Everything in it, in the order you put it there, comes out as one document.

The lineup

Add to Lineup queues the selected story; the button changes to In Lineup and the row gets a ▣ marker. Press it again to take the story back out. Save Story is separate: it stars a story so it survives the five-day window whether or not it makes the show.

Marking outcomes

Confirmed and Denied override the computed status for a story. Use them when you know something the feeds have not caught up with — a developer confirmed it on a stream, or a studio publicly killed the rumor. Pressing the same button again clears the override and the computed status returns.

These two buttons also feed the rumor track record, so marking outcomes is worth the two seconds it costs.

Export

Export writes a Markdown file to Documents\NewsDesk, named for the date and time, like showprep_2026-09-23_0046.md. The status line tells you the full path when it is done.

What goes into it, in lineup order:

  • Your note for each story, exactly as you wrote it.
  • For a story you queued but did not write on, the headline and a linked list of its sources instead, so nothing arrives empty.
  • A Video section on any story with video, listing each one as a plain address credited to its source. Videos already named in your note are not repeated, and anything from an unrecognized source is marked as such rather than quietly trusted.
  • Your show prep pad, last, after a rule.

Plain addresses are deliberate: the running order stays usable by someone who does not have the app open.

If nothing exports

An empty lineup produces no file and says so. Add stories to the lineup first.

Chapter 7 · Configuration

Sources

The Sources button opens one tab per category. This is where the app becomes yours: the outlets it reads, what tier you consider each of them, and the subjects you always want flagged.

Categories

Four ship by default — Games and Tech switched on, Sports and Politics switched off. Each has an active checkbox that decides whether its sources are fetched at all, so you can park a whole beat without deleting it.

Adding a source

  1. Open the category tab you want it in.
  2. Give it a name, its feed address, and a tier from 1 to 4. The tier is the important field: it decides what the source can do to a story's status.
  3. Use the test button to check the feed responds and returns articles before you save it.

Steam news is supported as its own source kind — give it a game's Steam app ID and its announcements come in as a tier 1 publisher, because they are the developer talking.

Tracked terms

A comma-separated list of the things you always want to know about. A story matches if the term appears in its headline, its franchise or its companies. Matches get the Tracked filter and can be pulled to the front of the list on any morning where everything looks the same.

The default list is aimed at one show: Diablo, Blizzard, Starcraft, Bungie, Marathon, Halo, Destiny. Replace it with yours.

Chapter 8 · Configuration

AI setup

A model is used for one job: reading each article and saying what kind of article it is. It never decides a status. Four modes are offered under Settings → AI, and the app is usable in all four.

The four modes

ModeWhat happensCosts
On this machineA local model through Ollama, at localhost:11434, with a separate embedding model for grouping.Nothing, beyond the hardware
Cloud APIA provider and model of your choosing, with your own API key stored encrypted.Per use, billed by the provider
Claude subscriptionSigns in against an existing Claude subscription rather than an API key.Covered by the subscription
OffRules and a small local classifier do the labeling. Grouping falls back to title and word overlap.Nothing

Choosing

The Setup Guide measures what your machine can actually run and recommends one of the four from the result, rather than from a table of specs. Take the recommendation if you are unsure.

Turning AI off is a real option, not a degraded fallback you should avoid. You lose classification precision, which mainly affects the News only filter and how cleanly rumors are separated from reporting. The status rules in Chapter 3 still work, because they never depended on the model in the first place.

Watching usage

On the paid modes, a usage chip appears at the top right of the reader showing how much of your current window is spent. Click it to open the AI settings. On a subscription it shows the five-hour window and when it resets; on an API key it shows requests remaining against the limit.

There is also a test button that sends one small request, so you can confirm a key or a login works before a refresh depends on it.

Chapter 9 · Configuration

Appearance

Under Settings → Visual. Most of these exist because the app is read for long stretches and streamed on camera, where defaults built for a desk at arm's length do not hold up.

What you can change

SettingRangeWhy you would
Color scheme—Match the room, or the stream
Interface size11–18Menus and lists legible from further back
Reader size13–24Article text at a size you can read for an hour
Story rows—Tighter rows to fit more of the morning on screen
Story list width280–700Long headlines without truncation
Notes width300–800More room to write, less to read, or the reverse
Window opening—How the window comes up each time you start
Status palette—Alternative color sets for the six statuses
Status symbolsOn / offA symbol as well as a color on each status
On color alone

Turn status symbols on if color is hard to tell apart, on your monitor or on a viewer's. Every status then carries a shape as well as a hue, and the key at the top of the story list shows both.