ZephInk
The newest features and fixes, newest first, mirrored from the app's own About panel. Currently on v2.1.29.
An NPC named in your message answers when Auto Reply is on, and an NPC named in Narrator (System) narration answers alongside your characters (for example "Tobias laughs and points at Lucien")
Each NPC gets a distinct way of talking, remembers strong moments (a kindness or a slight) and brings them up later, and keeps secrets (written by you, or invented by the AI) that they only share once they trust you enough
Clicking a place on the Story Map brings the NPCs who belong there (or sometimes a stranger who then belongs there), NPCs can join your story's Factions, and NPCs are sorted into categories automatically (Students, Staff, Guards…
A new ✏️ Edit button on every NPC in NPCs You've Met to change how they appear, what they want, how they talk, where they are, and their faction
Pick it from the Speak as dropdown and your line is posted as pure narration, not as you or a character (for example "Enzio runs away and Lucien runs after him"), and the characters it names then respond in character.
NPCs who have spoken recently get their own button in the Reply As bar, so you can answer them and keep a conversation going instead of it stopping after one line. Type what you want them to do or say first to steer them
A 🎭 Random NPC button in the Reply As bar (turn on per story in Relationship Settings), an optional chance that an NPC steps forward on their own after you send a message, and optional background chatter from unnamed people…
Portraits (picked from how they're described, changeable, and carried over when you claim them), what they've said and seen, Pin, Rename and Merge, an "in this scene" badge, and Warmer/Colder buttons.
Turn an NPC you've grown fond of into a full character card (written by the AI from what they've said, added to your roster and scene), plus a gentle nudge when an NPC keeps turning up
Witnesses who spread what they saw as rumors (with Reputation Ripples and the Rumor Board on), small wants, quest offers from friendly NPCs (with Quests & Inventory on), and reputation that matters: hostile NPCs cause trouble…
An optional setting (Automation) so characters answer on their own right after you send a message, instead of you clicking each one in the Reply As bar.
Scroll to zoom toward the cursor (up to 8x), drag to move around, pinch on a touchscreen, or use the +/−/fit buttons. Hotspot pins stay the same size and on their spot, and you can still place new ones while zoomed in
Out-of-character notes and inner thoughts in (parentheses) are skipped when a message is read aloud, with a setting to turn it off. On by default
Download a plain text template covering every New Story field, plan your roleplay anywhere (no app or model needed), then load it with "Fill From Text File" to fill in the whole wizard, including Other Characters and Groups &…
Builds on the v2.1.24 fix: the voice engine itself now refuses to generate two clips at once, so even requests that arrive together (an Auto Speech line overlapping a manual play, for example) can't garble each other.
Smaller local models sometimes copy the placeholder "+N" from the instructions instead of writing a number in an NPC's hidden tag, and the whole NPC line was thrown away.
The hidden [REL:+N] tag that moves a character's relationship score was only recognized when it was the very last thing in a reply.
It asked one of your characters to speak the NPC's line inside a special tag, and smaller local models kept getting the tag wrong, so the line was thrown away.
When a reply ran out of length partway through a hidden bookkeeping tag, the leftover fragment (for example [REL or [REL:+) showed at the end of the message and could be read aloud.
The voice engine can only make one clip correctly at a time, but the app could send a new request while the previous one was still being generated, for example when Auto Speech started the next message, when you pressed play…
Some models write speech in curly quotes, which the app didn't treat as speech: the message showed no speech highlighting and the narrator voice read every character's lines as one block.
The installed app's window silently cancels every normal file download, so Download Template, story export (file, PDF, Story Bible), character export, Share Pack, Back Up Everything and Back Up All Voices could appear to do…
Faction could only ever be set once, during initial New Story creation, in the wizard's Other Main Characters editor — a character made afterward through the normal Character Editor had no Faction field at all, with no way back…
If an existing story lost its title and message history in place (same story, everything else about it untouched) rather than being deleted outright, Restore From Backup had no way to help — it only ever recovered a missing…
Saving a character through the normal editor rebuilt the entire record from that form's own fields — but eye color, hair, distinctive feature, faction, disposition, and every uploaded Dynamic Portrait mood image have no input…
A warning about something failing to generate showed as a small corner toast that faded away on its own — easy to miss entirely while attention was on the loading screen or the intro card that appears right after, especially…
The encounter's scene description and its response options were both meant to be parsed out separately — the options rendered as their own clickable buttons — but a parsing gap meant every "OPTION: ..." line the model wrote got…
If a story's intro AND its starting characters/lorebook both failed to generate in the same submission, only the last warning ever actually appeared — the alert banner is a single shared element, so showing a second one instantly…
A detailed story concept — six named characters plus factions, key events, and everything else the wizard collects — asks the model to write a full 8-character cast in one reply.
A rare startup timing issue could make the app briefly misread its own saved story list as empty — enough to make a real story's persona, characters, and main prompt look gone, even though the underlying data was never actually…