ListenHubSkills

Speech Recognition (ASR)

Transcribe audio files to text locally with the coli CLI — multilingual, with optional AI polish, fully offline, no API key.

Transcribe audio files to text using coli asr. It runs entirely on your machine through local speech recognition models, so it needs no ListenHub API key and no internet connection once the models are downloaded.

No ListenHub API key required. This skill is local-only — it does not call the ListenHub API. It needs the coli CLI, which is a separate tool from listenhub. See Prerequisites below.

Trigger

Invoke this skill with /asr, or use any of these phrases:

PhraseLanguage
transcribe / transcribe thisEnglish
ASREnglish
转录 / 识别音频Chinese
语音转文字Chinese
把这段音频转成文字Chinese

Prerequisites

This skill depends on the coli CLI, not the listenhub CLI. Install it once:

npm install -g @marswave/coli

Optional but recommended: install ffmpeg to support compressed formats (MP4, M4A, AAC, and similar):

# macOS
brew install ffmpeg

# Ubuntu / Debian
sudo apt install ffmpeg

WAV files transcribe without ffmpeg. Other formats need it for decoding.

First-run model download

The recognition models are not bundled with the CLI. On your first transcription, coli automatically downloads the model it needs (roughly 60 MB) to ~/.coli/models/. This happens once per model and takes a moment — the AI tells you it is downloading if the model is not present yet. Every later run reuses the cached model and starts immediately.

After the download, transcription is fully offline. No audio leaves your machine, and no network call is made.

Quick Example

Transcribe this file: meeting.m4a

The AI checks prerequisites, reads your config, confirms the model and polish settings, and runs the transcription locally. The result appears directly in the conversation.

Models

The skill ships with two recognition models. Pick based on the languages in your audio and whether you want extra signals like emotion.

ModelLanguagesDetects emotion / eventsNotes
sensevoice (default)Chinese, English, Japanese, Korean, CantoneseYesRecommended for multilingual content or when the language is unknown
whisper-tiny.enEnglish onlyNoSmaller, English-only model

Use sensevoice unless your audio is reliably English and you want the lighter model. sensevoice is the default and the better general-purpose choice — it covers five languages and returns the language, emotion, and audio-event signals described below.

Detected metadata

When you run with JSON output, sensevoice returns more than the transcript text. The result includes:

  • lang — the detected spoken language
  • emotion — the detected emotional tone of the speech
  • event — detected non-speech audio events (for example background sounds)
  • duration — the audio length in seconds

The AI surfaces lang, emotion, and duration alongside the transcript, and writes them into the Markdown export header. whisper-tiny.en returns the transcript and duration but does not produce emotion or event detection.

AI polish

Polish is a post-processing pass on the raw transcript, applied by the AI after coli returns the text. It is enabled by default.

ModeWhat you get
Polish on (default)The AI rewrites the raw transcript to fix punctuation, remove filler words, and improve readability — without changing meaning, summarizing, or paraphrasing
Polish offThe exact raw transcript as returned by the model, unedited

The raw transcript is always preserved. Even with polish on, you can ask the AI to show the original unedited text. To turn polish off for a single transcription, say so in the request (for example "transcribe interview.wav, no polish"); to change the default, reconfigure the skill.

Output

The transcript appears inline in the conversation, followed by the detected metadata:

Transcription complete

{transcript text}

─────────────────
lang: {lang} · emotion: {emotion} · duration: {duration}s

If polish is on, the polished version is shown and marked as AI-refined.

Markdown export

After presenting the result, the AI offers to save the transcript as a Markdown file in your current working directory:

{audio-filename}-transcript.md

The file contains the transcript (the polished version when polish is on) under a front-matter header recording the source file, date, model, duration, and detected language:

---
source: meeting.m4a
date: 2026-06-25
model: sensevoice
duration: 312s
lang: zh
---

{transcript text}

Configuration

Settings are stored per project in .listenhub/asr/config.json and created automatically on first use with sensible defaults (sensevoice, polish on). You don't need to configure anything to get started. To change defaults, ask the AI to reconfigure; it walks you through the model and polish choices and saves your answers.

SettingDefaultOptions
modelsensevoicesensevoice, whisper-tiny.en
polishtruetrue, false

CLI Command

The skill drives the coli asr command. JSON output is used so the AI can read the detected metadata:

# Transcribe with JSON output (returns text, lang, emotion, event, duration)
coli asr -j --model sensevoice "meeting.m4a"

# English-only, lighter model
coli asr -j --model whisper-tiny.en "talk.wav"

Run coli asr --help for the current set of flags supported by your installed version.

Composability

This skill produces transcript text that you can pass directly to other skills in the same conversation:

  • Transcribe a recorded interview, then feed it into /podcast as reference material
  • Transcribe a voice memo, then use it as input for /explainer

See Composing Skills for more chained workflows.

API Reference

None. This skill makes no API calls — it uses the local coli asr command only.

On this page