Расшифровки, по которым можно делать запросы
Кнопка «Транскрибировать» рядом с аудио в документах Sanity Studio. Расшифровка сохраняется в документе как редактируемый текст и фразы с таймингом, поэтому GROQ, ваш фронтенд и поиск читают её как любое другое поле.
SANITY STUDIO 3+ · REACT 18+ · NODE 20+ · ОТ $0.20 ЗА ЧАС АУДИОЗапросы через GROQ
Расшифровка и её фразы с таймингом хранятся в документе, поэтому GROQ и GraphQL API возвращают их вместе со всем остальным.
Прогресс на виду
Поле показывает, сколько аудио уже готово, и переживает перезагрузку страницы. «Стоп» отменяет задачу, которая вам больше не нужна.
Редакторы всё контролируют
Расшифровка — это обычный текст, который редактор может исправить, с той же историей и публикацией, что и весь документ.
Ключ остаётся на сервере
Studio обращается к одному маршруту на вашем собственном сервере, где хранится API-ключ. Ключ никогда не попадает в браузер.
Один плагин, одно поле, один маршрут
Добавьте плагин в sanity.config.ts, поле vocalstack.transcript рядом с аудио в схеме и маршрут VocalStack во фронтенд (маршрут Next.js или любой Node- или edge-сервер). Маршрут хранит API-ключ, поэтому тот никогда не попадает в браузер.
vocalstack.transcript рядом с полем аудиофайла и нажмите «Транскрибировать».npm install github:vocalstack/sanity-plugin// 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 мин за транскрипцию.
Каждый транскрибированный аудиофайл — с говорящими, пунктуацией и таймингом.