with one click
assemblyai-transcription
// Use when transcribing audio files with speaker diarization. Triggers on TRANSCRIBE keyword.
// Use when transcribing audio files with speaker diarization. Triggers on TRANSCRIBE keyword.
Create, update, delete, and query Google Calendar events using gcallm CLI, MCP tools, or direct API calls.
Rule-based methodology for essay development. Load this index first, then load specific essay type file based on task.
Comprehensive guide for managing Claude Code snippets v2.0 - discovering locations, creating snippets from files, searching by name/pattern/description, and validating configurations. Use this skill when users want to create, search, or manage snippet configurations in their Claude Code environment. Updated for LLM-friendly interface with TTY auto-detection.
Style guide and primer for writing in Warren Zhu's voice. Use when drafting emails, essays, blog posts, technical documents, consulting deliverables, presentations, or any writing for or as Warren. Covers philosophical sensibilities, stylistic patterns, characteristic moves, tone calibration, and professional/technical writing registers. Also useful when understanding Warren's intellectual background and preferences for advising him.
Use when interacting with Harvard Canvas LMS - fetching courses, assignments, grades, submissions, modules, calendar events. Trigger with CANVAS keyword.
Interact with Google Drive API using PyDrive2 for uploading, downloading, searching, and managing files. Use when working with Google Drive operations including file transfers, metadata queries, search operations, folder management, batch operations, and sharing. Authentication is pre-configured at ~/.gdrivelm/. Includes helper scripts for common operations and comprehensive API references. Helper script automatically detects markdown formatting and sets appropriate MIME types.
| name | AssemblyAI Transcription |
| description | Use when transcribing audio files with speaker diarization. Triggers on TRANSCRIBE keyword. |
| pattern | \b(TRANSCRIBE)\b[.,;:!?]? |
When the user says "TRANSCRIBE" without specifying a file, automatically find the latest audio file in ~/Downloads/:
/bin/ls -lt ~/Downloads/ | grep -iE '\.(m4a|mp3|mp4|wav|flac|ogg|webm|mov|avi|mkv)$' | head -1
Then transcribe that file. Always confirm which file you found before proceeding.
/Users/wz/Desktop/.venv (assemblyai is installed here)ASSEMBLYAI_API_KEY environment variable (see ~/.zshrc or ~/.zprofile)The API requires speech_models parameter. Without it, transcription will fail with:
"speech_models" must be a non-empty list containing one or more of: "universal-3-pro", "universal-2"
Always use this config:
config=aai.TranscriptionConfig(
speaker_labels=True,
speech_models=['universal-3-pro', 'universal-2'],
language_detection=True
)
Always pipe output directly to file to avoid large terminal output.
First transcribe to a temp file next to the audio (using the original audio filename):
cd /Users/wz/Desktop && source .venv/bin/activate && python3 -c "
import assemblyai as aai
import os
aai.settings.api_key = os.environ['ASSEMBLYAI_API_KEY']
transcript = aai.Transcriber().transcribe(
'/path/to/audio.m4a',
config=aai.TranscriptionConfig(
speaker_labels=True,
speech_models=['universal-3-pro', 'universal-2'],
language_detection=True
)
)
if transcript.status == aai.TranscriptStatus.error:
print(f'ERROR: {transcript.error}')
else:
for u in transcript.utterances:
print(f'Speaker {u.speaker}: {u.text}')
print()
" > '/path/to/AudioFileName - transcript.md' 2>&1
Important: Use 2>&1 to capture errors to the file too, and check the file for errors after.
Timeout: Set bash timeout to 300000ms (5 min) since transcription can take a while for long audio.
After transcription, read the transcript and rename the file based on its content:
YYYY-MM-DD - <Topic Summary>.md
2026-02-05 - Product Permissions Architecture Discussion.md2026-01-28 - Client Onboarding Call.md2026-02-03 - Weekly Team Standup.mdAlways copy the final transcript to ~/.transcripts/ with intelligent grouping by subdirectory:
| Subdirectory | When to use |
|---|---|
work/poly/ | Poly/Baoyuan property management business calls |
work/meetings/ | General work meetings, standups |
work/interviews/ | Job interviews, candidate screens |
personal/ | Personal calls, conversations |
academic/ | Lectures, office hours, study groups |
misc/ | Anything that doesn't fit above |
mkdir -p ~/.transcripts/<subdirectory>
cp '/path/to/YYYY-MM-DD - Topic Summary.md' ~/.transcripts/<subdirectory>/
Use your best judgment to categorize. When unsure, use misc/.
If there's an obvious project-specific location where the transcript belongs, also copy it there. Use judgment:
./claude_files/ or a relevant docs foldercontacts/ directory exists for that client~/.transcripts/ archive is sufficient)| Feature | Cost |
|---|---|
| Core transcription | $0.37/hour ($0.00617/min) |
| Speaker diarization | +$0.36/hour ($0.006/min) |
| Total with diarization | $0.73/hour (~$0.012/min) |
Audio: mp3, mp4, wav, flac, ogg, webm, m4a Video: mp4, mov, avi, mkv (extracts audio) Max file size: 5GB
config = aai.TranscriptionConfig(
speaker_labels=True, # Enable diarization (always use)
speech_models=['universal-3-pro', 'universal-2'], # REQUIRED
language_detection=True, # Auto-detect language
speakers_expected=2, # Hint for expected speakers (optional)
punctuate=True, # Add punctuation
format_text=True, # Format numbers, dates, etc.
word_boost=["specific", "terms"], # Boost recognition of specific words
)
After transcription, identify speakers by name if obvious from context:
When renaming speakers, do a find-and-replace across the entire transcript.
After all copies are done, provide a brief summary: