Communitygithub.com

Pavan-makwana/My-Agentic-Skills

Präzisionsmotor zur Erkennung von Audio-Vocal-Onsets und zur progressiven Wort-für-Wort-Typografie-Synchronisation. Zerlegt Audiowellenformen, misst RMS-Energiehüllkurven und kartiert schnelle Gesangskadenzen bis auf Millisekunden-Genauigkeit für virale Reels.

Was ist My-Agentic-Skills?

Dieser Skill löst das häufige Problem von Lyrik-Videos, bei denen die Anzeige ganzer Zeilen träge wirkt oder hinter dem Gesang des Sängers zurückbleibt, indem jedes einzelne Wort mit seinem akustischen Einsatz synchronisiert wird. Er eignet sich besonders für schnelle Gesangspassagen (z.B. schnelle Charanams oder staccato-ähnliche Zeilen) und stellt sicher, dass die visuelle Wiedergabe nahtlos der Audio-Darbietung folgt. Der Skill verwendet eine mehrstufige Pipeline: Zuerst wird die Audio-Wellenform einer RMS-Energiehüllkurven-Analyse unterzogen, um Stimmabschnitte zu identifizieren. Dann werden Sprachwiedererkennungs-/Stimm-Checkpoints genutzt, um die Lyrik in einzelne Wörter zu tokenisieren und deren zeitliche Abfolge zu bestimmen. Anschließend werden die Wort-Silben gewichtet und die Gesangsdauer proportional auf die einzelnen Wörter verteilt, um sub-Sekunden-genaue Zeitstempel im JSON-Format zu erzeugen. Diese Zeitstempel steuern dann eine progressive CSS-Animation, die jedes Wort zum richtigen Zeitpunkt von einer blassen Geisterfarbe (opacity: 0.12) zu einem kräftigen Karmesinrot (opacity: 1) überblendet. Der Skill ist plattformunabhängig und kann in jedem Web-Framework (z.B. React, Vue, oder einfaches HTML/CSS/JS) integriert werden. Er bietet ein Python-Skript zur Berechnung der Wort-Zeitstempel basierend auf Audiodaten, sowie ein CSS-Snippet für die progressive Wort-Hervorhebung. Entwickler können dies nutzen, um hochpräzise, dynamische Lyrik-Videos für soziale Medien (z.B. Reels, Shorts) zu erstellen, ohne aufwändige Videobearbeitungssoftware. Der Skill verbessert das Zuschauererlebnis erheblich, indem Wörter exakt im Takt der gesungenen Silben eingeblendet werden.

Funktioniert mit~Claude Code~Codex CLI~Cursor✓Antigravity
npx skills add https://github.com/Pavan-makwana/My-Agentic-Skills/tree/HEAD/skills/lyric-word-sync-engine

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

Lyric Word Sync Engine (Lyrik-Wort-Synchronisations-Engine)

Löst das häufige Problem von Lyrik-Videos, bei denen die Anzeige ganzer Zeilen träge wirkt oder hinter dem Gesang des Sängers zurückbleibt, indem jedes einzelne Wort mit seinem akustischen Einsatz synchronisiert wird.

flowchart TD
    A[Audiodatei MP3/WAV] --> B[Akustische Hüllkurven-Analyse RMS]
    B --> C[Spracherkennung / Stimm-Checkpoints]
    C --> D[Wort-Silben-Gewichtung]
    D --> E[Sub-Sekunden-Wort-Zeitstempel JSON]
    E --> F[Progressive Wort-Einblendung HTML/CSS]

Problem & Lösung

  • Das Problem: Wenn ein Sänger das Tempo erhöht (z.B. schnelle Charanams oder staccato-ähnliche Zeilen), bleibt eine statische, ganze Zeile zu lange auf dem Bildschirm oder erscheint, nachdem der Sänger bereits fertig ist.
  • Die Lösung:
    1. Jede Zeile wird in einzelne Wörter tokenisiert: ["Kanmani", "anbodu", "kaadhalan"].
    2. Die aktive Gesangsdauer wird gemäß der Silbengewichte und lokalen RMS-Energieanstiegen verteilt.
    3. Alle Wörter einer Zeile werden gleichzeitig im Layout gerendert, sodass Schriftgröße und Zeilenumbruch nie springen.
    4. Bevorstehende Wörter werden mit einer blassen Geistertinte dargestellt (opacity: 0.12).
    5. Sobald der Sänger ein Wort ausspricht, geht dieses bestimmte Wort mit einem Übergang zu einem kräftigen Karmesinrot über (opacity: 1, color: #8c1226).

Skript zur Zeitextraktion

import wave, numpy as np

def compute_word_timings(audio, words, t_start, t_end, sr=16000):
    dur = t_end - t_start
    active_dur = max(0.4, dur * 0.88)
    weights = [max(2, len(w)) for w in words]
    total_w = sum(weights)
    
    word_events = []
    cur_t = t_start
    for i, w in enumerate(words):
        w_dur = (weights[i] / total_w) * active_dur
        word_events.append({
            'word': w,
            't_rel': round(cur_t, 3)
        })
        cur_t += w_dur
    return word_events

CSS Progressive Wort-Hervorhebung

.native .word {
  display: inline-block;
  opacity: 0.12;
  transition: opacity .12s ease-out;
  padding: 0 .25cqw;
}
.native .word.revealed {
  opacity: 1;
}

Individual skills in this repo

This repo contains 2 individual skills — each has its own dedicated page.

Verwandte Skills