# Cadence

Autonoom · 2026 · tags: installatie, ai, audio, taal

URL: https://jim.vanhekke.nl/cadence/  
Bijgewerkt: 2026-10-07

Een podium dat luistert: wie spreekt, ziet elk woord als beeld op de wand verschijnen, in het ritme van de stem.

Cadence is een live installatie die gesproken poëzie omzet in een collage van beelden. Terwijl een performer spreekt, wordt elk woord een beeld, geprojecteerd op de cadans van de stem: adem, nadruk en tempo bepalen wanneer en hoe een beeld opkomt. Taal wordt niet alleen gehoord maar gezien, als een landschap dat zich in de tijd ontvouwt. Het werk zoekt de ruimte tussen stem en beeld, tussen betekenis en ritme: spreken dat letterlijk het podium schildert. In de demoversie van juni 2026 bestond de index uit onze eigen jeugdfoto's, zodat wie over vroeger vertelde zijn herinneringen zag opkomen. Op 11 oktober 2026 wordt Cadence getoond in Neurenberg, samen met een Togolese kunstenaar, met diens archief en tekeningen in de index.

Ik heb het concept mee ontwikkeld en aan de eerste versie gebouwd: een Django-server die spraak met Whisper per woord van een tijdstempel voorziet, uit het ritme pauzes, tempo en nadruk haalt en elk woord aan een beeld koppelt, dat over een websocket naar een canvas in de browser gaat. De nieuwe versie, Cadence Future, is in Rust herschreven en draait als één programma zonder servers of cloud. Vooraf wordt de beeldcollectie één keer geïndexeerd: objecten gedetecteerd, elk door een visiemodel beschreven en als vector opgeslagen. Tijdens de show wordt een gesproken zin op dezelfde manier ingebed en tegen de index gelegd, en het beste beeld komt in een van twaalf stijlen op de wand. Mijn deel in deze versie is het trainen en finetunen van de modellen en de index: het Togo-archief en de tekeningen van de dichter, foto's die op hun bestandsnaam worden geïndexeerd, het indexeren op CUDA, en de Linux-versie met whisper.cpp op Vulkan.

## Colofon

- **Met:** Lars van Vianen, Lucandrea Baraldi
- **Getoond:** demo juni 2026; 11 oktober 2026, Neurenberg
- **Mijn aandeel:** concept, eerste versie, training en finetuning van de modellen, index, Linux-build

## Code

Hoe een woord een gewicht krijgt, uit de eerste versie en ingekort. Per woord komt uit de tijdstempels van Whisper of er een pauze voorafging en of het snel of langzaam werd gezegd; dat bepaalt hoe zwaar het bijbehorende beeld op de wand komt te staan.

```python
def process_word(self, word: RawWord) -> ProcessedWord:
    gap_before = max(0, word.start_time - self._last_end_time) if self._last_end_time > 0 else 0.0
    self._last_end_time = word.end_time
    return ProcessedWord(
        word=word.word,
        duration=word.duration,
        gap_before=gap_before,
        pause_before=gap_before >= self.pause_threshold_sec,
        tempo=self._classify_tempo(word.duration),  # snel, gemiddeld of langzaam
        confidence=word.confidence,
    )

def calculate_weight(self, word: ProcessedWord, average_duration: float = 0.3) -> float:
    weight = self.function_word_weight if word.word.lower() in self.FUNCTION_WORDS else self.base_weight
    if word.tempo == TempoClass.SLOW:
        weight = max(weight, self.emphasis_weight)  # een lang uitgesproken woord valt op
    if word.pause_before:
        weight = min(1.0, weight + 0.2)  # na een pauze telt een woord zwaarder
    ratio = word.duration / average_duration
    if ratio > 1.5:
        weight = min(1.0, weight + 0.15)
    elif ratio < 0.5:
        weight = max(0.1, weight - 0.1)
    if word.confidence is not None:
        weight *= 0.5 + 0.5 * word.confidence
    return max(0.1, min(1.0, weight))
```

## Beelden

- ![Demo met onze jeugdfoto's in de index, juni 2026 (still uit video) — foto: Scape Agency](https://jim.vanhekke.nl/cadence/images/cadence-01-demo-featured_image.webp)
- ![De collage op de wand (detail) — foto: Scape Agency](https://jim.vanhekke.nl/cadence/images/cadence-02-collage.webp)
- [Video: Demo, juni 2026 — foto: Scape Agency](https://jim.vanhekke.nl/cadence/images/cadence-05-demo-t078.mp4)
