keryx voice takes¶
Description¶
See what's on the table before you pick. voice takes lists a workspace's VO
candidate takes (vo/takes/NN-T.mp3) per storyboard line, with each take's duration
and a marker on the promoted one — so the "re-roll these lines and choose the best"
loop can be screened without leaving the CLI (spec 0023). Actual listening stays
out-of-band (or in the studio); keryx surfaces the metadata that ranks them.
It is one half of the take workflow:
keryx voice gen --workspace my-post --lines 3,5,7 --takes 3 # re-roll a subset
keryx voice takes --workspace my-post # screen what came back
keryx voice pick 5 2 --workspace my-post # promote the winner
Usage¶
Behaviour¶
- Per line: every candidate take with its number, filename, duration, and whether it
is the promoted selection (content-matched against
vo/NN.mp3— promotion copies the take, so equality identifies the winner). - Durations are best-effort: they probe through the backend selected by
providers.render(in-memory onafmpeg); if no backend is available or a probe fails, the listing degrades to0.00srather than erroring. --line Nfilters to one line;--output jsonemits the listing for the studio / scripts.- An empty workspace lists nothing and says so — not an error.
Stilt screening (--screen)¶
--screen scores each take so a stumble ranks last automatically instead of by ear
(spec 0023 R-GEN-38). The combined score is:
- duration deviation from the line's median take — a longer read (the tell-tale of a stumble or an inserted pause) is penalised more than a tighter one; plus
- excess internal silence — silences inside the read (lead and tail excluded) beyond
the pauses the line actually scripts (
…and<break>are forgiven).
Lower is cleaner; the cleanest take is marked ←. The per-take sub-scores are surfaced (in
the table and in --output json) so a ranking is auditable, not a magic number. When a
line's best take still reads over-paused, the whole line is flagged "all takes
over-paused — reword/respell" (R-GEN-38b): no clean read exists, so the fix is the script,
not another re-roll.
Silence detection needs the render backend's silencedetect (the default ffmpeg
backend); on a backend without it (afmpeg's lean module), screening degrades to
duration-only ranking rather than failing.
Flags¶
| Flag | Description | Default | Required |
|---|---|---|---|
-w, --workspace |
reel workspace slug | yes | |
--line |
list only this storyboard line (0 = all) | 0 |
|
--screen |
stilt-score the takes (duration + internal silence) and flag over-paused lines | false |
Run keryx voice takes --help for the authoritative, always-current flag set.
Example¶
$ keryx voice takes -w my-post
line take duration selected
1 1 3.41s
1 2 3.28s *
3 1 4.02s
$ keryx voice takes -w my-post --screen
line take duration silence score best selected
1 1 3.41s 0 0.040
1 2 3.28s 0 0.000 ← *
3 1 4.02s 2 1.290
3 2 3.10s 0 0.000 ←
See also¶
keryx voice gen—--lines 3,5,7 --takes Mre-rolls a subset.keryx voice pick— promote a take, or--best <line>to auto-promote the screened winner.keryx reel lock— freeze an approved take against re-rolls.