API REST · OpenAPI 3.1 · Servidor MCP
API para desarrolladores
Convierte archivos, enlaces y textos en acordes y letras, y luego lee y completa tu cancionero desde un script o un asistente.
- Nivel gratuito
- El mismo motor que la app
- Servidor MCP oficial
Lo que permite la API
Cada capacidad se abre con un alcance que marcas al crear tu clave.
Conversión
Audio, PDF, imágenes, texto o un enlace a songbook, PDF, MIDI, MusicXML y más.
Cancionero privado
Listar, leer, crear, modificar y ordenar tus canciones y playlists.
Perfiles públicos
Solo lectura: perfiles, canciones publicadas, seguidores. Ninguna pista de audio.
Separación de pistas
Una conversión (output=stems) separa la voz del acompañamiento; la herramienta /stem-tool separa en dos o cuatro pistas. Con una clave API, ambas exigen una cuenta Premium.
Cola de audio
Análisis de acordes y letras en la misma cola que la aplicación.
Detección de música IA
Un indicio de generación para un archivo, un enlace de Spotify, un enlace de audio directo o un ISRC.
Límites, cuotas y privacidad
La música generada por IA es cada vez más frecuente. Jam Jam te ayuda a buscar indicios: pega un enlace o sube un archivo para obtener un resultado orientativo.
Máx. 100 MB · Máx. 10 min · Spotify, enlace directo de audio o ISRC. YouTube no es compatible. Los enlaces de Spotify pueden analizarse solo a partir de un fragmento.
Un archivo en espera o en proceso por cuenta. Las cuentas Premium tienen prioridad en la cola.
Visitante: 2 análisis/día y 5/mes. Cuenta gratuita: 5/día y 50/mes. Premium: 30/día y 300/mes. Cuotas compartidas entre web, app y API; los errores no cuentan. Reinicio a medianoche UTC y el primer día del mes UTC.
El audio se envía a nuestro proveedor SH Labs para analizarlo. Según su política, no conserva el audio ni lo usa para entrenar modelos. Si falla, un archivo puede analizarse localmente cuando esté disponible el servicio de respaldo. Los archivos temporales se eliminan tras el procesamiento, error o cancelación. Tu cuenta conserva el nombre o enlace, fecha, estado y resultado durante 90 días; los visitantes, 24 h. Los límites de visitantes usan un token y un identificador de red seudonimizado, sin guardar la IP en claro.
Este índice no es una probabilidad ni una prueba. Un índice bajo no garantiza un origen humano.
Descubrir la herramientaFormatos admitidos
La lista completa y actualizada, con los límites exactos y lo que este servidor realmente ofrece, está siempre en GET /formats. En resumen:
Formatos de entrada
- Archivos de audio y vídeo
- PDF: acordes, letras, partitura, tablatura, cancionero escaneado
- Imágenes: acordes, letras, partitura, tablatura
- Texto plano, ChordPro, OnSong
- Enlaces y búsqueda web (page-link, web-search)
- MusicXML, MIDI
- JamSong, .zip mixto, songbook (pivote)
Formatos de salida
- Songbook (pivote JSON, siempre disponible)
- PDF: acordes, letras, partitura, tablatura, cuadrícula
- PNG, HTML, texto plano, ChordPro
- chords-lab, chords-csv, tonalidad y BPM
- MusicXML, MIDI (Premium)
- Letras sincronizadas: .lrc, .srt
- Vídeo karaoke (.mp4), audio de acompañamiento, JamSong
Empieza en cuatro pasos
La conversión es asíncrona: envías, sigues y recuperas.
-
Crear una clave
Ajustes › Claves de API. Prefijo
Gestionar mis claves de APIjj_live_, se muestra una sola vez, 5 claves por cuenta, revocables. -
Enviar
Un archivo, una URL o texto, con el formato de salida que quieras.
POST /jobs -
Seguir
Consulta respetando
Retry-After, o abre un flujo Server-Sent Events.GET /jobs/{id}GET /jobs/{id}/events -
Recuperar
El resultado sigue disponible 24 horas; después, 410 Gone.
GET /jobs/{id}/result
Ejemplos
Llamadas completas, listas para copiar tal cual.
Listar los formatos que sirve este servidorcurl
curl https://jam-jam.org/api/v1/formatsConvertir un archivo a PDFcurl
curl -X POST https://jam-jam.org/api/v1/jobs \
-H "Authorization: Bearer jj_live_xxxxxxxxxxxxxxxx" \
-F [email protected] \
-F inputFormat=pdf-songbook \
-F output=pdf-songbookConvertir una URL a un songbookcurl
curl -X POST https://jam-jam.org/api/v1/jobs \
-H "Authorization: Bearer jj_live_xxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{"url": "https://example.com/tabs/amazing-grace", "output": "songbook"}'Seguir el progreso (SSE o sondeo)curl
# Server-Sent Events
curl -N -H "Authorization: Bearer jj_live_xxxxxxxxxxxxxxxx" \
https://jam-jam.org/api/v1/jobs/jb_123/events
# Polling
curl -H "Authorization: Bearer jj_live_xxxxxxxxxxxxxxxx" \
https://jam-jam.org/api/v1/jobs/jb_123Descargar el resultadocurl
curl -H "Authorization: Bearer jj_live_xxxxxxxxxxxxxxxx" \
-OJ https://jam-jam.org/api/v1/jobs/jb_123/resultPython (requests)python
import time
import requests
API = "https://jam-jam.org/api/v1"
HEADERS = {"Authorization": "Bearer jj_live_xxxxxxxxxxxxxxxx"}
# 1. Discover formats
formats = requests.get(f"{API}/formats").json()
# 2. Submit a conversion
resp = requests.post(
f"{API}/jobs",
headers=HEADERS,
json={"url": "https://example.com/tabs/amazing-grace", "output": "songbook"},
)
resp.raise_for_status()
job = resp.json()
# 3. Poll until done (or use GET /jobs/{id}/events for SSE)
while job["phase"] not in ("done", "failed", "cancelled"):
time.sleep(job.get("etaS", 2))
job = requests.get(f"{API}/jobs/{job['id']}", headers=HEADERS).json()
# 4. Fetch the result
if job["phase"] == "done":
songbook = requests.get(f"{API}/jobs/{job['id']}/result/songbook", headers=HEADERS).json()
print(songbook["songs"][0]["title"])
else:
print("failed:", job.get("problem"))Analizar una canción con la detección de música IAcurl
# Availability and remaining quota (no key needed)
curl https://jam-jam.org/api/v1/ai-music/availability
# Analyze a file
curl -X POST https://jam-jam.org/api/v1/ai-music/jobs \
-H "Authorization: Bearer jj_live_xxxxxxxxxxxxxxxx" \
-F "[email protected]"
# Analyze a Spotify link
curl -X POST https://jam-jam.org/api/v1/ai-music/jobs \
-H "Authorization: Bearer jj_live_xxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{"url":"https://open.spotify.com/track/2JUDGXTQYGQZrVVUgq40Ke"}'
# History, current analysis, one analysis
curl -H "Authorization: Bearer jj_live_xxxxxxxxxxxxxxxx" \
https://jam-jam.org/api/v1/ai-music/history
curl -H "Authorization: Bearer jj_live_xxxxxxxxxxxxxxxx" \
https://jam-jam.org/api/v1/ai-music/jobs
curl -H "Authorization: Bearer jj_live_xxxxxxxxxxxxxxxx" \
https://jam-jam.org/api/v1/ai-music/jobs/JOB_ID
# Cancel
curl -X DELETE -H "Authorization: Bearer jj_live_xxxxxxxxxxxxxxxx" \
https://jam-jam.org/api/v1/ai-music/jobs/JOB_IDEjemplos de código
Ejemplos listos para ejecutar en curl, JavaScript y Python, de código abierto con licencia MIT:
Asistentes y MCP
Un asistente lee el contrato y construye sus llamadas. El servidor MCP oficial le da 42 herramientas listas.
Para agentes de IA
Lee primero GET /openapi.json: documenta la secuencia de llamadas recomendada (descubrir formatos, enviar, seguir, recuperar), la autenticación y las cuotas en un bloque x-agent-guide pensado para ser leído por un modelo. El llms.txt de este sitio enumera cada capacidad de conversión como una entrada propia.
Servidor MCP
Clave leída en JAM_JAM_API_KEY: solo aparecen las herramientas que permiten sus alcances. No sigue a nadie, no da me gusta y no publica nada por su cuenta.
En detalle
Un servidor oficial de Model Context Protocol expone la API a un asistente como 42 herramientas con el prefijo jj_: conversión de archivos y de texto, lectura y organización de tu cancionero privado, lectura de perfiles públicos, separación de stems, análisis de audio y cola, detección de música con IA y Mastering. Lee tu clave de API de la variable de entorno JAM_JAM_API_KEY y solo muestra las herramientas que permiten los alcances de esa clave. Se encarga del sondeo, los errores de cuota y la obtención de los archivos por ti, para que un asistente como Claude Desktop, Claude Code o Cursor pueda convertir un archivo u organizar tu cancionero sin que escribas ni una línea de código HTTP. Nunca sigue a nadie, ni da me gusta, ni publica una canción por su cuenta.
npx -y @jam-jam/convert-mcpPágina del paquete en npm: npmjs.com/package/@jam-jam/convert-mcp
{
"mcpServers": {
"jam-jam": {
"command": "npx",
"args": ["-y", "@jam-jam/convert-mcp"],
"env": {
"JAM_JAM_API_KEY": "jj_live_xxxxxxxxxxxxxxxx"
}
}
}
}Herramientas y alcances necesarios 42
formatos, archivos, texto y estado de los trabajos.
jj_list_formatssin alcancejj_convert_fileconvert:writejj_convert_textconvert:writejj_get_jobconvert:read
lo que puede hacer la clave y lo que le queda.
jj_check_usage
canciones y playlists.
jj_list_songsjj_get_songjj_list_playlistsjj_get_playlist
crear, modificar y borrar canciones y playlists.
jj_create_songjj_update_songjj_delete_songjj_create_playlistjj_update_playlistjj_delete_playlist
fichas de perfil, canciones y playlists publicadas, seguidores y seguidos.
jj_get_profilejj_list_profile_songsjj_list_profile_playlistsjj_list_followersjj_list_following
capacidades, trabajos y archivos.
jj_stems_capabilitiesconvert:readjj_stems_separatestems:writejj_stems_get_jobconvert:readjj_stems_list_jobsconvert:readjj_stems_get_fileconvert:readjj_stems_cancel_jobstems:write
analizar un archivo, y listar, leer y cancelar trabajos.
jj_audio_analyzeaudio:writejj_queue_listqueue:readjj_queue_get_jobqueue:readjj_queue_cancel_jobaudio:write
disponibilidad, análisis, historial y trabajos.
jj_ai_music_availabilityqueue:readjj_ai_music_analyzeaudio:writejj_ai_music_currentqueue:readjj_ai_music_get_jobqueue:readjj_ai_music_historyqueue:readjj_ai_music_cancel_jobaudio:write
capacidades, preajustes, renderizado, estado y cancelación de los trabajos.
jj_mastering_capabilitiessin alcancejj_list_mastering_presetsmastering:readjj_create_mastering_presetmastering:writejj_master_audiomastering:writejj_mastering_get_jobmastering:readjj_mastering_cancel_jobmastering:write
Referencia de endpoints
Todas las rutas servidas, por familia, con su alcance y su cuota. El contrato completo es el que vale.
- Conversión (jobs) 6
- Formatos 1
- Uso y cuotas 1
- Cancionero, lectura 4
- Cancionero, escritura 8
- Social, solo lectura 5
- Cola de audio y stems 4
- Separación de pistas 6
- Mastering 8
- Detección de música IA 7
- Estado y especificación 2
Conversión (jobs) 6
| Método | Ruta | Alcance | Cuota |
|---|---|---|---|
| POST | /jobsEnvía una conversión: un archivo (multipart/form-data), una URL o texto plano/ChordPro (application/json). Con output=stems también se requieren el alcance stems:write y una clave API Premium, con una cuota aparte (200/día UTC). | convert:write | cuota: conversión |
| GET | /jobs/{id}Estado de un trabajo (fase, porcentaje, pasos). Sondéalo respetando la cabecera Retry-After. | convert:read | cuota: ninguna |
| DELETE | /jobs/{id}Cancela un trabajo y borra sus archivos; solo devuelve la cuota si todavía estaba en cola. | convert:write | cuota: ninguna |
| GET | /jobs/{id}/eventsAlternativa al sondeo mediante Server-Sent Events: eventos state, done, error y ping de mantenimiento. | convert:read | cuota: ninguna |
| GET | /jobs/{id}/resultDescarga el artefacto principal (o uno concreto mediante ?artifact=). Disponible 24 horas tras crear el trabajo. | convert:read | cuota: ninguna |
| GET | /jobs/{id}/result/songbookEl pivote JSON canónico del songbook (acordes, letra, estructura), siempre disponible cuando el trabajo termina. | convert:read | cuota: ninguna |
Formatos 1
| Método | Ruta | Alcance | Cuota |
|---|---|---|---|
| GET | /formatsRegistro de los pares entrada/salida que este servidor realmente ofrece, con sus límites (maxBytes, maxPages, maxDurationS). | público (sin clave) | cuota: ninguna |
Uso y cuotas 1
| Método | Ruta | Alcance | Cuota |
|---|---|---|---|
| GET | /me/usageEl saldo de tus cuotas (conversión, lectura, escritura, stems) y los alcances que tu identidad puede ejercer realmente, en una sola llamada. | convert:read | cuota: ninguna |
Cancionero, lectura 4
| Método | Ruta | Alcance | Cuota |
|---|---|---|---|
| GET | /me/songsLista las canciones de tu cancionero privado, paginada por cursor opaco; usa updatedSince para una exportación incremental. | carnet:read | cuota: lectura |
| GET | /me/songs/{songId}Una canción completa de tu cancionero, con acordes, letra y estructura. | carnet:read | cuota: lectura |
| GET | /me/playlistsLista las listas de reproducción de tu cancionero, planas y de pertenencia múltiple, misma paginación que las canciones. | carnet:read | cuota: lectura |
| GET | /me/playlists/{playlistId}Una lista de reproducción y sus canciones, en orden, en formato resumido. | carnet:read | cuota: lectura |
Cancionero, escritura 8
| Método | Ruta | Alcance | Cuota |
|---|---|---|---|
| POST | /me/songsAñade una canción a tu cancionero, el mismo payload pivote que devuelve una conversión. Pon Idempotency-Key para evitar duplicados. | carnet:write | cuota: escritura |
| PUT | /me/songs/{songId}Reemplaza una canción por completo (declarativo); la crea con ese identificador si aún no existe. | carnet:write | cuota: escritura |
| PATCH | /me/songs/{songId}Modifica solo los campos enviados (tonalidad, cejilla, bpm, playlistIds...); también publica o despublica la canción en tu perfil. | carnet:write | cuota: escritura |
| DELETE | /me/songs/{songId}Elimina una canción de tu cancionero; supresión suave, idempotente, sale también de todas sus listas. | carnet:write | cuota: escritura |
| POST | /me/playlistsCrea una lista de reproducción; songIds es la lista ordenada de canciones que contiene, se conserva tal cual. | carnet:write | cuota: escritura |
| PUT | /me/playlists/{playlistId}Reemplaza una lista de reproducción por completo (declarativo); songIds es obligatorio. | carnet:write | cuota: escritura |
| PATCH | /me/playlists/{playlistId}Renombra, cambia el emoji de portada o reordena por completo las canciones de una lista. | carnet:write | cuota: escritura |
| DELETE | /me/playlists/{playlistId}Elimina la lista de reproducción en sí; sus canciones permanecen en tu cancionero y en sus otras listas. | carnet:write | cuota: escritura |
Social, solo lectura 5
| Método | Ruta | Alcance | Cuota |
|---|---|---|---|
| GET | /users/{handle}Cabecera del perfil público de una cuenta por su alias; una cuenta privada que no sigues devuelve una tarjeta cerrada (sin bio ni contadores). | social:read | cuota: lectura |
| GET | /users/{handle}/songsCanciones que una cuenta ha publicado en su perfil; audioPlayable solo es cierto si os seguís mutuamente. | social:read | cuota: lectura |
| GET | /users/{handle}/playlistsListas de reproducción que una cuenta ha publicado; songCount solo cuenta lo que realmente puedes ver. | social:read | cuota: lectura |
| GET | /me/followersCuentas que te siguen; status=accepted (por defecto) o requested. | social:read | cuota: lectura |
| GET | /me/followingCuentas que sigues; status=requested lista las solicitudes pendientes hacia cuentas privadas. | social:read | cuota: lectura |
Cola de audio y stems 4
| Método | Ruta | Alcance | Cuota |
|---|---|---|---|
| POST | /audioEncola el análisis automático (acordes, letra) y luego el ajuste, para una canción ya presente en tu cancionero. Misma cola que la aplicación; songId debe ser tuyo. | audio:write | cuota: ninguna |
| GET | /queueLa cola de procesamiento de audio de tu cuenta: activa, en espera (con rank) y la terminada de los últimos 7 días. | queue:read | cuota: ninguna |
| GET | /queue/{id}Un trabajo de la cola de audio, solo el tuyo; mismo 404 indiferenciado para un trabajo desconocido o de otra cuenta. | queue:read | cuota: ninguna |
| DELETE | /queue/{id}Cancela un trabajo de tu cola de audio; solo devuelve la cuota si el análisis aún no había terminado. | audio:write | cuota: ninguna |
Separación de pistas 6
| Método | Ruta | Alcance | Cuota |
|---|---|---|---|
| GET | /stem-tool/capabilitiesConsultar la disponibilidad, los límites, los modelos y la cuota de separación de pistas de quien llama. | convert:read | cuota: ninguna |
| GET | /stem-tool/jobsEnumerar las separaciones privadas de quien llama, con un cursor de paginación opcional. | convert:read | cuota: ninguna |
| POST | /stem-tool/jobsSubir un archivo de audio para separarlo en dos o cuatro pistas. Las claves API requieren Premium. | stems:write | cuota: stems |
| GET | /stem-tool/jobs/{id}Consultar el estado, el progreso y los archivos disponibles de una separación propia. | convert:read | cuota: ninguna |
| DELETE | /stem-tool/jobs/{id}Cancelar una separación propia. | stems:write | cuota: ninguna |
| GET | /stem-tool/jobs/{id}/files/{name}Obtener una URL firmada temporal para descargar una pista MP3 o un archivo ZIP. | convert:read | cuota: ninguna |
Con una clave API, todas estas rutas exigen una cuenta Premium; si no, la respuesta es un 403 (api-premium-required). Los límites de quien llama están en GET /stem-tool/capabilities.
Mastering 8
| Método | Ruta | Alcance | Cuota |
|---|---|---|---|
| GET | /mastering/capabilitiesLímites, rangos de ajustes, objetivos de sonoridad, preajustes integrados y derecho de renderizado. | público (sin clave) | cuota: ninguna |
| GET | /mastering/presetsListar tus preajustes de mastering. | mastering:read | cuota: ninguna |
| POST | /mastering/presetsCrear un preajuste de mastering (Idempotency-Key obligatorio). | mastering:write | cuota: ninguna |
| DELETE | /mastering/presets/{id}Eliminar uno de tus preajustes de mastering. | mastering:write | cuota: ninguna |
| POST | /mastering/jobsSubir un audio e iniciar un renderizado de mastering con un preajuste o ajustes. | mastering:write | cuota: mastering (3/semana gratis, ilimitado Premium) |
| GET | /mastering/jobs/{id}Consultar el estado de un trabajo de mastering. | mastering:read | cuota: ninguna |
| DELETE | /mastering/jobs/{id}Cancelar un trabajo de mastering. | mastering:write | cuota: ninguna |
| GET | /mastering/jobs/{id}/resultDescargar el WAV masterizado. | mastering:read | cuota: ninguna |
Detección de música IA 7 + 1 interna
| Método | Ruta | Alcance | Cuota |
|---|---|---|---|
| GET | /ai-music/availabilityDisponibilidad de la herramienta, formatos aceptados y cuotas restantes de la cuenta o del visitante. | público (sin clave) | cuota: ninguna |
| POST | /ai-music/jobsEnvía un archivo de audio, un enlace de Spotify, un enlace de audio directo o un ISRC. Un solo trabajo sin terminar por cuenta; YouTube no es compatible. | audio:write | cuota: detección IA |
| GET | /ai-music/jobsRecupera tu análisis en curso o el más reciente. | queue:read | cuota: ninguna |
| GET | /ai-music/jobs/{id}Sigue un análisis y lee su informe. | queue:read | cuota: ninguna |
| DELETE | /ai-music/jobs/{id}Cancela un análisis y borra sus archivos temporales. | audio:write | cuota: ninguna |
| GET | /ai-music/historyHistorial privado de los últimos 90 días, en páginas de 30; requiere cuenta, no se conserva ningún audio. | queue:read | cuota: ninguna |
| DELETE | /ai-music/history/{id}Borra un escaneo de tu historial; la cuota de un análisis correcto no se devuelve. | audio:write | cuota: ninguna |
| GET | /ai-music/source/{token}/{filename}Dirección temporal reservada al proveedor de detección, válida 180 segundos como máximo: ningún cliente la llama. | interna | cuota: ninguna |
Estado y especificación 2
| Método | Ruta | Alcance | Cuota |
|---|---|---|---|
| GET | /healthEstado del servicio y disponibilidad por motor (OMR, audio, vídeo...); no requiere autenticación. | público (sin clave) | cuota: ninguna |
| GET | /openapi.jsonEste contrato, en JSON legible por una máquina. | público (sin clave) | cuota: ninguna |
Contrato completo, legible por una máquina, siempre sincronizado con esta tabla:
https://jam-jam.org/api/v1/openapi.json Contrato OpenAPI Cuotas y límites
El saldo exacto está en GET /me/usage y en los encabezados X-Quota-* de cada respuesta.
Conversión
- Cuenta gratuita
- 6 / semana
- Premium
- 500 / mes
- Sin clave ni sesión
- 3 / 24 h
El mismo contador que la exportación del cancionero en la aplicación.
Lecturas y escrituras
| por día UTC | Cuenta gratuita | Premium |
|---|---|---|
| Lecturas (cancionero, perfiles) | 2000 | 20.000 |
| Escrituras (cancionero) | 200 | 5000 |
X-Read-Quota-* · X-Write-Quota-*
Pistas separadas por conversión
POST /jobs · output=stems Se exige una clave API Premium: sin Premium, la respuesta es un 403 (premium-required).
- Premium
- 200 por día UTC
Al llamar a estas rutas, garantizas que tienes los derechos sobre el audio enviado.
En detalle
POST /jobsconoutput=stemsdevuelve un.zip:vocals,accompanimentymanifest.json.- Alcances necesarios:
stems:writeyconvert:write. - Un contador propio, distinto del de las conversiones, contado por día UTC (no en 24 horas móviles).
- No hay que confundirlo con la herramienta Separación de pistas (
/stem-tool/*): allí una clave API exige una cuenta Premium, con sus propios límites (GET /stem-tool/capabilities).
Obtener una clave API
Crea una cuenta gratuita de Jam Jam, luego abre Ajustes, Claves de API en la aplicación (móvil o web) y crea una clave. Empieza por jj_live_ y solo se muestra una vez: cópiala enseguida. Máximo 5 claves por cuenta, revocables en cualquier momento.
Errores
Cada error, en cada ruta, es un objeto application/problem+json (RFC 9457) con un campo code estable sobre el que un cliente puede ramificar su lógica: quota-exhausted, rate-limited, unsupported-pair, not-found... El catálogo completo está en el esquema OpenAPI (components.schemas.Problem).
Retención
Los archivos subidos y los resultados generados se eliminan 24 horas después de crear el trabajo. Nada se conserva más tiempo, incluidos los trabajos fallidos. Recuperar un resultado pasado ese plazo devuelve 410 Gone.
Créditos de código abierto
Esta API se apoya en motores de código abierto reales. Usados honestamente, acreditados por su nombre:
- MuseScore 4
GPL-3.0Importación y renderizado de notación, partituras en PDF - Audiveris
AGPL-3.0Reconocimiento óptico de partituras escaneadas - Tesseract OCR
Apache-2.0Reconocimiento de texto en páginas escaneadas y fotos - faster-whisper
MITTranscripción de letras a partir del audio - Basic Pitch
Apache-2.0Detección de notas y melodía a partir del audio - FluidSynth
LGPL-2.1Renderizado del acompañamiento desde MIDI (SoundFont) - FFmpeg
LGPL-2.1 / GPL-2.0Codificación de audio y vídeo, conversión de formatos - Chromium
BSD-3-ClauseRenderizado en PDF de partituras y cuadrículas de acordes
Modelos y datos
Detección de intervinientes (Studio): modelo de huella de voz WeSpeaker ResNet34-LM, proyecto WeNet (github.com/wenet-e2e/wespeaker), entrenado con VoxCeleb (VGG, Universidad de Oxford), licencia CC BY 4.0 (creativecommons.org/licenses/by/4.0/). Modificado por Jam Jam: pesos convertidos a media precisión.