strudel/README.md
hacklab 7ace286d8a
Some checks are pending
Build and Deploy to warm (strudel.cc) / build (push) Waiting to run
Strudel tests / build (20) (push) Waiting to run
Integra KISUM (audio→Strudel) + pestaña Visor + accesos en la cabecera
- Pestaña KISUM: sube audio/vídeo y lo convierte en código Strudel vía un
  mini-servidor Python local (kisum/, puerto 3010) que arranca el lanzador.
- Pestaña Visor: piano-roll (pentagrama) + osciloscopio + espectro en vivo
  de lo que suena, sin escribir .pianoroll()/.scope().
- Botones en la cabecera: projects, KISUM, visor, ajustes.
- KISUM empaquetado en kisum/ (código, sin venv) + install.sh de un comando
  y lanzador portable (sin rutas absolutas).
- .gitignore excluye venv/cachés/logs de KISUM. Docs en README.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-26 18:31:37 +02:00

121 lines
4.6 KiB
Markdown

# Strudel · fork del hacklab
Fork de [Strudel](https://codeberg.org/uzu/strudel) (live coding de música en
el navegador, port de TidalCycles a JavaScript) con mejoras de usabilidad para
pinchar en directo. Misma licencia que upstream: AGPL-3.0 (ver `LICENSE`).
![El REPL con la pestaña Projects y la barra de transporte](./docs/captura.png)
## Qué añade
- Interfaz multiidioma (castellano, inglés, francés, alemán, italiano,
portugués y más). Selector en el header.
- Pestaña Projects: proyectos locales con carpetas, buscador y una librería
de tracks de fábrica para empezar a pinchar: bases techno/acid originales
y 50 remixes retro (80s/90s/2000s) escritos en código.
- Barra de transporte bajo el editor: anterior / play-pausa / siguiente,
tiempo y barra de progreso arrastrable (seek real sobre el reloj del
scheduler). Al cargar un track el loop arranca desde cero; editar y
actualizar en vivo no reinicia nada.
- Pestaña Guía: chuleta de síntesis y sonidos.
- Pestaña **KISUM** (*musik al revés*): sube un audio o vídeo y te lo devuelve
como código Strudel (tempo + batería por bandas). Lo procesa un mini-servidor
Python local (`kisum/`) que arranca solo con el lanzador. Ver más abajo.
- Pestaña **Visor**: pentagrama (piano-roll), onda (osciloscopio) y espectro
**en vivo** de lo que suena, sin tener que escribir `.pianoroll()` ni
`.scope()` en el código.
- Accesos directos en la cabecera: `projects`, `KISUM`, `visor`, `ajustes`.
- Packs de temas del editor: neon-madrid y hacklab-pack.
- Lanzador de escritorio: `strudel-launcher.sh`.
## Instalación (Linux)
Requisitos: `git`, `node` >= 20, `pnpm` (`corepack enable`) y, para KISUM,
`python3` + `ffmpeg`.
**Fácil (un comando):**
```bash
git clone https://gitea.laenre.net/hacklab/strudel.git
cd strudel
./install.sh # instala Node deps + build + entorno de KISUM
./strudel-launcher.sh # http://127.0.0.1:3009 (+ KISUM en 3010) y abre el navegador
```
El `install.sh` no descarga los paquetes al repo: usa `pnpm` (Node) y un
`venv` de Python para KISUM. Todo eso queda en `.gitignore`.
**Manual / desarrollo:**
```bash
pnpm i
pnpm dev # recarga en vivo, http://localhost:4321
# o, para el uso diario (build estática + lanzador):
pnpm build
./strudel-launcher.sh
```
Icono de escritorio: `~/.local/share/applications/strudel.desktop`
```ini
[Desktop Entry]
Type=Application
Name=Strudel
Comment=Live coding de musica
Exec=/ruta/a/strudel/strudel-launcher.sh
Icon=audio-x-generic
Terminal=false
Categories=AudioVideo;Audio;
```
## Packs de proyectos propios
La librería de fábrica está en
`website/src/repl/components/panel/default-projects.mjs`. Para un pack
personal crea un módulo con el mismo formato `{name, folder, code}` y
concaténalo en `DEFAULT_PROJECTS` (los packs personales están en
`.gitignore`). También se pueden crear proyectos desde la propia pestaña.
## KISUM (audio → código Strudel)
KISUM escucha una canción (audio **o vídeo**: mp3, wav, flac, m4a, mp4, mkv…),
detecta el tempo y los golpes por bandas (bombo/caja/hats) y lo devuelve como
código Strudel listo para pegar. Vive en la carpeta `kisum/` (Python + librosa)
y se usa de dos formas:
- **Desde Strudel**: pestaña *KISUM* → arrastra el archivo → *Analizar*
*Cargar en editor*. El mini-servidor (`kisum/kisum_server.py`, en
`127.0.0.1:3010`) lo arranca solo `strudel-launcher.sh`.
- **Desde la terminal**:
```bash
cd kisum
./kisum tu_cancion.mp3 # imprime el código Strudel
./kisum clip.mp4 --bars 8 --bass # vídeo, 8 compases, con línea de bajo
```
Requiere `python3` y `ffmpeg`. Si `./install.sh` no lo dejó listo (o quieres
reinstalarlo): `./kisum/install.sh`. Detalles y limitaciones en
[`kisum/README.md`](./kisum/README.md).
> Nota: la transcripción de la v0 analiza la mezcla completa (aún no separa
> instrumentos), así que en temas muy densos el patrón sale cargado. La
> separación por stems (demucs) está en la hoja de ruta.
## Actualizar desde upstream
```bash
git fetch upstream
git merge upstream/main
```
## Enlaces
- Strudel (upstream): <https://codeberg.org/uzu/strudel> — su README original: [README-upstream.md](./README-upstream.md)
- Documentación / tutorial: <https://strudel.cc/learn>
- TidalCycles, el original en Haskell: <https://tidalcycles.org>
- Algorave, la escena: <https://algorave.com>
- Samples para empezar a jugar:
- Dirt-Samples (la librería clásica de Tidal): <https://github.com/tidalcycles/Dirt-Samples>
- tidal-drum-machines (Roland TR-808/909 y muchas más): <https://github.com/ritchse/tidal-drum-machines>
- Para ver de qué va esto en directo: <https://www.youtube.com/watch?v=iu5rnQkfO6M>