macOS-capable workflow for WeChat Channels video accounts:
- directly capture and download audio from the currently playable WeChat Channels video on macOS;
- optionally collect account-level video links and available metrics from a local helper API;
- download each video's audio from WeChat Channels media detail data;
- transcribe audio with faster-whisper;
- merge transcript plus metrics into Markdown/JSON/CSV;
- package the final text/data output as a ZIP.
For a single currently playable video on macOS: yes, after one-time setup. The Mac direct downloader starts a local proxy, captures media requests while you play the target video in WeChat desktop, and saves an audio-only .m4a.
For the older batch account workflow: not literally. Account-level metadata is tied to your own logged-in WeChat session and a local helper API. The batch workflow expects an API compatible with:
POST /api/channels/contact/feed/listGET /api/channels/feed/profile
The default batch API base is http://127.0.0.1:2025. On Windows this was commonly provided by wx_channel; on macOS you still need a compatible local bridge for account-level metadata and media-detail capture.
- macOS with a logged-in WeChat desktop session
- Node.js 18+
- FFmpeg, FFprobe, curl, and zip on
PATH - Swift toolchain / Xcode Command Line Tools for the Mac direct helper
- Python 3.11 for the Mac proxy helper
- Python 3.10+ with
faster-whisperandctranslate2only if you also need transcription - a compatible local WeChat Channels helper API only if you need batch account capture
- CPU transcription is the macOS default; configure another faster-whisper device only after verifying it locally
git clone https://github.com/Evander764/wechat-channels-audio-transcripts.git
cd wechat-channels-audio-transcripts
npm run mac:setupTrust the local capture certificate once:
npm run mac:cert:installStart listening, play the target WeChat Channels video in WeChat desktop, then download the most relevant captured media:
npm run mac:listen
npm run mac:download-latest
npm run mac:stopTo download and immediately transcribe the selected capture:
npm run mac:listen
npm run mac:download-transcribe -- --match "标题关键词"
npm run mac:stopThe command prints JSON containing the captured media URL, saved audio file, transcript Markdown, and transcript JSON paths.
If several videos were captured, match by title/source text:
npm run mac:captures
npm run mac:download-latest -- --match "标题关键词"If network capture is unavailable, record the current WeChat window audio for a fixed duration:
npm run mac:record-current -- --duration-seconds 30Direct downloads write audio files to:
~/Movies/WeChat Channels Downloads/
The direct helper stores local state in:
~/Library/Application Support/WeChat Channels Audio Transcripts/
When asking Codex to download one playable WeChat Channels video on a Mac, the expected flow is:
- Run
npm run mac:doctor. - If setup is missing, run
npm run mac:setupandnpm run mac:cert:install. - Run
npm run mac:listen. - Open WeChat desktop and play the target video long enough for the media request to appear.
- Run
npm run mac:captures. - Run
npm run mac:download-transcribe -- --match "标题关键词"when a transcript is required, ornpm run mac:download-latest -- --match "标题关键词"for audio only. - Run
npm run mac:stop.
If the network capture list stays empty, use:
npm run mac:record-current -- --duration-seconds 30That fallback records the current WeChat window audio instead of downloading the network media URL.
Use this only when you need full account metadata, transcripts, manifests, and ZIP handoff files.
For full setup instructions, including paths for Codex users and manual ZIP
users, see INSTALL.md.
npm run setupOn Windows, the bootstrap helper can create the project config, runtime folders, and transcription Python environment:
npm.cmd run bootstrap:windowsIf you do not use the bootstrap helper, create a Python environment for transcription manually:
python3 -m venv .runtime/transcript-venv
.runtime/transcript-venv/bin/python -m pip install --upgrade pip
.runtime/transcript-venv/bin/python -m pip install faster-whisper ctranslate2Edit wechat.config.json:
- replace
accounts[0].usernamewith the raw Video Channels username from your local helper; - set
accounts[0].nameandslug; - keep
transcription.pythonas.runtime/transcript-venv/bin/python, or set it to another local Python path; - keep
transcription.deviceascpuandcomputeTypeasint8unless you have verified another faster-whisper backend; - adjust
outputRoot,workRoot, download concurrency, and transcription settings if needed.
Then check the local environment:
npm run doctorCapture metadata:
npm run captureRun the whole pipeline:
npm run runOr run individual stages:
npm run download
npm run transcribe
npm run enrich
npm run verify
npm run packageThe real config file is wechat.config.json, created from config.example.json.
Important fields:
wxChannelBaseUrl: localwx_channelAPI base URL.accounts: one or more target accounts withname,slug, and rawusername.outputRoot: final metadata, manifest, transcript, and ZIP output directory. macOS default:~/Movies/WeChat Channels Downloads.workRoot: dynamic working directory for audio, segment JSON, and temporary media.download.concurrency: parallel audio downloads. Start with8; reduce if links fail often.transcription.python: Python executable. Use.runtime/transcript-venv/bin/pythonon macOS.transcription.model: faster-whisper model, for examplesmall,medium, orlarge-v3.
Metadata capture writes:
wechat_channels_metadata_full_<timestamp>/
all_accounts.metadata.json
all_accounts.metadata.csv
all_accounts.videos_only.json
all_accounts.videos_only.csv
summary.json
Audio/transcription working files write:
audio_transcripts_dynamic/
audio/
meta/
segments/
texts/
tmp/
batch-log.jsonl
Final enriched output writes:
wechat_transcripts_with_metrics_existing_<timestamp>/
manifest.json
manifest.csv
texts_with_metrics/
json/
The package command creates a ZIP containing text/data outputs, not the large audio files.
npm run mac:listenchanges the active macOS network service proxy to127.0.0.1:18088; runnpm run mac:stopto restore the previous proxy settings.npm run mac:cert:installmay prompt for local keychain permission.- Direct download only works for media already playable by the current logged-in WeChat user. It does not bypass paid access, DRM, account restrictions, or platform protection.
- If WeChat cannot open Video Channels after starting helpers, close the helper, open Video Channels first, then start the helper again.
- If the helper API is unavailable,
npm run doctorwill reportwx_channelas a hard failure. That means metadata capture cannot run yet. - Do not treat active terminal output as completion proof. Use
npm run verifyagainst the final manifest. - Video play count may not always be available from the captured API. The pipeline keeps it when present and leaves it blank when unavailable.
Use this only for content you have the right to process. The scripts rely on your own logged-in WeChat session and local helper APIs; they do not include credentials, cookies, downloaded media, or private account data.