Repository navigation
[Artifact Forest 7/9] Add local speech-to-timed-transcript provider #428
Description
2026-10-12 — implementation merged; qualification deferred
PR #439 was merged with explicit maintainer authorization at 31822e5348dd7793b1beb8a79817809aa0dc00c4. Tests, compilation/builds, schema validation, formatting/linting, native qualification, and CI remain deferred; merge does not establish acceptance or release readiness. This issue stays open for the recorded qualification work. Implementation work now moves to existing issue #429; no new feature scope is added by this status update.
Outcome
Add an offline-first speech-recognition provider that turns audio or an extracted audio stream into a versioned timed transcript, then allows ordinary transcript/subtitle derivatives.
Provider direction
Evaluate whisper.cpp or another maintained local-first open provider against:
- platform support;
- model licensing/distribution;
- deterministic/configuration-dependent behavior;
- timestamps;
- language handling;
- resource requirements;
- cancellation/progress;
- output formats;
- current maintenance.
Do not hardcode one provider into the domain model; the capability is provider-neutral.
Pipeline
audio/video
↓
audio stream selection/extraction
↓
speech.transcribe
↓
renderflow.timed-transcript/v1
├── SRT
├── WebVTT
├── JSON
└── text
Requirements
- Provider registry entry, version/model fingerprint, and explicit model artifact identity.
- Offline execution by default.
- Bounded CPU/memory/time/output behavior where practical.
- Progress/cancellation.
- Word/segment timestamp policy.
- Language selection/detection evidence.
- Transcript confidence/limitations.
- No claim that ASR transcript is human-approved copy.
- Preserve exact audio source digest and extraction lineage.
Acceptance criteria
- One redistribution-safe spoken-audio fixture produces deterministic-enough evidenced timed transcript output.
- SRT/WebVTT/JSON/text derivatives are produced from one normalized transcript rather than independent ASR runs.
- Model/provider identity participates in cache/checkpoint keys.
- Missing provider/model/resource requirements fail clearly.
- No network is required by the default provider path.
- Source media remains unchanged.
Non-goals
Speaker diarization, translation, or advanced temporal editing unless separately scoped.
Candidate provider observation — 2026-09-25
Primary current candidate: https://github.com/ggml-org/whisper.cpp
The repository is public and not archived. Evaluate its current CLI/model/runtime/licensing surface during implementation; keep speech.transcribe provider-neutral so another local engine can satisfy the same contract later.
Audit-to-roadmap reconciliation — 2026-10-21
Audit: https://github.com/egohygiene/renderflow/blob/audit/flow-suite-20261021T025401Z/audits/flow-suite-20261021T025401Z.md · Complete roadmap: #367
Offline-first speech implementation merged; model/executable identity and ASR candidate status remain explicit.
Bounded preparation: Review bounded fixture, resource and model license/provenance plan.
Full outcome remains gated (*): #427 semantics and exact local provider/model/toolchain qualification after deferral.
The maintainer's implementation-sprint qualification deferral remains in force. This audit ran no Renderflow tests, compiler/build/Cargo resolution, product lint/format/schema qualification, native/CLI/provider/visual execution, installers or new CI. Reading existing exact-source provider records is not a qualification rerun. Source implementation and authored tests are not passing-test, native-fidelity, release or downstream-consumer evidence.
This is an additive planning note. The full original issue, acceptance criteria, scope, parent references and historical checkpoints remain authoritative and unchanged. No acceptance box or issue is closed by this audit. Recommended ledger parent: #421.
Activity
Merge pull request #439: local speech and mapped exports [skip ci]