La cabina de curación del dataset gold de Escakator: escuchás, corregís y aprobás cada palabra transcripta antes de que entre al modelo.
Guía para quien coordina el equipo de curación
Escakator es el pipeline de transcripción de audio educativo de Empujón:
un modelo de alineación escucha grabaciones y produce, palabra por palabra,
un texto con su tiempo exacto (start–end) y un
puntaje de confianza (score). Ese resultado crudo no es
todavía el dataset de entrenamiento — primero pasa por curación humana.
El modelo procesa el audio y genera un parquet mensual con cada palabra, su tiempo y su confianza.
Un curador escucha cada palabra en Escakator Studio y decide: ¿está bien? ¿hay que corregirla? ¿es ruido?
Las decisiones curadas se consolidan en el dataset final que entrena/evalúa el modelo.
Studio reemplaza a la web de curación. Existe también un dashboard web (Next.js) donde se puede curar desde el navegador — sigue funcionando, pero Escakator Studio la superó en funciones y es hoy la herramienta principal para el equipo de curación.
Si no tenés Linux, o simplemente querés probarlo ya, Studio Web no requiere instalar nada. Si preferís la app de escritorio (recomendada para uso diario intensivo), se instala una sola vez y cada nueva versión se ofrece sola desde ahí en adelante — no hay que volver a descargar nada a mano.
La misma app, corriendo en el navegador — para curadores que no tienen Linux. Nada que instalar ni actualizar: cada visita ya sirve la última versión.
Abrir Studio Web →Diferencia real con la app de escritorio: no hay copia local cifrada — cada sesión pide el audio en vivo al servidor (sin trabajo offline ni "no re-descargar lo ya escuchado"). Para eso, o si preferís la app nativa, usá Linux.
Paquete .tar.gz listo
para extraer y correr. Requiere ffmpeg y
pulseaudio-utils instalados (audio) — en Ubuntu/Debian:
sudo apt install ffmpeg pulseaudio-utils.
El archivo escakator-studio-0.4.0-linux-x64.tar.gz
se comparte por separado (adjunto) — este documento es la guía, no el hosting del binario.
sha256: 3606003e339ccf4c7a4757092b7d8f601a6d26a7dc71ab0b5cc8c3a3c228cbf5
Necesita una distro relativamente reciente (glib ≥2.79 —
por ejemplo Ubuntu 24.04+). En distros más viejas puede fallar con
undefined symbol: g_once_init_enter_pointer.
Todavía no hay un instalador oficial de Windows (falta empaquetarlo e instalador). Si tenés una máquina Windows y querés probarlo igual, podés compilarlo vos mismo — ver abajo.
No es un botón — hay que compilarlo en una máquina Windows real (no se puede hacer desde Linux ni Mac). Estos son los pasos:
Windows 10/11 de 64 bits, Visual Studio 2022
(Community alcanza) con el workload "Desktop development with C++",
Git, y el Flutter SDK.
Correr flutter doctor y confirmar que el check de Visual Studio esté en verde.
studio/git clone https://github.com/Empujon/escakator.git
cd escakator/studio
El repo hoy solo trae el scaffold de Linux. Hay que generar el de
Windows una vez: flutter config --enable-windows-desktop
y después flutter create --platforms=windows . (crea la
carpeta windows/ sin tocar el resto del código).
flutter pub get
flutter build windows --release
El resultado queda en build\windows\x64\runner\Release\ —
escakator_studio.exe junto con sus .dll y la
carpeta data\. Hay que mover/copiar la carpeta entera junta,
no solo el .exe suelto (todavía no hay instalador que
resuelva esto por vos).
⚠️ El audio no va a andar todavía. Studio reproduce el
audio invocando paplay (PipeWire/PulseAudio), que es
específico de Linux — no existe en Windows y el código todavía no tiene
una rama alternativa para ese sistema. Vas a poder compilar, loguearte
y navegar la interfaz, pero escuchar palabras va a fallar hasta que
alguien implemente un backend de audio para Windows (está en el
roadmap del proyecto, junto con un instalador con Inno Setup).
tar -xzf escakator-studio-0.4.0-linux-x64.tar.gz -C ~/escakator-studio
sudo apt install ffmpeg pulseaudio-utils — Studio decodifica el
audio con ffmpeg y lo reproduce con paplay.
Doble clic en el binario escakator_studio dentro de la carpeta
extraída, o ./escakator_studio desde la terminal.
Usuario y contraseña los da quien administra el sistema (no hay registro propio dentro de la app — ver la sección para responsables, más abajo).
La pantalla de login es simple a propósito: usuario, contraseña, y un botón. Todo lo demás es opcional.
Si el sistema tiene un llavero (KWallet en Linux), Studio puede recordar tu usuario y contraseña ahí — nunca en un archivo de texto plano. La próxima vez el campo de contraseña aparece precargado y oculto.
Todo lo que la app descarga (audio, selección, progreso) se guarda cifrado con AES-256 en el disco, y solo se abre con tu contraseña de login. Si cambiás la contraseña, esa copia vieja simplemente se descarta y se recrea — el servidor es la fuente de verdad, no se pierde nada.
Un link "Cambiar servidor" (oculto por defecto) permite apuntar la app a otro backend — por ejemplo un entorno de pruebas. Por defecto apunta a producción.
Todo pasa en una sola pantalla ("modo único"): la palabra, su forma de onda editable y todas las acciones posibles están siempre visibles — no hay que cambiar de modo para editar.
Cada parquet (normalmente un mes) es una "fuente". Se elige desde el selector de fuentes en el riel lateral.
Un slider de rango filtra qué palabras entran en la cola según el
score del aligner. Bajar el máximo (ej. a 0.70) es la
forma de "cazar" las palabras dudosas primero. El filtro queda
guardado entre sesiones.
Espacio reproduce/pausa. La pausa conserva la posición exacta — seguís donde dejaste, no desde el principio. Un slider de velocidad (0.5×–1×, tecla S) permite escuchar más lento sin que cambie el tono, para captar errores sutiles.
El texto se edita directo. Los bordes de tiempo se arrastran sobre la forma de onda (o con los botones ±10ms). Arrastrar con el botón central del mouse mueve el tramo entero; la rueda del mouse hace zoom; el minimapa de abajo permite moverse por todo el audio. Ctrl+Z deshace el último cambio de tiempo.
Con la palabra lista, se registra un veredicto (ver los seis botones de acción más abajo) y la app pasa sola a la siguiente.
La palabra y su tiempo están bien. Si los editaste, se guarda automáticamente como "editada" — no hace falta marcarlo aparte.
La transcripción es incorrecta y no vale la pena arreglarla.
Ese tramo de audio no es una palabra (silencio, ruido, superposición de voces) — distinto de "descartar".
El modelo se salteó una palabra por completo: se marca un tramo nuevo a mano y se escribe qué dice.
"No estoy seguro, que alguien más lo mire" — convive con cualquier otra acción y es visible para todo el equipo.
Deja un comentario de texto anclado a un punto exacto del audio, visible para todos los curadores (aparece como un pin en la forma de onda).
| Tecla | Acción |
|---|---|
| Tab | Siguiente sin guardar (descarta cambios, la palabra queda pendiente) |
| Alt + ← / → | Ir a la palabra anterior/siguiente sin guardar |
| U | Deshacer el último veredicto (la palabra vuelve a pendiente) |
| Espacio | Reproducir / pausar |
| S | Cambiar velocidad de reproducción (1× / 0.75× / 0.5×) |
| Ctrl + Z | Deshacer el último cambio de tiempo del tramo |
Mientras curás, un panel fijo te da tres formas de moverte por el dataset sin perder tu lugar.
Todas las palabras del parquet (o solo las pendientes), con buscador. La palabra actual se resalta sola. Un clic salta ahí, incluso si está fuera del filtro de confianza activo.
Dos pestañas: palabras marcadas "para revisar" y notas de audio sin resolver. Es el punto de partida natural para una pasada de control de calidad.
Los últimos ~12 veredictos de la sesión, con un botón para deshacer cada uno individualmente si te arrepentís.
Cada dos minutos la app avisa en qué fuente estás trabajando. Si otro curador tiene la misma fuente abierta, aparece como un punto verde con su nombre. Es solo informativo — nunca bloquea a nadie de curar la misma palabra; si dos personas curan lo mismo, vale la última decisión.
Un checkbox en la cola de curación. Desactivado, la cola también muestra palabras ya curadas (con una etiqueta de qué acción tuvieron) — así se puede volver atrás y revisar decisiones previas ("segunda pasada").
Una pantalla completa con toda la tabla del dataset gold: filtros por acción y por "en revisión", búsqueda por palabra/curador/nota, reproducción inline, y la opción de quitar una fila del dataset (la palabra vuelve a quedar pendiente — no se pierde nada).
Se instala Escakator Studio una sola vez. A partir de ahí:
Cada vez que iniciás sesión, Studio consulta si hay una versión más nueva publicada.
Si hay una nueva versión aparece un banner arriba con las notas de la versión y dos botones: "Actualizar y reiniciar" o "Después". Si no hay conexión o no hay nada nuevo, no aparece nada — la app nunca molesta.
Al actualizar, la app descarga el paquete, verifica su huella criptográfica (sha256) contra la publicada por el servidor, y recién ahí la instala y se reinicia sola. Si algo no coincide, no instala nada.
No hay registro propio dentro de Studio. Cada curador necesita una
cuenta creada de antemano desde el panel de administración de
Django (/admin/) del backend. Sin cuenta previa, no
se puede entrar a la app.
La palanca principal es el flag "marcar para revisar": cualquier curador puede marcar una palabra (propia o ajena) para que alguien más la mire. El panel de "Marcas" y el filtro "en revisión" de "Palabras curadas" arman una cola de QA lista para recorrer.
Las curaciones acumuladas no se convierten solas en el dataset
final: hace falta disparar la exportación
(POST /api/curation/export/ o
manage.py export_curated) para consolidarlas en
gold/curated/dataset.parquet. Hoy este paso vive fuera
de la app — es una tarea de backend/operaciones.
Studio solo muestra las estadísticas de tu propia sesión (racha,
ritmo, total). Si necesitás un desglose de productividad por
persona, el backend ya expone
GET /api/curation/stats/ con el detalle por curador —
hoy no tiene una pantalla propia dentro de la app.
Distribución simple: instalás el .deb (o
extraés el .tar.gz) una vez por persona. De ahí en más,
cada mejora llega sola por el banner de actualización — no hay que
volver a mandar un instalador nunca más.
No hay bloqueo. La presencia es solo informativa. Si ambos guardan un veredicto sobre la misma palabra, gana el último que se guardó — no hay conflicto ni error, simplemente prevalece la decisión más reciente.
Sí. "Borrar copia local" en el riel lateral solo limpia la caché cifrada en el disco (audio ya descargado, básicamente). El servidor sigue teniendo todo; la próxima vez que haga falta, se vuelve a descargar solo.
Está en el roadmap del proyecto, pero falta trabajo real: un backend de reproducción de audio para Windows, compilar en un runner Windows de verdad (no se puede desde Linux/Mac) y un instalador. No es simplemente "apretar un botón" — por eso hoy solo se distribuye Linux.
No. "Descartar" es: esta es una palabra real, pero la transcripción está mal y no vale la pena corregirla. "Ruido" es: este tramo de audio directamente no es una palabra (silencio, superposición de voces, ruido de fondo).
Existe una web de curación (Next.js) que todavía funciona y habla con el mismo backend, pero Escakator Studio la superó en funcionalidad y es la herramienta recomendada para el trabajo diario del equipo.