The problem it exists for
One person writes a blog post. Then it wants a cover, perhaps a narrated vertical reel with music of its own, and a differently shaped post for each social network, each one sent on the right day. Doing that by hand for every article is a second job.
keryx turns it into commands, and the blog’s pipeline runs them unattended. The name is ancient Greek for a herald, which is precisely the job. It has made this blog’s reels since June 2026, and has sent its social posts on schedule, across six platforms, since 20 September 2026.
How it works
Everything is a file in your repository
It’s one Go binary that keeps no state of its own. Reels, themes, schedules and the record of what went where all live in the project’s own git repository, so a cover, a storyboard or an approval is something you can review in a diff.
Generate several, pick one
Every step that costs money generates a few candidates and lets you choose: covers in 16:9, and reels as 9:16 text cards over generated images, with narration in a cloned voice and a music bed to match. A local web studio covers writing, previewing, approving and publishing, and making a whole reel in one pass asks before it spends anything.
Approved, then sent
Social copy is written per platform, because a Bluesky post isn’t a LinkedIn post. It can send to nine networks, and the blog uses six: Bluesky, Instagram, Facebook, LinkedIn, Threads and Mastodon. Nothing goes out without a human approval and a due hour, and an hourly job sends whatever has come due.
Decisions and what they cost
- Render in memory. Reels render through afmpeg, so any project can render without FFmpeg installed or a local checkout (spec 0021). What it cost: the portable engine took about eight and a half minutes on a short three-card reel where native FFmpeg takes seconds.
- No themes in the binary. keryx ships with no themes at all (spec 0046), on the principle that the seed is code and themes are content, so a change of taste never needs a release. What it cost: a fresh install can’t generate anything until you bring a theme of your own.
- A studio that locks itself. On localhost the studio is open; bound to any other address it mints a one-run token as a strict cookie, and refuses to start if it can’t build that gate (spec 0018). What it cost: a cookie verifier had to go into go-tool-base first.
- Mastodon instead of X. Bluesky got a small hand-written client, and Mastodon took X’s place in the default set because X’s API now charges per use (spec 0060). What it cost: an X adapter that’s built and tested and sits unused.
Proof in use
- This blog’s social posts have gone out through it since 20 September 2026, and its reels since June 2026.
- 31 releases since June 2026, built on go-tool-base, writing copy through chat, and rendering with afmpeg.
Use it when, and when not to
Use it if you publish regularly and want covers, reels and social posts made and scheduled from the same repository as the writing, with you approving every one.
It’s built to swap providers, but for now each capability ships with one: Gemini for images, ElevenLabs for voice and music, five options for the chat that writes the copy. It isn’t a hosted service, there’s no video generation, reels have a fixed shape (no editing timeline, nothing long-form), card text is Latin script only, and a LinkedIn sign-in lasts about sixty days before you renew it by hand. The limitations page has the rest.
Where it’s going
Grounding the social copy more firmly in the article it’s about, and a static release channel for its own updates, are next.
The story in posts
Last reviewed .