Логотип VocalStackЛоготип VocalStack
VOCALSTACK ДЛЯ SANITY

Расшифровки, по которым можно делать запросы

Кнопка «Транскрибировать» рядом с аудио в документах Sanity Studio. Расшифровка сохраняется в документе как редактируемый текст и фразы с таймингом, поэтому GROQ, ваш фронтенд и поиск читают её как любое другое поле.

SANITY STUDIO 3+ · REACT 18+ · NODE 20+ · ОТ $0.20 ЗА ЧАС АУДИО
acme.sanity.studio/structure/episode;42
AcmeStructureVision
ContentEpisodesHostsPages
EpisodesВыпуск 42: Строим у всех на видуEpisode 41: PricingEpisode 40: Hiring
ЗаголовокВыпуск 42: Строим у всех на виду
Аудио
MP3episode-042.mp346.3 MB · audio/mpeg
Расшифровка
Транскрибация31:06 / 48:20
Стоп
00:00С возвращением в программу. Сегодня: выпускать рано.
00:07Первая версия была сырой, и в этом был весь смысл.
Publish

Запросы через GROQ

Расшифровка и её фразы с таймингом хранятся в документе, поэтому GROQ и GraphQL API возвращают их вместе со всем остальным.

Прогресс на виду

Поле показывает, сколько аудио уже готово, и переживает перезагрузку страницы. «Стоп» отменяет задачу, которая вам больше не нужна.

Редакторы всё контролируют

Расшифровка — это обычный текст, который редактор может исправить, с той же историей и публикацией, что и весь документ.

Ключ остаётся на сервере

Studio обращается к одному маршруту на вашем собственном сервере, где хранится API-ключ. Ключ никогда не попадает в браузер.

НАСТРОЙКА

Один плагин, одно поле, один маршрут

Добавьте плагин в sanity.config.ts, поле vocalstack.transcript рядом с аудио в схеме и маршрут VocalStack во фронтенд (маршрут Next.js или любой Node- или edge-сервер). Маршрут хранит API-ключ, поэтому тот никогда не попадает в браузер.

01Установите плагин с GitHub и добавьте его в конфигурацию Studio.
02Добавьте маршрут VocalStack во фронтенд, указав API-ключ в его окружении.
03Добавьте поле vocalstack.transcript рядом с полем аудиофайла и нажмите «Транскрибировать».
bash
npm install github:vocalstack/sanity-plugin
typescript
// app/api/vocalstack/[...path]/route.ts
import { createVocalStackHandler } from '@vocalstack/sanity/server'

// The key is read from VOCALSTACK_API_KEY
const handler = createVocalStackHandler({ sanity: { projectId, dataset, token } })
export { handler as GET, handler as OPTIONS, handler as POST }

// sanity.config.ts
import { vocalstack } from '@vocalstack/sanity'

export default defineConfig({
  plugins: [vocalstack({ handlerURL: 'https://www.example.com/api/vocalstack' })],
})

// schemas/episode.ts
defineField({ name: 'audio', type: 'file' }),
defineField({ name: 'transcript', type: 'vocalstack.transcript' }),
ПАРАМЕТРЫ

Под вашу архитектуру

Разумные значения по умолчанию и хук для каждого места, где ваша настройка отличается.

handlerURL

Где на вашем сервере смонтирован маршрут VocalStack. Studio обращается только к этому адресу.

audioField

Какое файловое поле документа содержит аудио. По умолчанию — первое, в котором есть аудиофайл.

spokenLanguage

Язык речи в аудио. Не указывайте, чтобы он определялся автоматически.

fileURL

Адрес, с которого VocalStack забирает аудио. По умолчанию — адрес файла в CDN Sanity; для приватных файлов верните подписанный адрес.

allowedOrigins

Каким адресам Studio разрешено вызывать маршрут.

ЦЕНЫ

Без платы за плагин

Вы платите VocalStack только за транскрибированное аудио — по тому же тарифу, что в Панели управления и API. Посекундная тарификация, минимум 5 мин за транскрипцию.

ФАЙЛЫ$0.20за час

Каждый транскрибированный аудиофайл — с говорящими, пунктуацией и таймингом.

Часто задаваемые вопросы

Открыть на GitHubЧитать README