Skip to content
Back to skills

Speech To Text

ASecurity

Transcribe audio to text using each::sense AI. Convert speech from audio and video files into accurate text with punctuation, speaker detection, and timestamp support. Handles multiple languages, accents, and noisy environments. Use for: transcription, subtitles, meeting notes, interview transcripts, podcast show notes, accessibility, captioning. Triggers: speech to text, transcribe, transcription, audio to text, stt, voice to text, convert speech, dictation, subtitles, captions, whisper, tra...

  • 29 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added June 2, 2026
documentationpythongobashapidocumentation

Works with

  • cli
  • api

Security analysis

A100/100

Scanned June 2, 2026

npx -y skills add awesome-genmedia/skills --skill speech-to-text --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Speech To Text?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Speech To Text
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/awesome-genmedia-speech-to-text/badge)](https://www.skillsdirectory.com/skills/awesome-genmedia-speech-to-text)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: speech-to-text
description: "Transcribe audio to text using each::sense AI. Convert speech from audio and video files into accurate text with punctuation, speaker detection, and timestamp support. Handles multiple languages, accents, and noisy environments. Use for: transcription, subtitles, meeting notes, interview transcripts, podcast show notes, accessibility, captioning. Triggers: speech to text, transcribe, transcription, audio to text, stt, voice to text, convert speech, dictation, subtitles, captions, whisper, transcribe audio"
allowed-tools: Bash(curl *), WebFetch
---

# Speech to Text

Transcribe audio and video into accurate text using [each::sense](https://docs.eachlabs.ai/sense/overview) — the intelligent AI agent that automatically selects the best model for your request.

## Quick Start

> Requires an each::labs API key. Get one at [eachlabs.ai](https://eachlabs.ai).

### Using curl

```bash
curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "X-API-Key: $EACHLABS_API_KEY" \
  -d '{
    "messages": [{"role": "user", "content": [
              {"type": "text", "text": "Transcribe this audio recording into text. Include punctuation and paragraph breaks."},
              {"type": "image_url", "image_url": {"url": "https://example.com/meeting-recording.mp3"}}
            ]
          }
    ],
    "stream": false
  }'
```

### Using Python (OpenAI SDK)

```python
from openai import OpenAI

client = OpenAI(
    api_key="YOUR_EACHLABS_API_KEY",
    base_url="https://eachsense-agent.core.eachlabs.run/v1"
)

response = client.chat.completions.create(
    model="eachsense/beta",
    messages=[{"role": "user", "content": "Transcribe this audio recording into text. Include punctuation and paragraph breaks."}],
    # Images are included in the message content array above
)

print(response.choices[0].message.content)
```

### With Reference Image

```bash
curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "X-API-Key: $EACHLABS_API_KEY" \
  -d '{
    "messages": [{"role": "user", "content": [
              {"type": "text", "text": "Transcribe the speech in this video clip. Include timestamps for each sentence."},
              {"type": "image_url", "image_url": {"url": "https://example.com/presentation-video.mp4"}}
            ]
          }
    ],
    "stream": false
  }'
```

> Images are sent inside messages using the OpenAI multimodal content format. Maximum 4 images per request.

### Streaming

Set `"stream": true` for real-time SSE responses, or `"stream": false` for complete result in a single response. Streaming is useful for showing progress in UIs; non-streaming is simpler for scripts and automation.

## Transcription Capabilities

| Feature | Description | How to Request |
|---------|-------------|----------------|
| **Basic Transcription** | Plain text output with punctuation | "Transcribe this audio" |
| **Timestamps** | Time codes for each segment | "Transcribe with timestamps" |
| **Speaker Labels** | Identify different speakers | "Transcribe and label each speaker" |
| **Paragraph Breaks** | Logical text segmentation | "Transcribe with paragraph breaks" |
| **Language Detection** | Auto-detect spoken language | "Detect the language and transcribe" |
| **Translation** | Transcribe and translate | "Transcribe and translate to English" |
| **Summary** | Transcribe and summarize | "Transcribe and provide a summary" |
| **SRT Format** | Subtitle file format | "Transcribe in SRT subtitle format" |

## Supported Input Formats

| Type | Formats |
|------|---------|
| **Audio** | MP3, WAV, M4A, FLAC, OGG, AAC, WMA, WEBM |
| **Video** | MP4, MOV, AVI, MKV, WEBM |

## Prompt Tips

### Specify Output Format

Be explicit about how you want the transcription structured:

```
"Transcribe this audio verbatim, including filler words like
um and uh. Add timestamps every 30 seconds. Format as:
[00:00] Text here
[00:30] More text here"
```

### Request Speaker Identification

For multi-speaker audio:

```
"Transcribe this conversation and label each speaker as
Speaker 1, Speaker 2, etc. Start a new line when the
speaker changes."
```

### Clean Transcription vs. Verbatim

```
# Verbatim (includes everything)
"Transcribe exactly as spoken, including filler words, false starts, and repetitions"

# Clean (polished)
"Transcribe cleanly, removing filler words and false starts. Fix grammar for readability."
```

### Specify Language

For non-English audio or to guide recognition:

```
"This audio is in German. Transcribe it in German."
"This audio is in Japanese. Transcribe in Japanese and provide an English translation."
```

## Examples

### Meeting Transcription

```bash
curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "X-API-Key: $EACHLABS_API_KEY" \
  -d '{
    "messages": [{"role": "user", "content": [
              {"type": "text", "text": "Transcribe this meeting recording. Label each speaker (Speaker 1, Speaker 2, etc.). Add timestamps at the start of each speaker turn. Include a brief summary of key decisions and action items at the end."},
              {"type": "image_url", "image_url": {"url": "https://example.com/team-meeting.mp3"}}
            ]
          }
    ],
    "stream": false
  }'
```

### Subtitle Generation (SRT Format)

```bash
curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "X-API-Key: $EACHLABS_API_KEY" \
  -d '{
    "messages": [{"role": "user", "content": [
              {"type": "text", "text": "Transcribe this video into SRT subtitle format. Each subtitle should be 1-2 lines, maximum 42 characters per line. Format:\n\n1\n00:00:01,000 --> 00:00:04,000\nSubtitle text here\n\n2\n00:00:04,500 --> 00:00:08,000\nNext subtitle here"},
              {"type": "image_url", "image_url": {"url": "https://example.com/tutorial-video.mp4"}}
            ]
          }
    ],
    "stream": false
  }'
```

### Interview Transcript

```bash
curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "X-API-Key: $EACHLABS_API_KEY" \
  -d '{
    "messages": [{"role": "user", "content": [
              {"type": "text", "text": "Transcribe this interview recording. Format as a clean Q&A transcript with the interviewer questions in bold and interviewee answers in regular text. Remove filler words and false starts. Add paragraph breaks for readability."},
              {"type": "image_url", "image_url": {"url": "https://example.com/interview.mp3"}}
            ]
          }
    ],
    "stream": false
  }'
```

### Multilingual Transcription with Translation

```bash
curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "X-API-Key: $EACHLABS_API_KEY" \
  -d '{
    "messages": [{"role": "user", "content": [
              {"type": "text", "text": "This audio is a Spanish-language podcast episode. Transcribe it in the original Spanish, then provide a complete English translation below. Maintain paragraph structure in both versions."},
              {"type": "image_url", "image_url": {"url": "https://example.com/spanish-podcast.mp3"}}
            ]
          }
    ],
    "stream": false
  }'
```

### Podcast Show Notes

```bash
curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "X-API-Key: $EACHLABS_API_KEY" \
  -d '{
    "messages": [{"role": "user", "content": [
              {"type": "text", "text": "Transcribe this podcast episode and generate structured show notes. Include: 1) Episode summary (2-3 sentences), 2) Key topics discussed with timestamps, 3) Notable quotes, 4) Any resources or links mentioned, 5) Full transcript with speaker labels and timestamps."},
              {"type": "image_url", "image_url": {"url": "https://example.com/podcast-episode.mp3"}}
            ]
          }
    ],
    "stream": false
  }'
```

## Batch Transcription

```bash
# Transcribe multiple audio files
AUDIO_FILES=(
  "https://example.com/recording-1.mp3"
  "https://example.com/recording-2.mp3"
  "https://example.com/recording-3.mp3"
)

for AUDIO in "${AUDIO_FILES[@]}"; do
  curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
    -H "Content-Type: application/json" \
    -H "X-API-Key: $EACHLABS_API_KEY" \
    -d "{
      \"messages\": [{\"role\": \"user\", \"content\": \"Transcribe this audio with timestamps and speaker labels. Clean transcription, no filler words.\"}],
      \"image_urls\": [\"$AUDIO\"],
      \"stream\": false
    }"
  echo "---"
done
```

## Transcription Quality Tips

- **Clean audio** produces far better results. Remove background noise when possible before transcribing.
- **Specify the language** if it is not English to improve accuracy.
- **Shorter segments** (under 30 minutes) transcribe more reliably than very long recordings.
- **Single speaker** audio is easiest; multi-speaker requires explicit labeling instructions.
- **Technical jargon** can be specified: "This is a medical lecture; expect terminology like..." to improve accuracy.
- **Accented speech** is handled well, but mentioning the accent helps: "The speaker has a Scottish accent."

## Common Pitfalls

- **No format instructions** produces a wall of text. Specify paragraphs, timestamps, or speakers.
- **Expecting perfect verbatim** from noisy audio is unrealistic. Clean audio gives clean transcripts.
- **Very long audio** without chunking may hit limits. For hour-long recordings, consider splitting into segments.
- **Overlapping speakers** are hard for any system. Minimize crosstalk in source recordings.
- **Background music** competing with speech reduces accuracy. Voice-isolated audio works best.

## Related Skills

- [Text to Speech](../text-to-speech/SKILL.md) — Convert transcripts back to speech
- [Voice Generation](../voice-generation/SKILL.md) — Generate new voice audio from text
- [Video Generation](../video-generation/SKILL.md) — Create videos to pair with transcripts
- [Lyrics Generation](../lyrics-generation/SKILL.md) — Transcribe song lyrics from audio

## Documentation

- [each::sense Overview](https://docs.eachlabs.ai/sense/overview)
- [each::labs API](https://docs.eachlabs.ai)

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.