17 Commits

Author SHA1 Message Date
ThePlasmak a2dc2c2ef9 fix: skip-existing multi-format check, no-timestamps format list, speaker-names warning, batch skip count
- Fixed --skip-existing in multi-format mode (--format srt,text) to check
  ALL format outputs before skipping, not just the first one
- Fixed --no-timestamps conflict check to include lrc, ass, ttml formats
  (all require timing info, same as srt/vtt/tsv)
- Fixed --speaker-names silently doing nothing without --diarize; now
  prints a clear warning
- Batch summary now shows skipped file count when --skip-existing is
  active: Done: 8 files (3 skipped), ...

Bumps version to 1.5.1
2026-02-19 00:26:50 +08:00
ThePlasmak 28b64fdcae fix: setup.sh --check hangfix + skill.json ffmpeg optional
- setup.sh --check: replace full pyannote.audio import with
  importlib.util.find_spec + metadata version lookup; avoids
  30-60s CUDA init, check now completes in ~12s
- skill.json: move ffmpeg from requires.bins to optionalBins;
  ffmpeg not needed for basic transcription since PyAV handles
  decoding (only needed for --burn-in, --normalize, --denoise,
  --channel, --export-speakers)
- CHANGELOG.md + SKILL.md: document both fixes
2026-02-18 18:35:20 +08:00
ThePlasmak 9050eaf1a5 fix(transcribe): clean-filler word list, fuzzy search tokens, URL temp cleanup
- fix(clean-filler): remove_filler_words() now also filters seg['words'], so
  --max-chars-per-line / --max-words-per-line subtitle formatters (SRT/VTT/ASS/TTML)
  correctly omit filler words; previously only seg['text'] was cleaned
- fix(clean-filler): add leading/double-comma and orphaned-comma cleanup
  (e.g. ',,' → ',', ',?' → '?') to prevent punctuation artifacts
- fix(search): fuzzy match now checks individual word tokens so short queries
  like 'wrld' correctly match 'world'; also adds multi-word phrase fallback
- fix(detect-language-only): clean up URL-downloaded temp dirs before exit;
  continue processing remaining files on error instead of exiting immediately
2026-02-18 18:35:20 +08:00
ThePlasmak 01f130b1eb fix: suppress onnxruntime WSL2 device-discovery warning on every run
Pre-import onnxruntime at startup with stderr redirected to /dev/null,
so the harmless [W:onnxruntime:Default, device_discovery.cc:211] warning
about missing /sys/class/drm/card0/device/vendor is silenced before any
real output begins. Subsequent lazy imports (Silero VAD) hit the cache.

docs(skill): add missing ASS/LRC/HTML trigger phrases and batch chapters caveat

- Add 'ASS subtitles', 'aegisub format', 'LRC subtitles', 'timed lyrics',
  'HTML transcript', 'confidence-colored transcript' to trigger phrases
- Note that --chapters-file takes a single path and overwrites in batch mode
2026-02-18 18:35:20 +08:00
ThePlasmak 4316f88c4c fix(multi-format): create output dir in single-file mode
When --format srt,text is used with a single file and -o <path> (no
trailing slash, directory doesn't exist yet), the code was falling
through to the file-path branch and writing all formats to the same
file. Fix: treat output as directory whenever multiple formats are
requested and the path has no extension.

Also expand SKILL.md agent guidance with explicit 'only add when' rules
for all new v1.5.0 features (--clean-filler, --channel, --max-chars-per-
line, --detect-paragraphs, --speaker-names, --hotwords, --prefix,
--detect-language-only, --stats-file, --parallel, --retries, --burn-in,
--keep-temp, --output-template, multi-format), and update output format
relay guidance to cover ASS, LRC, multi-format, stats, and language
detection.
2026-02-18 18:35:19 +08:00
ThePlasmak 9bc3ab42c3 docs: improve agent guidance for all v1.5–1.13 features
- Expand 'When to Use' with: podcast RSS, language-map, search, chapters,
  speaker export, CSV output, batch ETA
- Add trigger phrases for all new features (search, chapters, TTML,
  speaker export, CSV, podcast, language-map)
- Rewrite 'Agent guidance' section with per-feature rules for all flags
  added since v1.5: search, chapters, speaker export, language-map, RSS,
  filter-hallucinations, merge-sentences, output format relay guidance
- Add 'Output format for agent relay' guidance: when to show output to
  user directly vs write to -o file
- Add chapter stdout separator: '=== CHAPTERS (N) ===' header so agents
  can distinguish chapter list from transcript text
- Expand tags: add podcast, chapters, search, csv, ttml, batch
2026-02-18 18:35:19 +08:00
ThePlasmak 5ba682d774 feat: add CSV output, language-map, batch ETA estimate
- --format csv: spreadsheet-ready output with header row (start_s,end_s,text);
  proper RFC 4180 quoting via stdlib csv module; adds speaker column when diarized
- --language-map MAP: per-file language override for batch mode via fnmatch
  glob patterns; inline ('*.mp3=en,*.wav=fr') or JSON file ('@map.json');
  parallel mode uses copy.copy(args) for thread safety
- Batch ETA: sequential batch jobs show [N/total] filename | ETA: Xm Ys
  before each file; computed from avg time/file * remaining files;
  printed to stderr so OpenClaw surfaces it to users in real time

Bumps version to 1.13.0
2026-02-18 18:35:19 +08:00
ThePlasmak d15785e69c feat: add TTML output, transcript search, chapter detection, speaker audio export
- --format ttml: W3C TTML 1.0 (DFXP) broadcast-standard subtitle format
  compatible with Netflix, Amazon Prime, BBC; supports speaker labels and
  --max-words-per-line
- --search TERM: search transcript for keyword and print matching segments
  with timestamps; --search-fuzzy for approximate matching
- --detect-chapters: auto-detect chapter breaks from silence gaps between
  segments; configurable via --chapter-gap (default 8s); three output
  formats (youtube/text/json); --chapters-file to save to file
- --export-speakers DIR: after --diarize, export each speaker's audio turns
  as separate WAV files using ffmpeg aselect filter; respects --speaker-names

Bumps version to 1.12.0
2026-02-18 18:35:19 +08:00
ThePlasmak ad473b8f3c feat: v1.8.0 distil auto-condition, log-level, ffmpeg clarification, quick-ref additions
- Auto-disable condition_on_previous_text for distil-* models (HuggingFace rec.)
  to prevent repetition loops with the default distil-large-v3.5 model
- Add --condition-on-previous-text override flag to opt back in
- Add --log-level flag (debug/info/warning/error) for library log control
- Clarify ffmpeg is optional: only needed for --burn-in/--normalize/--denoise
  (PyAV bundled with faster-whisper handles basic audio decoding)
- Add --hotwords, --prefix, --revision examples to Quick Reference table
- Update distil model table note about auto-disable behaviour
- Update SKILL.md to v1.8.0
2026-02-18 18:35:19 +08:00
ThePlasmak c0837d9cf2 fix(faster-whisper): rename --without-timestamps to --no-timestamps 2026-02-18 18:35:19 +08:00
ThePlasmak 5cb6fbb54f feat(faster-whisper): add 17 new features — upstream params + LRC/detect-language/merge-sentences/stats/stdin/template (v1.6.0) 2026-02-18 18:35:19 +08:00
ThePlasmak d6e18ba7b0 refactor: remove --precise flag, alignment is automatic
- wav2vec2 alignment runs automatically whenever word timestamps are needed
- --precise kept as hidden backward-compat alias for --word-timestamps
- Simpler UX: fewer flags, same result
2026-02-17 18:54:17 +08:00
ThePlasmak 79719689a7 feat: auto-run wav2vec2 alignment whenever word timestamps are computed
- Alignment now triggers for --word-timestamps, --precise, --diarize, --min-confidence
- --precise becomes shorthand for --word-timestamps (both get alignment)
- No overhead for basic transcription (alignment only runs when words needed)
- Update SKILL.md: document auto-alignment behavior, simplify agent guidance
2026-02-17 18:49:48 +08:00
ThePlasmak d02a385363 feat: precise word timestamps via wav2vec2 forced alignment (--precise)
- Add --precise flag for wav2vec2 forced alignment (~10ms word accuracy)
- Uses torchaudio MMS model (multilingual, 1000+ languages)
- Model cached across files for efficient batch processing
- Runs before diarization when both flags used (improves speaker assignment)
- Auto-enables word timestamps when --precise is set
- Graceful fallback: segments with unsupported chars keep original timestamps
- Install torchaudio alongside torch in setup.sh
- Update SKILL.md with --precise documentation and agent guidance
2026-02-17 18:46:23 +08:00
ThePlasmak c7f565aa72 feat: SRT/VTT subtitles, speaker diarization, URL input, batch processing, initial prompt, confidence filtering
- Add --format srt/vtt for subtitle output (word timestamps auto-enabled)
- Add --diarize for speaker identification via pyannote.audio
- Add URL/YouTube auto-download via yt-dlp
- Add batch processing with glob patterns, directories, multiple files
- Add --initial-prompt to condition model with domain terminology
- Add --min-confidence to filter low-confidence segments
- Add --skip-existing for resumable batch workflows
- Add performance stats (duration, processing time, realtime factor)
- Unify output format under --format flag (text/json/srt/vtt)
- Keep --json as hidden backward-compatible alias
- Update setup.sh with --diarize flag for optional pyannote install
- Comprehensive SKILL.md rewrite with new features documented
2026-02-17 18:09:46 +08:00
ThePlasmak db3dd4fe0e Fix review issues before ClawdHub publish
- Update LICENSE copyright to ThePlasmak
- Clarify speed claims: 4-6x vs Whisper, ~20x realtime with GPU
- Improve argparse help with metavars, choices, better descriptions
- Simplify requirements.txt comment
2026-01-28 21:29:42 +08:00
ThePlasmak e9652fb421 Reorganize README: features, setup, usage, cross-platform 2026-01-28 21:10:14 +08:00