My Azeroth Life 如何製作:從 WoW 插件到 Podcast
How My Azeroth Life is made: from a WoW addon to a podcast
My Azeroth Life 以 World of Warcraft 的 StoryTracker 插件記錄遊戲事件,再由 AI 將角色經歷寫成網誌文章並製作成 Podcast 分集。
I play World of Warcraft most evenings, and for the last few weeks the game has been keeping a blog about it. Now that blog has a podcast too. My Azeroth Life tells the stories of my characters, and the My Azeroth Life podcast turns those stories into narrated episodes with music and sound effects. Both are published by folderblog, the small blog engine I make here at Nine Point Labs.
I want to be upfront about one thing: AI does the writing and the narration. What makes it mine is that every story starts from something I actually did in the game, and I read every post and listen to every episode before it goes live. Here is how the pieces fit together.
The short version
World of Warcraft, with the StoryTracker addon
| log out or /reload: the addon saves its notes
v
Companion script: one file of new events per character
| every morning
v
AI writes a draft post in the Chronicler's voice -> drafts/
| I read it and move it to posts/
v
folderblog publishes it to myazerothlife.com
|
v
Claude writes a script, ElevenLabs voices it, ffmpeg mixes it
| I listen, then say yes
v
folderblog publishes the episode: audio on Cloudflare R2, a podcast feed
Step 1: An addon that takes notes while I play
It starts with StoryTracker, a WoW addon I wrote. It listens for game events and keeps a record of each session: quests accepted and turned in, zones and subzones, levels gained, deaths (where, and what did it), rare and better loot, reputation changes, dungeon bosses, profession skill-ups, gold earned and spent, notable kills, groups and guilds, and when I logged in and out.
WoW only lets an addon write to disk when you log out or type /reload, so the notes land in the addon’s saved file at the end of a session. There is a version for each game, and both are free on GitHub: StoryTracker for WoW Forever and StoryTracker for Retail.
Step 2: From game data to a story
A small companion script reads that saved file, compares it with what it has already seen, and writes one JSON file per character with only the new events. It also notes which game the character is in, based on which WoW folder the file came from, so Retail and Forever never get mixed up.
Every morning a scheduled job looks for those files. When it finds one, an AI agent reads the events along with a voice guide and writes a post as the Chronicler: a weathered scribe who has followed adventurers across Azeroth for decades. The guide asks for a little elevation when a moment earns it, a little grit when something goes wrong, and a dry smirk the rest of the time. One of its rules is to turn game events into world events, so a level-up reads less like a number going up and more like a character getting tougher after surviving things that should have killed them.
The draft is saved into the blog’s drafts/ folder, tagged with the game version, the character and their class. Then I read it, all of it. If it is right, I move it into posts/, and that is the whole publishing step.
Step 3: folderblog puts it online
folderblog runs quietly in the background and watches ~/Blogs, where every folder is its own blog. Moving the file into posts/ is enough. A few seconds later the post is built and live on GitHub Pages at myazerothlife.com, with no commit and no deploy command.
These are the folderblog features the blog leans on:
- Plain Markdown files. The title comes from the first heading and the date from the filename, so a post only needs a line of tags at the top.
-
Drafts. Anything in
drafts/shows up infolderblog previewon my own machine and never on the live site. - Tags, with a page for each one, so you can read only Burrly’s posts or only Laotou’s.
-
A custom theme. A folderblog theme is just templates, and every blog comes with an
AGENTS.mdthat explains them to coding agents. The parchment look on My Azeroth Life was mostly built by Claude from that file. - Safe builds. Every build happens in a fresh folder and only replaces the live site if everything worked, so a mistake never takes the site down.
-
folderblog check, which finds template errors, broken links and feed problems before readers do. -
Cookie-free page counts with GoatCounter, switched on with two lines in
blog.toml.
Step 4: Turning posts into episodes
Once there are enough posts, Claude Code on my workstation turns them into an audio episode. It writes a script from the posts, split into chapters, with notes for the background ambience, the sound effects, and how each line should be performed.
Each character gets their own narrator, made with ElevenLabs voice design and then kept for good. Laotou, a Pandaren monk and healer, is told by an elderly lorewalker over a pot of tea, slow and wry. Burrly, a Kul Tiran warrior, is told by an old sea captain in a Boralus tavern, faster and louder, because most of his story is him running at things. Once a character has a narrator, that voice stays theirs.
The rest of the work goes like this:
-
Narration uses the ElevenLabs eleven_v3 model, one paragraph at a time. It acts out small direction tags like
[intense]or[dryly]instead of reading them aloud. Names it gets wrong are respelled only in the text sent to the voice, so “Laotou” goes in as “Lau-toe” and the script keeps the real spelling. - Music comes from ElevenLabs Music: a theme for each show and background beds that change with the scene, with a battle bed for the fights.
- Sound effects and ambience come from ElevenLabs Sound Effects: a gong between Laotou’s chapters, a ship’s bell and war drum between Burrly’s, plus sword clashes, war horns and the noise of a busy tavern.
- Mixing is done with ffmpeg. The music and ambience dip under the voice, the effects sit in the gaps, the whole thing is brought to a normal podcast loudness, and chapter markers are embedded in the MP3.
- Checking. Every clip is run back through speech-to-text and compared with the script, so a missing line or a made-up one gets caught. Then I listen to the finished episode myself.
Every piece of music and every effect is saved to a shared library and reused, so each one is only paid for once.
Step 5: folderblog publishes the podcast
The podcast is part of the same blog folder. folderblog podcast on added a podcast/ folder, and each episode is a folder inside it with its show notes, the MP3 and a chapters file. From that, folderblog builds:
- A show page at /podcast/ with a Subscribe box, and episode pages with a player and clickable chapters.
- Its own feed at myazerothlife.com/podcast/feed.xml, separate from the blog’s feed, with the iTunes and Podcasting 2.0 tags podcast apps look for: a permanent show ID, chapters, people, and an optional Lightning address for tips.
-
Audio on Cloudflare R2. The MP3s never go into git or the website itself.
folderblog podcast setupwalked me through connecting R2 once. When an episode is published, folderblog uploads the audio first, checks that it is really online, and only then updates the site and feed, so the feed never points at a missing file. - Drafts. An episode starts as a draft that is never uploaded. I listen to it, and only after I say yes is it published.
folderblog also has an MCP server, so an agent can set up a draft episode, write its notes and chapters, check it, and publish it only after you say yes.
What’s next
From here on there is one show a week for each game. The Retail show comes out on Sunday nights. The Forever show comes out on Monday nights, starting after WoW Forever launches on November 4. Both go in the same feed, tagged by game, and each covers every character who had an adventure that week, with a short transition between them. If nobody played that version, there is simply no show that week.
Have a listen
- Episode 1: The Chronicle of Laotou, 23 minutes in 5 chapters
- Episode 2: The Chronicle of Burrly, 26 minutes in 8 chapters
- The feed for your podcast app:
https://myazerothlife.com/podcast/feed.xml
If you have a folder of writing that you’d like to turn into a blog, or a blog that you’d like to turn into a podcast, folderblog is free and runs on Linux. And if you listen to an episode, I’d love to hear what you think.
Originally posted on blog.ninepointlabs.com.
來源:DEV Community · dev.to