GitHub - qarl/newsmoji: The hottest news story, retold entirely in emoji, as a newspaper front page. · GitHub
/" data-turbo-transient="true" />
Skip to content
Search or jump to...
Search code, repositories, users, issues, pull requests...
-->
Search
Clear
Search syntax tips
Provide feedback
--><br>We read every piece of feedback, and take your input very seriously.
Include my email address so I can be contacted
Cancel
Submit feedback
Saved searches
Use saved searches to filter your results more quickly
-->
Name
Query
To see all available qualifiers, see our documentation.
Cancel
Create saved search
Sign in
/;ref_cta:Sign up;ref_loc:header logged out"}"<br>Sign up
Appearance settings
Resetting focus
You signed in with another tab or window. Reload to refresh your session.<br>You signed out in another tab or window. Reload to refresh your session.<br>You switched accounts on another tab or window. Reload to refresh your session.
Dismiss alert
{{ message }}
qarl
newsmoji
Public
Notifications<br>You must be signed in to change notification settings
Fork
Star
main
BranchesTags
Go to file
CodeOpen more actions menu
Folders and files<br>NameNameLast commit message<br>Last commit date<br>Latest commit
History<br>17 Commits<br>17 Commits
.gitignore
.gitignore
LICENSE
LICENSE
NotoEmoji-mono.woff
NotoEmoji-mono.woff
README.md
README.md
newsmoji.py
newsmoji.py
screenshot.png
screenshot.png
View all files
Repository files navigation
newsmoji
The single hottest news story, retold entirely in emoji , laid out like a<br>newspaper front page. The future of being informed.
Read today's edition, live →
Why
Let's be adults about this: nobody reads anymore. You skimmed a headline,<br>glanced at the thumbnail, and felt informed. That instinct is correct -<br>newsmoji simply finishes the thought.
Emoji is the first genuinely universal language: every device on Earth<br>ships the same glyphs, no translation required, none of the usual trouble<br>with grammar. Humanity spent five thousand years migrating away from<br>hieroglyphics, and with the benefit of hindsight the Egyptians were simply<br>early. newsmoji closes the loop and returns the news to pictures, where it<br>belongs.
Consider it a head start. When the official Duolingo emoji course finally<br>ships there will be a stampede - so get fluent now, while reading 📰🌍🔥 is<br>still a rare and marketable skill, and you'll be the only person in the<br>meeting who knows what is going on in the world.
What it does
newsmoji.py runs one cycle, end to end:
Fetches a basket of major-outlet RSS feeds into a pooled story list.
Picks - Anthropic call #1 (Claude Sonnet) chooses the single hottest<br>story, skipping ones it covered in the last few editions, and renders the<br>headline as a short emoji glyph.
Reads the chosen story's full article body, so that you do not have to.
Translates - Anthropic call #2 (Claude Sonnet) retells the whole story<br>as a tight emoji narrative: a hard 70-140 emoji, the modern attention<br>span, generously rounded up.
Renders a self-contained index.html: a portrait-broadsheet<br>newspaper - emoji masthead, lead emoji, the emoji story in newsprint<br>columns - auto-sized to fit the screen with no scrolling (scrolling is a<br>form of reading), and set to reload itself every 10 minutes. The page is<br>100% emoji: not one word of text anywhere, rendered black-on-newsprint in<br>a tasteful monochrome emoji font.
Run it on a schedule (say a */10 cron) and you have a news page that keeps<br>itself current, indefinitely, with no further need for words.
Running it
export ANTHROPIC_API_KEY=sk-ant-... # a pay-as-you-go console key<br>python3 newsmoji.py
Pure Python standard library - no pip, no venv. One cycle makes two<br>Anthropic API calls (pick + translate) plus one article-page fetch. The API<br>key can instead live in newsmoji.env (a KEY=VALUE file) in the state<br>directory.
Output & state
Everything lives in the state directory - ~/newsmoji/ by default,<br>override with NEWSMOJI_STATE_DIR:
File<br>What
index.html<br>the rendered page - this is the output
newsmoji.log<br>verbose per-cycle log, self-trimming at 5 MB
history.json<br>recently-covered stories, so the next pick won't repeat
feeds.txt<br>optional - one RSS URL per line, replaces the default basket
The page loads NotoEmoji-mono.woff (bundled in this repo) for its<br>monochrome look - serve that file alongside index.html.
Robustness
The page never breaks. On any failure - a feed down, an API call failing, a<br>bad render - the cycle aborts and the last good index.html is left<br>untouched. Worst case the page is a little stale, never broken or blank. The<br>public must be informed.
Configuration
Variable<br>Default<br>Purpose
ANTHROPIC_API_KEY<br>(or from newsmoji.env)<br>Anthropic API key
NEWSMOJI_STATE_DIR<br>~/newsmoji<br>state + output directory
License
GPLv3 - see LICENSE. Free as in speech, itself a legacy text<br>format.
The bundled NotoEmoji-mono.woff is Google's Noto Emoji , used under the<br>SIL Open Font License 1.1.
About
The hottest news story, retold...