Autoalojado · Licencia MIT · Node.js 22+
Un bot privado que toma notas en tu canal de voz de Discord.
Escribe /grabar. Yo tomo las notas.
discord-scribe graba a cada participante por separado, transcribe en local con whisper.cpp y entrega una transcripción y un resumen en Markdown. Tú ejecutas tu propia aplicación de Discord en tu propio equipo. No hay ningún servicio alojado y nadie más puede invitar a tu bot.
Consíguelo en GitHub Lee la guía de instalación
Mientras graba, el bot se renombra a [GRABANDO] ...
Una pista por participante; cada una es sobre todo silencio. Whisper lee cada pista en local y las intervenciones se fusionan en orden cronológico.
/grabar- El bot entra en tu canal de voz y anuncia la grabación.
/parar- Transcribe, resume y publica el resultado en el canal de texto donde usaste
/grabar.
Resumen: general Ejemplo
2026-10-04 17:05
Resumen
El equipo ha acordado celebrar la presentación del trimestre el jueves 15 y ha repartido las tareas.
Tareas pendientes
- Preparar el guionAna
- Recopilar las cifrasLuis, el lunes
- Reservar la salaMarta
Cómo funciona
De /grabar a Markdown
-
Grabar
El bot entra en tu canal de voz, anuncia la grabación en el canal de texto y escribe un archivo WAV por participante. La grabación también se detiene sola cuando el canal se queda vacío.
-
Transcribir
Con
/parar, cada pista pasa porwhisper-clien tu equipo. Las intervenciones se fusionan en una única transcripción ordenada cronológicamente y los archivos WAV se borran en cuanto se transcriben. -
Resumir
De forma opcional,
claude -predacta el resumen. Se publica donde usaste/grabar, contranscript.mdadjunto. Si el resumen falla, la transcripción se guarda y se publica igualmente.
recordings/2026-10-04_1705-general/
transcript.md
summary.md
transcript.md[mm:ss] **Nombre**: texto, en orden cronológico, con las intervenciones consecutivas de una misma persona fusionadas.summary.md- Resumen, decisiones y tareas pendientes con su responsable.
Ejemplo de salida
Lo que te entrega el bot.
Tras /parar, la carpeta de la grabación contiene dos archivos Markdown. Aquí tienes un
ejemplo de cada uno, con participantes y una reunión inventados, con el formato que escribe el bot.
# Transcripción: general
_2026-10-04 17:05_
[00:04] **Ana**: Vale, empezamos. Hoy toca cerrar la fecha de la presentación del trimestre.
[00:15] **Luis**: Yo propondría el jueves 15, así tenemos una semana para preparar las diapositivas.
[00:27] **Marta**: Me va bien el jueves. Puedo reservar la sala si alguien prepara el guion.
[00:41] **Ana**: El guion lo preparo yo. Luis, ¿puedes recopilar las cifras?
[00:52] **Luis**: Sí, las tengo el lunes.
Un bloque por intervención, en orden cronológico, con las intervenciones consecutivas de una
misma persona fusionadas. Las marcas de tiempo se escriben mm:ss, o h:mm:ss a partir
de la primera hora.
# Resumen: general
_2026-10-04 17:05_
## Resumen
El equipo ha acordado celebrar la presentación del trimestre el jueves 15 y ha repartido las tareas: sala, guion y cifras.
## Decisiones
- La presentación será el jueves 15.
## Tareas pendientes
- Preparar el guion: Ana.
- Recopilar las cifras: Luis, el lunes.
- Reservar la sala: Marta.
El bot añade el título y la fecha. Claude escribe el resto, en las tres secciones que le pide su prompt: un resumen breve, las decisiones y las tareas pendientes, con responsable y fecha cuando se mencionan.
Los mensajes del bot en el chat y el resumen salen siempre en español, porque el prompt del resumen
está fijado en ese idioma. WHISPER_LANGUAGE y WHISPER_PROMPT solo cambian la
transcripción: el idioma hablado y el prompt inicial para la puntuación y el vocabulario.
Privacidad
Pensado para que todo se quede de tu lado.
0 bytes de audio salen de tu equipo.
Whisper se ejecuta en local y los archivos de audio se borran en cuanto se transcriben. Lo
único que puede llegar a Anthropic es texto de la transcripción, no audio, y solo para el
resumen opcional, a través de la CLI claude y tu propio inicio de sesión de Claude. Con
SUMMARY_ENABLED=false, claude no se ejecuta nunca.
El audio nunca sale de tu equipo
El audio de cada usuario va a una carpeta temporal, whisper.cpp lo transcribe en local y se borra en cuanto se transcribe.
El resumen es opcional
Solo el texto de la transcripción, no el audio, llega a Anthropic, a través de la CLI
claudey tu propio inicio de sesión de Claude. ConSUMMARY_ENABLED=false,claudeno se ejecuta nunca.Solo tus servidores
ALLOWED_GUILD_IDSes obligatorio. El bot ignora las interacciones de cualquier otro sitio, mensajes directos incluidos, y abandona cualquier otro servidor al que lo añadan.Solo quien tú permitas
Restringe
/grabarcon los permisos de comandos de Discord./pararsolo funciona para quien esté en el canal de voz que se está grabando.Nadie más puede invitarlo
Desactiva Public Bot en el Developer Portal y solo tú podrás añadir el bot a un servidor.
Tu token se queda en local
Solo vive en tu
.env, que git ignora. Un hook de pre-commit y un análisis en CI impiden publicar secretos.
Plataformas
Funciona en macOS, Linux y Windows.
macOS
brew install whisper-cppy, después, ejecútalo como LaunchAgent de launchd.Linux
Compila whisper.cpp desde el código fuente y ejecútalo como unidad de usuario de systemd.
Windows
Usa el zip de la release de whisper.cpp o compílalo, y ejecútalo como tarea programada al iniciar sesión.
Todos los sistemas necesitan Node.js 22+ y git. La CLI de Claude Code solo hace falta mientras los resúmenes estén activados. Los instaladores del servicio arrancan el bot al iniciar sesión y lo reinician si falla.
Conviene saber
- Los mensajes del bot en el chat y
summary.mdestán siempre en español. Whisper transcribe en español por defecto;WHISPER_LANGUAGEyWHISPER_PROMPTsolo cambian la transcripción. - La recepción de voz no es oficial en ninguna librería de Discord y puede romperse cuando Discord cambie su protocolo de voz.
- Una grabación por servidor a la vez; los trabajos de transcripción se ejecutan uno tras otro.
- La CI cubre las pruebas y la comprobación de tipos en los tres sistemas, no una sesión real de Discord.
Instalación
Clónalo, rellena .env, ejecútalo.
git clone https://github.com/Fishb0ness/discord-scribe
cd discord-scribe
npm install
npm run download-models # large-v3 (unos 3 GB) + Silero VAD
cp .env.example .env # en Windows: copy .env.example .env
npm start
También tendrás que crear tu propia aplicación de Discord y añadir su token y el ID de tu servidor a
.env. El README explica cada paso.
Preguntas frecuentes
Respuestas rápidas.
Extraídas de las secciones de privacidad, solución de problemas y limitaciones conocidas del README.
¿Mi audio sale alguna vez de mi equipo?
No. El audio de cada usuario se escribe en una carpeta temporal, whisper.cpp lo transcribe en local y se
borra en cuanto se transcribe. Solo el texto de la transcripción, no el audio, llega a Anthropic, y
únicamente para generar el resumen, a través de la CLI claude y tu propio inicio de sesión de
Claude. Con SUMMARY_ENABLED=false, claude no se ejecuta nunca.
¿Puede alguien más añadir el bot a su servidor?
No. Desactiva Public Bot en el Developer Portal y solo tú podrás añadirlo.
ALLOWED_GUILD_IDS es obligatorio: el bot ignora las interacciones de otros servidores
(mensajes directos incluidos) y abandona cualquier otro servidor al que lo añadan.
El bot ha abandonado mi servidor por sí solo. ¿Por qué?
Abandona todos los servidores cuyo ID no esté en ALLOWED_GUILD_IDS (el log dice
Leaving guild). La causa habitual es una errata o un ID equivocado, por ejemplo al migrar desde
el antiguo DISCORD_GUILD_ID. Activa el Modo desarrollador en Discord, haz clic derecho en el
servidor, elige Copiar ID del servidor, pégalo en .env, reinicia el bot y
vuelve a invitarlo.
Los comandos de barra no aparecen.
Se registran por servidor permitido al arrancar. Comprueba que el log diga
Registered slash commands, que el bot se añadiera con el scope
applications.commands y que el ID de servidor de ALLOWED_GUILD_IDS sea
correcto.
La transcripción sale vacía o llena de «Gracias.»
Falta el modelo VAD (el bot lo avisa al arrancar). Ejecuta npm run download-models. Sin él,
Whisper se inventa texto en los silencios, y la pista de cada participante es sobre todo silencio.
Tengo la transcripción, pero no el resumen.
Comprueba que claude -p "hi" funciona con el usuario que ejecuta el bot (los servicios se
ejecutan como tú, pero con un PATH más reducido) y que SUMMARY_ENABLED no es
false. Si el resumen falla, la transcripción se guarda y se publica igualmente, con un
aviso.
¿Hay límites con las grabaciones simultáneas?
Una grabación por servidor a la vez, y los trabajos de transcripción se ejecutan uno tras otro. Si el bot
se cierra de forma abrupta a mitad de una grabación, los WAV de cada usuario se quedan en
recordings/.work/ y no se procesan automáticamente.
¿Puede una actualización de Discord romperlo?
Sí. La recepción de voz no es oficial en ninguna librería de Discord y puede romperse cuando Discord cambie su protocolo de voz (DAVE); si ocurre, actualiza Dysnomia y Davey. La CI cubre las pruebas y la comprobación de tipos en macOS, Linux y Windows, no una sesión real de Discord.
Ejecuta tu propio escriba.
Tu aplicación de Discord, tu equipo, tus transcripciones. Licencia MIT, sin ningún servicio alojado de por medio.