The 30-second tour
Penova 1.2.0 lands six headline features. Each one solves a friction Penova users hit between write-time and production. Each one stays out of your way until you ask for it.
- ⌘K Command Palette — type three letters, find any command. Linear / Raycast flavour, eleven actions wired up at launch.
- Save Revision (⌥⌘R) — one-click through the full WGA colour sequence with an explicit confirm sheet, optional note, and Fountain snapshot per save.
- Beat Board with structure overlays — toggle Penova-default / Field 3-Act / Save the Cat / Hero's Journey over the same scene cards. Empty beats render placeholders so you see what's missing.
- Voiced Table Read (⌥⌘P) — hit play, hear the scene. Per-character voice assignment, cream-paper render with NOW-line halo, free Apple speech engine on-device.
- Style Check in the inspector — quiet ember/amber cards flag adverbs ("quickly"), clichés ("we see", "begins to", "a beat"), and passive voice ("is being"). Never blocking, never preachy.
- Sprint timer in the toolbar — click to start a 25-min / 1000-word session. Live timer + word delta in the toolbar pill.
Plus first-class project rename / archive / trash on Mac, which the app shipped without. Skip to that section if it's the bug you've been waiting on.
Want the full changelog? Read the release notes.
⌘K Command Palette
Five years ago Linear taught the productivity world that the whole app should be one keystroke away. Raycast doubled down. Superhuman built a $500/year company on it. No screenwriting app shipped it — until now.
Hit ⌘K anywhere in Penova. A 640pt modal floats from the top of the window with a single search input. Type "rena" — first result is "Rename character… across 47 instances · 14 scenes." Hit ⏎. Done.
The matching is sub-sequence with bonuses: +20 for matches at index 0, +10 after a word boundary, +5 for consecutive matches, +1 baseline. Same flavour as Sublime Text and VS Code. The result you want is usually the first one because it has more bonus structure than the alternatives.
Eleven starter commands are wired in 1.2.0 — switch view modes, open search, edit title page, save revision, lock script, unlock script, new scene, generate sides, export, reports, open table read. Each command resolves to the same closure the menu bar item fires, so there's exactly one source of truth.
One-click Save Revision (⌥⌘R)
Pre-1.2.0, ⌥⌘R silently created a revision row. You pressed it, something happened, you weren't sure what. 1.2.0 makes it an explicit confirm sheet — the same conversation a 1st AD has with a writer when revisions go out.
The sheet opens with the next colour pre-selected — White → Blue → Pink → Yellow → Green → Goldenrod → Buff → Salmon → Cherry → Tan → Ivory → Double White, then wraps. The colour you'll save shows in amber next to the date and round number ("Save Pink revision · round #3 since Blue"). A horizontal rail of all eight near-term slots renders the past saves dimmed, the next save with an amber ring, and the future colours faintly visible.
An optional note field lets you attach context ("Tightened the diner scene"). The save snapshots the full project as a Fountain string — diff-able in git, restorable later if you need to.
Round numbers track independently of colour. After the colour wraps from Cherry → Tan, your round number keeps incrementing — so "Round #14" remains meaningful even if it happens to also be Blue.
Beat Board with slidable structure overlays
Click the Index Cards icon (⌘2) and the editor swaps to a grouped card view. Across the top, four pills toggle the structure overlay: Penova default (the 6 beats already in the model — Setup / Inciting / Turn / Midpoint / Climax / Resolution), Field 3-Act (Setup / Confrontation / Resolution), Save the Cat (Blake Snyder's 15), and Hero's Journey (Vogler's 12).
Toggle from Penova default to Save the Cat. The same scenes regroup under the new beats. Your Setup-tagged scenes land under "Setup", your Inciting-tagged scenes under "Catalyst", your Midpoint under "Midpoint", your Climax under "Finale". The mapping is best-fit, not lossy — the writer's actual `beatType` assignments don't change. The overlay is just a different lens on the same data.
Each beat section in the rail shows a name (uppercase, amber
gold for the midpoint), the suggested page-range as a
percentage (pp 30—55%), and a one-line
description. Empty beats render a dashed-border
placeholder with a cue: "No scenes here yet —
drag a card or assign Refusal of the Call in the inspector."
Instant feedback that your structure has a hole.
The "COVERAGE 87%" pill on the right counts how many of the overlay's beats have at least one scene mapped to them. A writer with all six Penova beats covered will see "100%" in Penova-default mode and a lower number in Save the Cat mode — because Save the Cat asks for nine more specific beats.
Voiced Table Read (⌥⌘P)
The single most-requested feature on screenwriting forums is "let me hear the script read aloud." 1.2.0 ships it.
Hit ⌥⌘P on any scene. A 1100×720 sheet opens with the cream paper page on the left and the cast / voice panel on the right. The line being read lights up with an amber NOW band. The page auto-scrolls as the read advances.
Each character is mapped to a voice from a curated catalogue: Vihaan (low, weathered, mid-30s), Aanya (warm, measured, late-20s), Saraswati (clipped, regional, 60s), Kabir (gravel, older man), Meera (bright, young woman), Kai (light, slightly nasal, 20s), Rohan (neutral mid-tone), and a Narrator for action lines. Auto-assigned by name + gender heuristic on first open; overridable in the cast panel.
Audio plays via Apple's on-device AVSpeechSynthesizer
— no network call, no API key, no cost. The provider picks
premium > enhanced > default quality
voices automatically. Premium voices on macOS are
neural-trained — dramatically more natural than the default
tier — but require a one-time download from System Settings →
Accessibility → Spoken Content. Penova surfaces a hint in the
cast panel pointing you there.
Curated voice mapping per preset means the same character gets the same timbre across sessions. Per-utterance pitch jitter and breath pauses on em-dash / ellipsis / question-mark make the delivery less metronome-flat. Pace is tunable in the cast panel.
An ElevenLabs adapter behind the same TTSProvider
protocol is on the v1.5 roadmap for writers who want
studio-grade neural voices. Same architecture; swap one line.
Style Check in the inspector
The right-hand inspector now has a Style section that quietly flags three things in your action lines:
- Adverbs —
quickly,quietly,suddenly. Word-ending-in- -ly with a stop-list ("ugly", "family", "fly") keeping false-positives down. - Clichés — twenty curated screenplay tics:
we see,begins to,a beat,the kind of tired that sleep doesn't fix. Word-boundary anchored, longest-match-wins. - Passive voice —
is being,was being, plusis/are/was/were + past-participle. Conservative; flags less than it misses.
Each finding renders as a small card with a 2px coloured strip on the leading edge — ember red for adverbs and clichés, amber for passive — plus the matched span tinted in the same colour inside a quoted excerpt. Up to ~32 chars of leading context, ~48 trailing, ellipsised when clipped.
Quiet by design. Hidden when the scene has zero marks (a clean scene shows a clean inspector). No squiggly red underlines on the page. No popups. No nagging. The findings live in a panel you scan when you choose to.
Style check skips dialogue entirely (real characters speak naturally), and limits parentheticals to the adverb check (the classic "(quietly)" tic).
Sprint timer
A small toolbar pill that turns into a stopwatch when you click it. Idle: Sprint with a grey dot. Active: 00:15 · 487 / 1000 with an amber dot pulsing.
Default goal — 25 minutes / 1000 words. Click the chip again to end the session. Word count tracked from session start; no penalty for revising existing prose, the goal is what you ADD during the sprint.
Pomodoro purists will recognise the cadence. Writers who don't believe in arbitrary timers can ignore the chip — it's idle until you click it, and the toolbar still works the same with it sitting there.
Project management on Mac (the missing-feature fix)
The Mac app shipped without a way to rename, archive, or delete projects. Every project a writer created lived in the sidebar forever. 1.2.0 closes the gap.
Right-click any project in the sidebar. The menu shows Rename… · Archive · Move to Trash. Archived projects render dimmed at 0.55 opacity. Trashed projects soft-delete with a confirm alert and disappear from the sidebar.
A "Show archived & trash" toggle at the sidebar footer reveals them when you want them. Restore brings them back. Delete forever… on a trashed project is a second confirm step before the row is permanently removed.
If you trash the project owning the currently-selected scene, the editor auto-snaps to a sibling scene so you don't see a stale selection.
Numbers
- 13 PRs shipped (12 features + 1 fixup)
- 540 tests total — 526 iOS unit + 14 Mac UI, all green
- ~150 new unit tests, plus a deterministic end-to-end XCUITest that walks every new surface in one run
- Zero regressions in the existing suite
- One additive SwiftData migration (the
new
VoiceAssignmenttable) — automatic, no MigrationPlan needed
What's next
The full plan is still public — bring Penova to the web (and Windows) for adoption, ship per-recipient PDF watermarks for production teams, add the ElevenLabs adapter for studio-grade neural voices behind a Pro tier, and finally the drag-card-onto-beat workflow on the Beat Board. Each one stacks on the foundations 1.2.0 just laid.
Penova is free, 3.7 MB, no account. Download for Mac →