DEV Community

Shouvik Palit
Shouvik Palit

Posted on Edited on

I added a LOCAL MODELS channel to my retro dev TV, and Ollama has no API for it

DEV·TV is a retro TV for developers: one index.html on GitHub Pages, no backend, no accounts. You flip channels instead of tabs. GitHub, Hacker News, AI papers, CVEs, and since this week, LOCAL MODELS.

👉 Live: shouvik12.github.io/devtv (channel 14)

Why a local models channel?

DEV·TV already had a channel for the newest models on OpenRouter. It pulls OpenRouter's public catalog live, newest first, and shows each model's price and context window. I renamed it CLOUD MODELS this week, because it now has a twin.

The question I kept asking myself was the other half: what's new that I can run on my own machine? That's what LOCAL MODELS answers. Flip between channel 11 and 14 and you see what's new to rent next to what's new to run yourself.

What each slide shows

  • Release date, like "updated Oct 29, 2026"
  • Sizes: 1.7b, 2b, 9b, 27b…
  • What it can do: tools, vision, thinking, audio
  • Download count
  • A short description

Click through and the reader gives you the ollama run command, already set to the smallest size so it fits most machines.

Cloud-only models are filtered out. If it's on this channel, you can run it locally.

The catch: Ollama has no public feed for its library

OpenRouter makes this easy: one GET request, JSON back, done. Ollama's library doesn't have an equivalent public JSON feed. The newest-first list lives on a web page, and a static site on GitHub Pages can't read another site's HTML from the browser.

So I kept the zero-backend rule and moved the work to a schedule:

  1. A small Python script (standard library only) reads Ollama's newest-models page.
  2. A GitHub Action runs it once a day, for free.
  3. It saves local-models.json into the repo.
  4. index.html reads that file, the same way the Spotlight channel reads spotlight.json.
GitHub Action (daily) → local_models.py → local-models.json → DEV·TV
Enter fullscreen mode Exit fullscreen mode

No server, no database, no API keys. GitHub does the scraping, GitHub Pages serves the result.

Three bugs worth sharing

Scraping a page you don't control means your first guess about its structure is probably wrong. Mine was, three times:

1. The page didn't look like I expected. My first parser relied on test attributes in the markup that weren't there anymore. The fix was to stop depending on markup details at all: find every /library/<name> link and read the card's text from there.

2. Download counts showed up as model sizes. A slide offered me ollama run d1-omni:17.9K. Nobody wants a 17.9-thousand-parameter-size model. The fix turned out to be case: sizes are lowercase (1.7b, 600m), download counts are uppercase (17.9K, 1.2M).

3. Release dates were missing. Each card links to its model twice, and the date sat after the second link. My parser stopped at the first one. Once it read to the next different model, the dates appeared. They live in a tooltip: title="Updated October 29, 2026". That same trick gave me exact download counts for brand-new models, too.

The script also fails loudly if it ever finds zero models. A layout change on Ollama's side keeps yesterday's list on air instead of showing a blank channel.

On air right now

The channel is mostly the new LFM3 family (lfm3, lfm3-audio, lfm3-omni, lfm3-vl), d3 in four sizes, and phonon, a text-to-speech model for adding a voice to local apps.

Try it

📺 shouvik12.github.io/devtv: LOCAL MODELS is channel 14, CLOUD MODELS 11, MODEL FACE-OFF 13. Works on your phone too.

⭐ Code: github.com/shouvik12/devtv. A star helps other devs find it.

Next on my list is a "will it run on my machine?" badge for each local model. Would you use that? Tell me in the comments.

Top comments (1)

Collapse
 
shouvik12 profile image
Shouvik Palit •