- Timeline safety: the "don't apply an outdated cut plan after a dead-air
trim" protection now survives restarting Premiere (it used to be forgotten,
which could let an old plan cut into speech). The frame-rate safety check
now also refuses cut files with no frame rate instead of guessing 24fps,
and Trim gained the same check.
- Drop-frame detection now works on the very first Apply of a session (an
internal ordering bug could misread 29.97 timelines until the second run).
- Trim now verifies it is cutting YOUR timeline (not the safety backup) before
making any cut, and is much faster on timelines with thousands of clips.
- Clearing a number field (like "Ignore cuts less than") no longer produces a
bogus single-cut edit - the panel now catches blank/invalid values.
- "Suggest camera tags" always re-reads the current sequence first (switching
sequences could previously mismatch mics and cameras).
- The dead-air trim confirmation now counts exactly what will be trimmed.
- Security: the panel's AI self-repair downloads are now verified against
pinned checksums (a tampered download is deleted, never used), and the
fetch/build scripts pin exact versions of every AI file. The .zxp build no
longer includes stray personal files. Macs get an uninstaller that restores
Adobe's extension signature checking.
- Sign-in: the browser only says "You're signed in" after sign-in actually
succeeds. A busy license server no longer locks out paying users (it is
treated like being briefly offline). The panel re-checks your license and
update notices daily instead of only at startup.
- Speed: audio channel layouts are detected once per file instead of on every
run; repeat analyses reuse cached loudness data; the first Apply batch is
smaller so Premiere never looks frozen; Stop now interrupts analysis
mid-clip; the progress bar no longer runs backwards.
- After a dead-air trim, OnMic offers to re-analyze in one click.
- Removed the old Python analyzer and legacy scripts (the panel has been pure
JavaScript since v0.9x; the leftovers had outdated logic and are gone).
- Mixed mic setups: a speaker whose clips come from more than one file (e.g. a
mono pickup dropped in next to a multichannel recorder file) no longer risks
a channel-out-of-range error during analysis.
- Update banner: hardened so a mis-set "latest version" on the website can
never silently hide future update notices.
- A disk read glitch far from the end of a long clip is now reported instead of
being quietly treated as the end of the file (tightened the tolerance that had
scaled with clip length).
- SECURITY: signing in used to hand the panel its long-lived account token in
the browser's address bar, so it lingered in browser history (and any URL
logs). Sign-in now uses a short-lived, single-use code that the panel
exchanges privately for the token — the token never appears in a URL.
Backward compatible: works whether or not the website side is updated, so
existing sign-ins keep working; no action needed on your end.
(Completes the last open item from the v1.03 security audit.)
- Follow-up audit fixes to the v1.03 work: a cut plan (or a single mic's voice
detection) that briefly fell back to loudness mid-run is no longer cached and
replayed later — the fix that was meant to land in v1.03 now also covers the
per-clip case. Trim dead air now shows the same "AI not ready" warning the
edit actions do (it deletes media, so it matters more there). Plus smaller
correctness fixes: drop-frame detection when switching sequences mid-apply,
a tighter cap on how much clip-tail a disk glitch can silently drop, and a
couple of status-message glitches after a failed sequence read.
Every fix below came out of a full line-by-line audit of the panel, the
Premiere host script, and the release tooling. Highlights, most important
first:
TIMELINE SAFETY (the big ones)
- FIX: Trim dead air could delete real speech. If Premiere silently refused
a razor cut, the trim then ripple-deleted the whole surrounding clip (up
to an entire take) and still reported success. Every pause is now verified
cut-by-cut before anything is removed; pauses whose cuts don't land cleanly
are skipped, never deleted.
- FIX: Clicking a different sequence during Apply could cut THAT timeline.
The batched apply now re-checks (and re-activates) the original sequence on
every batch, and stops safely if it can't.
- FIX: Applying an old edit plan after trimming dead air cut into speech —
trims shift all timings, but the old plan still passed every guard. Plans
created before a trim are now refused with a clear "re-run Analyze" message.
- FIX: Trim dead air with backup OFF could use the wrong drop-frame mode
(left over from another sequence) and drift ~2 frames/min on NTSC. The
drop-frame flag is now set from the sequence being trimmed, every time.
- FIX: Creating an edit right after switching sequences used the OLD
sequence's frame rate for every cut. The panel now refreshes the frame rate
on every track read AND the host refuses a plan whose fps doesn't match.
- Apply now stops at the FIRST refused cut instead of mis-cutting hundreds
more clips and reporting failure at the end; it also verifies every planned
cut was placed before reporting success, and re-applying the same plan is
reported as "already applied" instead of a scary failure.
DETECTION QUALITY
- FIX: a cut plan built while the AI voice model was missing (loudness-only
fallback) was cached and silently replayed forever, even after the AI
installed itself. Degraded plans and masks are no longer cached.
- FIX: quiet speakers' mics could be boosted so hard (up to 300x) that the
OTHER person's bleed read as their speech, stealing camera cuts. The gain
reference now targets real speech above the noise floor and is capped at
40x. (Conservative change — please report anything odd; tuned further on
real audio if needed.)
- The log now warns when any clip silently fell back to loudness detection
mid-run (it used to still claim full AI detection), and camera detection
reuses the analysis' cached voice masks instead of re-running minutes of AI.
- FIX: setups mixing a multichannel recorder file with a separate mic file
could crash analysis or read the wrong channel.
SMALLER FIXES
- Auto-update: version comparison broke at v1.1 (it read as older than
v1.02) — fixed before it could ever bite; release tooling now also refuses
to publish a version that isn't newer than the live one.
- The Mac installer no longer rewrites the panel's internal version into a
malformed value (could make the panel fail to load after install).
- Windows uninstaller now restores Adobe's extension signature enforcement.
- Sequence/speaker names with unusual characters no longer break the
Premiere connection or cuts file (full UTF-8 + control-character handling).
- '#' or '?' in a camera filename no longer mis-reports it as undecodable.
- Speaker names 9-12 are no longer wiped when the panel rebuilds its rows.
- The Stop button is hidden during Apply (it only cancels analysis and used
to sit there doing nothing).
- Failed track reads now surface an error instead of silently editing from
stale data; "restore the backup" advice only appears when a backup exists.
- Reset local data now also clears the voice/cut-plan caches, which also
auto-prune after 30 days (they grew forever).
- Offline licence hardening (hand-edited license files are cut off), sign-in
URL hardening, a content-security-policy for the panel, and the manual
sign-in flow no longer times out mid-typing.
- Removed ~1,000 lines of dead code (the old unreachable intro-trim and
flatten features and an unused fast-assign path), a stale second Windows
release script, and various release-script gaps (publish ordering, tag
safety, rollback script added, non-git release refusal).
- Note for a future release: server-side sign-in should move the token out
of the URL query string (needs a WhereToPodcast site change, not a panel
change). AI file download hash-pinning was reviewed and deliberately
deferred.
User report (v1.0): "Wide-shot frequency is Low but it frequently switches to
the wide even when only one subject is speaking; camera also switches to the
subject who is NOT speaking." Three real bugs, all fixed:
- FIX: establishing wides (added in v1.0) ignored the Wide-Shot Frequency
dropdown — Balanced fired a 3s wide at every 4th pause >=0.4s even on "Low".
They now scale with the setting (Medium = the tuned v1.0 rate, High = more,
Low = ~1/10th of pauses and only pauses >=1s) and are fully OFF for
Off/Overlap-only, where the wide should only appear on genuine cross-talk.
- FIX: "Low" was silently remapped to 0.20 (near-Medium) inside the engine
("Low was too shy"), which also enabled more frequent variety/overlap wides.
The menu value is honored exactly now: Low means low.
- FIX (big one): short cross-talk resolved to the WRONG speaker. The overlap
collapse summed raw dB per hop (negative while talking, 0 while silent), so
the person talking LEAST scored highest and won — cutting the camera to
whoever was NOT speaking after every brief interjection/laugh. Scoring now
sums energy above the silence floor (talking more/louder wins) and honors
the AI voice mask, so bleed into a boosted quiet mic (e.g. HOST at +12dB)
can't steal the shot.
- Net effect on a 2-speaker episode like the report (GUEST 78% / HOST 14%):
wide appears on sustained both-talking and rare long-hold breaks only;
single-speaker stretches stay on the speaker.- The Speakers and Cameras pickers now go up to 12 (were capped at 8), and
auto-detect will fill in up to 12 isolated mics / camera tracks. The detection
engine and apply already scale to any count; only the picker caps were raised.
- Note: more angles = a slower Apply (every camera is cut at every edit) and a
longer analysis (one voice pass per mic), and even-cutting still needs every
camera to be gapless across the edit — with more cameras it's likelier one has a
gap, in which case Apply stops and tells you which track to fix.
- FIX (big one): dropped cuts on 29.97/59.94 NTSC drop-frame timelines. Razor
timecodes were built as non-drop, so each cut landed slightly early and the
error GREW down the timeline (~0.6s at 10 min, ~3s at 52 min); short shots then
grabbed the wrong camera and ~40% of planned cuts vanished. A 53-min 29.97 test
showed 566 planned cuts collapse to ~337. Now OnMic emits correct drop-frame
timecode (verified zero drift) AND auto-detects drop-frame vs non-drop from the
sequence's real timecode format (falling back to the NTSC heuristic if a build
doesn't expose it). That same episode now applies 565 cuts — matching the reference edit's
586. True-30 sequences were never affected.
- Establishing wides: OnMic now cuts to the room/wide camera at natural pauses like
the reference edit (~5% of screen time) instead of almost never. On the test episode the wide
went from ~0% to ~5% with the median shot still 3.0s. New Balanced setting
establish_wide_frequency (set 0 to disable). Uses your tagged wide — the camera
covering the most speakers, so put your room shot there.
- Carries forward the v0.9x Balanced tuning (matches the reference edit's cadence + shot-length
shape on real episodes), content-aware talkover suppression (keeps quick banter,
drops laugh/breath false switches), and even cutting (every angle cut at every
edit so any shot can be toggled by hand).
- Instead of guessing settings and having you re-run Premiere each time, OnMic's
detection was replayed offline on the ACTUAL episode audio (energy + VAD dump)
and the Balanced settings were fit to the reference edit's real cut profile. Verified the
offline model reproduces the live result exactly before tuning.
- The excess cuts turned out to be mid-monologue false switches from mic bleed and
breaths, so Balanced now: dominance margin 13 dB (was 10) - the other mics must
be clearly louder to steal a switch; switch delay 0.65s (was 0.30) - a new speaker
must hold before we cut; overlap window 1.6s (was 0.8); min shot 1.5s; max hold 35s.
- Result on the test episode (measured, top-most-visible cuts):
Reference: 476 cuts, median 3.0s, 39% quick 1-2s, 29% held 7s+
v0.98 : 483 cuts, median 3.0s, 36% quick 1-2s, 27% held 7s+
i.e. essentially the same pace and shot-length shape as the reference edit, and the per-
camera screen-time split matches too.
- Still different: cutting to the wide/room shot (the reference edit ~5%, OnMic ~1%) - that's a
separate "establishing wide" behavior, next on the list.
- Even cutting + gap guard (v0.95) and content-aware talkover suppression (v0.97) stay.