Files
hyperframes/docs
Xuanru Li 2c1d9d50d2 feat(cli): read a whole recording as voice, effect and music lines (#6056)
* feat(cli): read a whole recording as voice, effect and music lines

`hyperframes audio <file> --read` turns an episode or reference video into
time-stamped lines an agent can read or grep: sentences with rate, pitch and
ending; pauses; sound effects grouped by identical sound, with band, attack,
tail and level over the music; and the music bed split at its cut-outs into
pieces that start, resume, return or are new.

Effects and music come from stems separated by the service at
HYPERFRAMES_AUDIO_STEMS_URL (vocals, drums, bass, guitar, piano, other).
Without stems, effects are read from the mix outside speech; with neither
stems nor a transcript, voice and effects are not read, and each case is
reported in a warning. Results are cached per file content.

* refactor(cli): name the service error parse instead of commenting it

* fix(cli): call HeyGen's audio services with the CLI's HeyGen credential

Stems for `audio --read` and the `api` analysis provider only ran when
HYPERFRAMES_AUDIO_STEMS_URL / HYPERFRAMES_AUDIO_API_URL and
HYPERFRAMES_AUDIO_API_KEY were set, so someone with HEYGEN_API_KEY or a saved
`hyperframes auth login --api-key` still got "not set" and had to know the
internal route.

Both now default to /v3/audio/stems and /v3/audio/analysis on the HeyGen API
(HEYGEN_API_URL when set) with the credential the other HeyGen commands use.
The URL variables still point at another service, which then needs its own
HYPERFRAMES_AUDIO_API_KEY, so the HeyGen credential never goes to a host it was
not issued for.

* fix(cli): keep audio on the machine unless --quality best is asked for

`hyperframes audio` defaulted to --quality best, so anyone with a HeyGen
credential uploaded their audio, and could be billed, for an ordinary beats or
--read run. tts, transcribe and remove-background never leave the machine
unasked.

The default is now local for both measuring and --read. best is unchanged and
still uploads to /v3/audio/analysis and /v3/audio/stems. When a capability goes
unanswered because a service was left out, or --read reads without stems, the
warning says --quality best would add it.

* fix(cli): bound stem transfers and preserve recording timestamps

* fix(cli): an empty audio service URL keeps the service off

HyperFrames Desktop blanks HYPERFRAMES_AUDIO_API_URL and its key while
the analysis route is behind a flag, but gives runs HEYGEN_API_KEY and
HEYGEN_API_URL for its gateway. Falling back to that credential would let a
run that passes --quality best reach the route anyway. An empty URL now turns
the service off, whatever credential is present.

* fix(ci): capture package name in release-age exclusion

(cherry picked from commit f9c6ba3573)

* fix(cli): resend the stems request with its key until the service answers

The stems service answers once the stems are made, which can outlast the
connection, and answers 409 request_in_progress to a resend while the first
request runs. A failed job's reason is failure_message.

* fix(cli): retry incomplete stem separations

* test: validate audio mock route handlers before dispatch

* test: trace premature Windows CLI runner exits

* test: remove temporary Windows runner diagnostics
2026-10-22 13:22:38 +00:00
..
2026-10-21 19:19:45 +00:00