Back to skills
SkillHub ClubAnalyze Data & AIFull StackData / AI

voice-transcriber

Voice note transcription and archival for OpenClaw agents. Powered by Deepgram Nova-3. Transcribes audio messages, saves both audio files and text transcripts. Perfect for voice-first AI workflows, founder journaling, and meeting notes.

Packaged view

This page reorganizes the original catalog entry around fit, installability, and workflow context first. The original raw source lives below.

Stars
3,074
Hot score
99
Updated
March 20, 2026
Overall rating
C4.0
Composite score
4.0
Best-practice grade
B78.7

Install command

npx @skill-hub/cli install openclaw-skills-voice-transcriber-pro

Repository

openclaw/skills

Skill path: skills/aiwithabidi/voice-transcriber-pro

Voice note transcription and archival for OpenClaw agents. Powered by Deepgram Nova-3. Transcribes audio messages, saves both audio files and text transcripts. Perfect for voice-first AI workflows, founder journaling, and meeting notes.

Open repository

Best for

Primary workflow: Analyze Data & AI.

Technical facets: Full Stack, Data / AI.

Target audience: everyone.

License: MIT.

Original source

Catalog source: SkillHub Club.

Repository owner: openclaw.

This is still a mirrored public skill entry. Review the repository before installing into production workflows.

What it helps with

  • Install voice-transcriber into Claude Code, Codex CLI, Gemini CLI, or OpenCode workflows
  • Review https://github.com/openclaw/skills before adding voice-transcriber to shared team environments
  • Use voice-transcriber for development workflows

Works across

Claude CodeCodex CLIGemini CLIOpenCode

Favorites: 0.

Sub-skills: 0.

Aggregator: No.

Original source / Raw SKILL.md

---
name: voice-transcriber
description: Voice note transcription and archival for OpenClaw agents. Powered by Deepgram Nova-3. Transcribes audio messages, saves both audio files and text transcripts. Perfect for voice-first AI workflows, founder journaling, and meeting notes.
homepage: https://www.agxntsix.ai
license: MIT
compatibility: curl, jq, Deepgram API key
metadata: {"openclaw": {"emoji": "\ud83c\udf99\ufe0f", "requires": {"env": ["DEEPGRAM_API_KEY"], "bins": ["curl", "jq"]}, "primaryEnv": "DEEPGRAM_API_KEY", "homepage": "https://www.agxntsix.ai"}}
---

# Voice Transcriber 🎙️

Audio transcription via Whisper + voice note journaling.

## When to Use

- Transcribing voice messages or audio files
- Saving voice notes with full transcripts
- Converting speech to text from any audio format

## Usage

### Transcribe audio
```bash
bash {baseDir}/scripts/transcribe.sh /path/to/audio.ogg
bash {baseDir}/scripts/transcribe.sh /path/to/audio.ogg --out /path/to/output.txt
```

### Save voice note with transcript
```bash
python3 {baseDir}/scripts/save_voice_note.py /path/to/audio.ogg "Optional context"
```

## Supported Formats

OGG, MP3, WAV, M4A, FLAC, WEBM

## Credits
Built by [M. Abidi](https://www.linkedin.com/in/mohammad-ali-abidi) | [agxntsix.ai](https://www.agxntsix.ai)
[YouTube](https://youtube.com/@aiwithabidi) | [GitHub](https://github.com/aiwithabidi)
Part of the **AgxntSix Skill Suite** for OpenClaw agents.

📅 **Need help setting up OpenClaw for your business?** [Book a free consultation](https://cal.com/agxntsix/abidi-openclaw)


---

## Skill Companion Files

> Additional files collected from the skill directory layout.

### _meta.json

```json
{
  "owner": "aiwithabidi",
  "slug": "voice-transcriber-pro",
  "displayName": "Voice Transcriber Pro",
  "latest": {
    "version": "1.0.0",
    "publishedAt": 1771143858793,
    "commit": "https://github.com/openclaw/skills/commit/f5087869ea2d6bc1743453b3a446e7df99305d6c"
  },
  "history": []
}

```

### scripts/save_voice_note.py

```python
#!/usr/bin/env python3
"""
Save a voice note with transcript to the founder journal.
Stores both the audio file reference and full transcript.

Usage:
  save_voice_note.py <audio_path> <transcript_text> [--date 2026-02-15]
"""
import argparse
import os
import shutil
from datetime import datetime

VOICE_DIR = os.path.expanduser("~/.openclaw/workspace/memory/voice-notes")
JOURNAL_DIR = os.path.expanduser("~/.openclaw/workspace/memory/founder-journal")

def save(audio_path: str, transcript: str, date: str = None):
    date = date or datetime.now().strftime("%Y-%m-%d")
    time_str = datetime.now().strftime("%H%M")
    
    # Copy audio to voice-notes archive
    ext = os.path.splitext(audio_path)[1] or ".ogg"
    audio_dest = os.path.join(VOICE_DIR, f"{date}_{time_str}{ext}")
    if os.path.exists(audio_path):
        shutil.copy2(audio_path, audio_dest)
        print(f"Audio saved: {audio_dest}")
    
    # Append to daily journal
    journal_path = os.path.join(JOURNAL_DIR, f"{date}.md")
    existed = os.path.exists(journal_path)
    
    with open(journal_path, "a") as f:
        if not existed:
            f.write(f"# Founder Journal — {date}\n\n")
        f.write(f"## Voice Note ({datetime.now().strftime('%I:%M %p')})\n")
        f.write(f"**Audio:** `{audio_dest}`\n\n")
        f.write(f"**Transcript:**\n{transcript}\n\n")
        f.write("---\n\n")
    
    print(f"Journal updated: {journal_path}")
    return journal_path

if __name__ == "__main__":
    parser = argparse.ArgumentParser()
    parser.add_argument("audio_path")
    parser.add_argument("transcript", nargs="?", default="[No transcript available]")
    parser.add_argument("--date")
    args = parser.parse_args()
    save(args.audio_path, args.transcript, args.date)

```

### scripts/transcribe.sh

```bash
#!/bin/bash
# Transcribe audio using OpenRouter's OpenAI-compatible API (whisper)
# Usage: transcribe.sh /path/to/audio.ogg [--out /path/to/output.txt]

AUDIO_FILE="$1"
OUT_FILE="${2:-}"
OR_KEY="${OPENROUTER_API_KEY:-$(grep OPENROUTER_API_KEY ~/.openclaw/workspace/.env 2>/dev/null | cut -d= -f2)}"

if [ -z "$AUDIO_FILE" ] || [ ! -f "$AUDIO_FILE" ]; then
    echo "Error: Audio file not found: $AUDIO_FILE" >&2
    exit 1
fi

# Use OpenAI directly for Whisper (OpenRouter doesn't support audio transcription endpoint)
# Fall back to local ffmpeg + sending to a model
TRANSCRIPT=$(curl -sf "https://api.openai.com/v1/audio/transcriptions" \
    -H "Authorization: Bearer ${OPENAI_API_KEY:-notset}" \
    -F "file=@$AUDIO_FILE" \
    -F "model=whisper-1" \
    -F "response_format=text" 2>/dev/null)

# If OpenAI key not available, try OpenRouter with a workaround
if [ -z "$TRANSCRIPT" ] && [ -n "$OR_KEY" ]; then
    # Convert to base64 and ask an LLM to transcribe via multimodal
    # For now, use ffmpeg to convert to wav and use a simpler approach
    TRANSCRIPT=$(curl -sf "https://openrouter.ai/api/v1/audio/transcriptions" \
        -H "Authorization: Bearer $OR_KEY" \
        -F "file=@$AUDIO_FILE" \
        -F "model=openai/whisper-large-v3" \
        -F "response_format=text" 2>/dev/null)
fi

if [ -z "$TRANSCRIPT" ]; then
    echo "[Audio transcription unavailable - no API key configured]"
    exit 0
fi

if [ -n "$OUT_FILE" ]; then
    echo "$TRANSCRIPT" > "$OUT_FILE"
fi

echo "$TRANSCRIPT"

```

voice-transcriber | SkillHub