Skip to main content
Glama

VoiceCard

Клонируйте свой голос и превращайте его в видео с волновой формой, которым можно поделиться, — всё управляется через MCP. Без GUI. Только Apple Silicon.

Клонирование голоса теперь стало обычным делом. Отличие — доставка: короткий MP4 с красивой волновой формой, реагирующей на звук, воспроизводится прямо в WhatsApp, iMessage, Signal и Slack, где сырые аудиофайлы зависают, не автовоспроизводятся или не работают на iOS/Android. Каждый отправленный клип — это также реклама инструмента. В этом вся идея.

Фронтенд это MCP. Вы общаетесь с ним из Claude Code, Cursor или любого MCP-совместимого агента:

«Клонируй мой голос из ~/Desktop/me.mov (вот транскрипт), затем сделай 15-секундный клип в палитре Miami, говорящий „с днём рождения“, с моим фото в центре.»

Как это работает

Полностью автономно. Речь генерируется локально с помощью mlx-audio (Qwen3-TTS через MLX), видео с волновой формой рендерится с помощью MLX / Pillow и мультиплексируется с ffmpeg. Никакого облака, никакого Voicebox, никакого десктопного приложения.

Клонирование — это zero-shot обучение в контексте: оно обрезает ваш референс до ~12 секунд и использует его как условие. Нет этапа обучения и нет отдельной модели для каждого голоса.

Related MCP server: Rheo MCP Server

Требования

  • Mac на Apple Silicon (arm64). Проверяется при запуске.

  • Больше ничего устанавливать вручную не нужно. ffmpeg поставляется в комплекте (статический бинарник через imageio-ffmpeg); системный ffmpeg из PATH используется автоматически, если он есть.

Первый запуск — самый медленный

Сама установка быстрая, но она не скачивает модели ИИ. При первом вызове clone_voice / make_clip VoiceCard лениво подтягивает их в общий кэш Hugging Face (~/.cache/huggingface/hub/):

  • Qwen3-TTS веса (~несколько ГБ) — синтез речи.

  • Whisper (large-v3-turbo, ~1.5 ГБ) — используется для автоматической транскрипции референсов и для синхронизации субтитров.

Обе модели кэшируются, так что это происходит только один раз. Заложите несколько минут, немного трафика и ~несколько ГБ диска на первый вызов.

Аккаунт или токен Hugging Face не требуется — обе модели публичные и скачиваются анонимно. Hugging Face используется только как хостинг для загрузки. Однако анонимные загрузки ограничены по скорости; если первая загрузка медленная или ограничена, установите бесплатный токен для более быстрых/высокоскоростных загрузок (совершенно необязательно):

export HF_TOKEN=hf_xxx      # optional — only speeds up / de-throttles the first download

Установка

Требуется uv (brew install uv или однострочный установщик с этой страницы). Больше ничего — ffmpeg встроен, модели скачиваются сами.

Одной строкой, прямо с GitHub:

uv tool install git+https://github.com/JasonMakes801/voicecard-mcp

Затем зарегистрируйте его в Claude Code (команда voicecard теперь в вашем PATH):

claude mcp add -s user voicecard -- voicecard

Вот и всё. Попросите вашего агента выполнить clone_voice и make_clip.

git clone https://github.com/JasonMakes801/voicecard-mcp
cd voicecard-mcp
uv tool install .                      # or: uv run voicecard

# register the in-place checkout
claude mcp add -s user voicecard -- uv --directory "$PWD" run voicecard

Инструменты

Инструмент

Что делает

list_voices()

Перечисляет сохранённые голоса, каждый в паре со своим ref_text, ref_audio и сопутствующим avatar (или null).

palettes()

Перечисляет доступные палитры (имя + цвета) и отображает визуальный лист образцов (возвращает {palettes, swatch}); покажите образец, чтобы пользователь выбирал наглядно.

clone_voice(name, source, transcript?, photo?)

Клонирует из аудио- или видеофайла. Обрезает референс до ~12 секунд и сохраняет профиль. transcript необязателен — если его опустить, VoiceCard автоматически транскрибирует референс (Whisper). photo — необязательный сопутствующий аватар, копируется в профиль, чтобы голос и лицо путешествовали вместе.

speak(text, voice)

Генерирует речь клонированным голосом; возвращает путь к wav-файлу.

make_clip(text, voice, palette?, photo?, label?, aspect?, layout?, arc?, captions?)

Генерирует речь и рендерит доступный для обмена mp4 с волновой формой. Субтитры (всплывающие пузыри, синхронизированные с произнесением) включены по умолчанию; аватар берётся из сохранённого photo голоса, если не указан. Возвращает путь к mp4.

Палитры: Noir (по умолчанию), 70s Gold, Miami, Aurora, Sunset, Mint, Blueprint Соотношение сторон: square (1080², по умолчанию), portrait (9:16) Раскладка: linear (по умолчанию — круглое фото + компактная градиентная волновая форма ниже, в стиле Dynamic Island) · circle (центрированное кольцо спектра, реагирующее на звук) Дуга (только для раскладки circle): full (по умолчанию, зеркальное кольцо) · top (пики над верхней половиной)

Конфигурация (env)

Переменная

По умолчанию

VOICECARD_OUT

~/VoiceCard (профили + готовые клипы)

VOICECARD_MODEL

mlx-community/Qwen3-TTS-12Hz-1.7B-Base-bf16

VOICECARD_WHISPER

mlx-community/whisper-large-v3-turbo

VOICECARD_FFMPEG

переопределяет бинарник ffmpeg (иначе системный PATH, иначе встроенный)

VOICECARD_URL

QR-цель, печатаемая на каждом клипе

VOICECARD_TAGLINE

слоган, печатаемый на каждом клипе

Тестирование

uv pip install -e ".[test]"

pytest tests/test_fast.py tests/test_mcp.py -q      # fast: no model, no network (~1s)
VOICECARD_RUN_MODEL_TESTS=1 pytest tests/test_integration.py -q   # real Qwen+Whisper (downloads GBs)
bash scripts/virgin_install_test.sh                 # fresh-venv install + smoke, from scratch
  • Быстрые (test_fast.py, test_mcp.py): целостность палитр, выравнивание субтитров (входные слова, тайминги STT), проверка аргументов и поверхность протокола MCP.

  • Интеграционные (test_integration.py, с ограничением): clone → speak → make_clip от начала до конца, проверяя, что mp4 содержит аудио+видео и ненулевую длительность.

  • Чистая установка (scripts/virgin_install_test.sh): устанавливает во временное виртуальное окружение и проверяет импорты, запасной вариант со встроенным ffmpeg (без brew), консольный скрипт и наборы тестов без моделей для установленного пакета.

Примечания

  • Выходной файл — стерео, +faststart, профиль H.264 High — настроен для автовоспроизведения прямо в мессенджерах.

  • Волновая форма стилизована так, чтобы всегда выглядеть живой, а не как диагностический анализатор спектра.

  • Выгрузка авторегрессионного декодера на Core ML / ANE не планируется (динамические формы + KV-кэш + последовательное декодирование плохо подходят для ANE). Единственное, что стоит изучить в будущем, — это выгрузка вокодера на Core ML.

Дорожная карта

  • Субтитры без Whisper (использование собственного выравнивания Qwen). Qwen3-TTS работает на 12 Гц и уже знает тайминги слов внутри через cross-attention (монотонная гряда от текстовых токенов к аудиокадрам). Сегодня мы восстанавливаем тайминги, запуская Whisper на выходе — надёжно, но это целая вторая модель. Вместо этого нужно пропатчить декодирование mlx-audio, чтобы извлечь cross-attention для целевой области (обрезав ICL-референс спереди), извлечь монотонное выравнивание и сопоставить текстовые токены со словами. Это уберёт Whisper из горячего пути для каждого клипа: в сочетании с передачей transcript при клонировании Whisper вообще не будет запускаться (или скачиваться) для обычного пользователя. Риск: внутреннее декодирование mlx-audio не является стабильным API, поэтому зафиксируйте версию и добавьте тест на расхождение (тайминги, полученные из Qwen, против Whisper на фикстуре; тест должен падать при расхождении). Примечание: выравнивать нечего — только BPE-токены текста → аудиокадры.

Лицензия

MIT. Вы несёте ответственность за клонирование только тех голосов, которыми владеете или на использование которых у вас есть разрешение.

Related MCP Connectors

Related MCP Servers