Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

93 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Singevery

Teleprompter transparente para cantar: reconoce la canción que suena y muestra la letra sincronizada con karaoke en tiempo real.

Repositorio: https://github.com/Grizaceo/Singevery

Widget de escritorio transparente para cantar con la letra sincronizada: reconoce la canción que suena, muestra la letra con karaoke (palabra a palabra) y ofrece ayudas de lectura por idioma (furigana, romaji, ruby, romanización) más traducción línea a línea opcional.

App activa: apps/desktop — Electron + React 19 + TypeScript.

Descargas

Página del proyecto: grizaceo.github.io/Singevery — qué hace, capturas y descarga directa.

Latest release

Descarga el instalador de Windows desde GitHub Releases (Singevery-Setup-x.y.z.exe).

SmartScreen: el instalador no está firmado con certificado de código. Windows puede mostrar "Windows protegió tu PC". Pulsa Más información → Ejecutar de todos modos para continuar.

Demo

Demo de Singevery — reconocimiento, letra sincronizada y modos de lectura

▶ Ver video (MP4) · HD

En la grabación:

  1. Pill SING o atajo Ctrl+Alt+S con música sonando (Spotify / navegador).
  2. Letra sincronizada sobre el escritorio (overlay transparente + click-through).
  3. Modos de lectura (原 / ふ / か / A / T) y ajustes (⚙).

Qué hace

  • Reconoce música desde el audio del sistema o el micrófono (Shazam gratuito en modo auto, con fallback a AudD).
  • Sincroniza la letra en tiempo real con resaltado karaoke y corrección de deriva.
  • Overlay transparente sobre el escritorio: modo pill (SING), click-through mientras cantas, arrastrable.
  • Windows: integración con el reproductor del SO vía SMTC (Spotify, navegador, etc.) como reloj maestro cuando está disponible.

Ayudas de lectura (cantar en idiomas que no lees)

La app detecta el script del texto y genera lecturas sin destruir la letra original. El render <ruby> sirve igual para furigana japonés que para pinyin o romanización sobre cirílico.

Idioma / script Qué genera
Japonés Furigana (kana sobre kanji), romaji Hepburn, modo kana (todo en hiragana)
Coreano Romanización Revisada + ruby por palabra
Chino Pinyin por carácter + ruby (tonos opcionales en Ajustes)
Cirílico (ruso, etc.) Romanización latina por palabra + ruby (el “romaji” del cirílico)
Español · italiano · francés · alemán Transcripción IPA (fonética real, no aproximación de teclado)
Otros Transliteración latina + ruby por token cuando hay espacios

IPA: cómo suena de verdad

El romaji te dice qué teclas pulsar; el IPA te dice qué hacer con la boca. En japonés し es /ɕi/, no “shi”. En alemán ich es /ʔɪç/ y Nacht es /naxt/: la misma ⟨ch⟩ escrita, dos sonidos distintos según la vocal anterior. En italiano notte es /notːe/ con la consonante larga que ocupa tiempo musical.

Para las cuatro lenguas de alfabeto latino la app identifica el idioma sola a partir de la letra completa (palabras funcionales, diacríticos y secuencias ortográficas). Si no hay evidencia suficiente, o la canción está en un idioma sin motor —inglés, portugués—, no anota nada: es preferible no responder a transcribir con las reglas equivocadas.

Idioma Precisión Qué queda fuera
Español Exacta Sin acento tónico ni encadenamiento entre palabras. Norma seseo/distinción configurable en Ajustes
Italiano Exacta e/o abiertas o cerradas solo con tilde; z se transcribe sorda
Alemán Aproximada La cantidad de la vocal ante ⟨ch⟩ es léxica y se resuelve breve
Francés Aproximada Sin liaison; el final -ent verbal y algunos timbres son aproximados
Japonés Exacta Tabla kana→IPA exhaustiva (ver docs/PLAN_IPA_2026-08-03.md)

Detalle de las reglas y de cada límite: docs/IPA_LENGUAS_LATINAS_2026-08-04.md.

Modos en el widget

Control Función
原 / Orig Texto original
ふ / Ruby Lectura encima (furigana, pinyin, romanización…)
Solo hiragana (japonés; ideal si aún no lees kanji/katakana)
A Romanización latina
ふ+A / R+A Ruby + romanización debajo de la línea actual
IPA Transcripción fonética (japonés, español, italiano, francés, alemán)
ふ+IPA Furigana arriba + IPA debajo (japonés)
T Traducción de la línea actual
? Ayuda con ejemplos por idioma (+ enlace a Tofugu Hiragana en japonés)

Las etiquetas se adaptan al idioma de la canción (p. ej. 原/ふ/A en japonés, Orig/Ruby/A en el resto).

Color de letra

En Ajustes (⚙) → Color de letra puedes personalizar cómo se ve el texto del teleprompter:

Opción Descripción
Presets Blanco, amarillo, cian, verde, rosa, negro
Color personalizado Selector libre (#hex)
Ajuste automático (experimental) Mide el brillo del fondo bajo el widget y elige texto claro u oscuro para mantener contraste

El color elegido se aplica a toda la jerarquía visual (línea actual, adyacentes, lejanas, karaoke cantado, romaji y traducción). En modo automático se conserva tu color preferido mientras contraste con el fondo; si no, cae a blanco u oscuro puro.

Experimental: el ajuste automático captura una miniatura de pantalla cada ~3 s (procesada en memoria, sin almacenar ni enviar). Puede producir un ligero parpadeo en Windows. Mientras está activo, el widget no aparece en grabaciones ni en compartir pantalla (setContentProtection).

Traducción

Al activar T se traduce la canción completa y el resultado se cachea en disco. El botón cicla entre tres vistas: sin traducción → bajo la línea actual → texto paralelo (letra y traducción en columnas, iluminándose a la par).

Funciona sin configurar nada. El proveedor por defecto es MyMemory, que no pide registro ni clave. Su cuota gratuita es de ~5.000 caracteres al día (unas 3 canciones); poniendo un email en Ajustes sube a 50.000 (~30 canciones).

Configura en Ajustes (⚙) → Traducción:

Campo Descripción
Proveedor MyMemory (default, sin clave) · Modelo local · DeepL o Google con tu clave
Email / API key En MyMemory, email opcional para subir la cuota. En DeepL/Google, tu clave
Idioma destino Código ISO (default es)

Modelo local (sin límites y sin internet)

Traduce con un modelo en tu propio equipo: sin cuota diaria, sin conexión y sin mandar las letras a un tercero. Necesitas un runtime con API compatible con OpenAI; el más simple es Ollama:

ollama pull translategemma:4b   # ~3 GB, Gemma 3 afinado para traducir, 55 idiomas

Luego en Ajustes → Traducción → Modelo local. Por defecto apunta a http://localhost:11434/v1/chat/completions con translategemma:4b; ambos campos son configurables, así que también sirven LM Studio, llama.cpp server o Jan, y cualquier otro modelo (translategemma:12b, gemma3, etc.).

Con un 4B la canción tarda unos segundos en CPU y es casi instantánea con GPU.

DeepL y Google dan buena calidad sin instalar nada, pero requieren que consigas una credencial.

Estructura del repo

apps/desktop/     App Electron (main + renderer React)
native/smtc/      Sidecar C# (.NET 8) — metadata del reproductor Windows
native/wakeword/  Referencia para activación por voz (opt-in)
legacy/           Código archivado (Python/kiosk) — no se mantiene

Puesta en marcha

cd apps/desktop
npm install
npm run dev:electron      # Windows: GPU on · Linux: GPU off (auto)
npm run dev:electron:win  # Windows explícito
npm run dev:kill          # Si no abre tras Ctrl+C: mata Electron + puerto 5173

Windows (recomendado)

  1. Compila el sidecar SMTC (sincronización precisa con Spotify, etc.):

    .\native\smtc\build.ps1
  2. Opcional: crea apps/desktop/.env con tu token de AudD (fallback):

    AUDD_API_TOKEN=tu_token
  3. Opcional: en Ajustes → Traducción, pon tu email (sube la cuota gratuita) o una clave de DeepL/Google para mejor calidad.

  4. Atajo global Ctrl+Alt+S o clic en la pill SING para expandir e identificar.

Guía completa: apps/desktop/WINDOWS.md.

Reconocimiento de música

Modo Descripción
Auto (default) Shazam (gratis, sin API key) → AudD si hay token y Shazam no reconoce
Shazam Solo cliente no oficial
AudD Requiere AUDD_API_TOKEN en .env

Selector en Ajustes (⚙) del widget. También ahí: opacidad, color de letra, fuente, traducción (MyMemory sin clave, o DeepL/Google) y pinyin con/sin tonos.

Scripts útiles

npm test              # Vitest (456 tests)
npm run build         # Build producción
npm run package       # Instalador Windows (electron-builder)

Generar el instalador (Windows)

Desde apps/desktop, con Node y el SDK de .NET 8 instalados:

npm run package:full

Esto (1) publica el sidecar SMTC autocontenido (npm run build:smtc — el equipo destino no necesita .NET instalado), (2) hace el build de producción, (3) regenera build/THIRD-PARTY-NOTICES.txt con las licencias de las dependencias y (4) produce release/Singevery-Setup-<version>.exe.

El instalador muestra la licencia (build/license.txt) y deja junto al ejecutable GUIA_DE_USO.md, AVISO_LEGAL.md, LICENSE.txt y THIRD-PARTY-NOTICES.txt. Si solo cambiaste código de la app (no el sidecar), basta npm run package.

El instalador no va firmado con certificado de código (SmartScreen avisará la primera vez). Para distribución seria, considerar un certificado OV/EV más adelante.

Documentación para usuarios

  • Guía de uso — instalación y uso paso a paso, sin conocimientos técnicos.
  • Aviso legal — licencia, letras y servicios de terceros, marcas y privacidad.

Licencia

MIT — Copyright © 2026 Gris. Licencias de terceros: se generan en apps/desktop/build/THIRD-PARTY-NOTICES.txt y se instalan con la app.

About

Transparent Windows karaoke teleprompter: recognizes playing music and shows synced lyrics with word-by-word highlight, multi-language reading aids, and optional translation.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages