Files
zhila/reference/demo/README.md
T

79 lines
7.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ZHILA
DAW, в котором звук лежит рельефом. Две комнаты: **nave** — собор, где камни укладываются и играются, и **quarry** — карьер под ним, где материал берут и режут. Сэмплирование здесь не «библиотека сэмплов», а карьер и кладка: у каждой вещи есть место, шрам, погода и клеймо.
Демка играет и слушается агентом: 32-тактовый луп из настоящих срезов, живой транспорт на аудиочасах, правка камней, undo, сохранение, импорт/запись, рендер в WAV.
## Запуск
```bash
./start.sh
```
Открыть **http://127.0.0.1:4173**. Скрипт берёт ключ из `DEEPSEEK_API_KEY` или из уже сохранённого ключа harness (`~/.dsh/.credentials.yaml`); ключ остаётся на сервере и в браузер не попадает. Порт можно поменять: `PORT=5000 ./start.sh`.
Без сервера `index.html` тоже открывается, но хор работает в локальном режиме (по правилам), без модели.
## Агент
Встроенный агент — это не чат сбоку, а тот же набор команд, что у руки. Модель (`deepseek-chat`) получает 14 инструментов и действует ими в живом проекте:
`get_state`, `list_cores`, `extract_core`, `fracture_core`, `strike_face`, `place_stone`, `move_stone`, `delete_stone`, `set_weather`, `set_rings`, `set_tempo`, `transport`, `open_core`, `set_macros`.
- Консоль `choir` показывает настоящий трейс: инструмент, аргументы, результат, время. Ответ — одна короткая реплика на языке пользователя.
- Агент видит состояние (камни, керны, погоду, позицию), проверяет, где уже занято, и не кладёт камень поверх того же диапазона без просьбы.
- `api live` в шапке — модель на связи; `api local` — сервера нет, работает локальный дирижёр по правилам (тоже через инструменты).
- Ключ и модель живут только на сервере; сервер слушает 127.0.0.1 и принимает CORS только с localhost.
Примеры: «сделай темнее и добавь редкий шум на восемь тактов, потом включи», «возьми керн из лестничной клетки и нарежь его заново», «убери один камень из голоса, стало тесно», «покажи мне керн, из которого сделан бас».
MCP для внешних агентов ещё не поднят: те же 14 команд — это и есть будущая поверхность. Локальный API уже отделён от UI, поэтому сервер MCP — следующий шаг.
## nave
- `space` — пуск/пауза.
- Камни: тащи вверх-вниз — время с привязкой к четверти такта; клик — выбрать; `Backspace` — закопать; `⌘/Ctrl+D` — дублировать; `⌘/Ctrl+Z` / `⇧⌘Z` — undo/redo.
- `crystal` — живая партитура событий вокруг playhead (только просмотр).
- `cilia` — уровни жил; красные точки — живой сигнал. `warmth / dust / threshold` правят мастер.
- `render` — офлайн-рендер 32 тактов в `zhila-descent-04.wav` (~62 c, 48 кГц, стерео).
- Поле «say what you want to hear» зовёт агента. Ползунки `shape` — предпочтения для следующего слоя; агент видит их в состоянии.
## quarry
- `core tray` — выбранный керн: настоящая волна, слои, шов, трещины. Линза читает глубину.
- `fracture` реально перерезает керн: 16 граней получают новые границы, и камни из этого керна начинают звучать иначе.
- `the face` — 16 граней. Удар звучит; `place` кладёт одиночный камень, `loop` — повторяющийся каждые 2 такта.
- `weather` — `age / pressure / air` меняют климат всего микса, `heat` расстраивает голоса, `ghost` добавляет хвост источника. `grow ring` усиливает эрозию петель.
- `extract`: `core` — новый процедурный керн, `file` — импорт, `room` — запись комнаты (`rec` тоже).
- `ledger` — кто, откуда и с каким клеймом взял.
## Что работает по-настоящему
- **Звук.** Web Audio: срезы кернов как сэмплы, 16 граней, кольца с эрозией, климат, лимитер, панорама, анализ мастера.
- **Транспорт.** Аудиочасы — мастер, lookahead-планировщик, луп, play/pause/stop/seek, темп на лету.
- **Правка.** Выбор, перенос, удаление, дублирование, undo/redo, автосейв.
- **Материал.** Процедурные керны, импорт, запись; поиск швов по огибающей; повторный `fracture`.
- **Агент.** Реальная модель, 14 инструментов, трейс, проверка состояния, локальный фолбэк.
- **Экспорт.** Офлайн-рендер в WAV с погодой, макросами и мастером.
## Что всё ещё макет
- Внешний MCP-сервер не поднят; `mcp`-чип — заявка на следующий шаг.
- Клеймо и опись — журнал, не права и не согласие. Модель `draft → seal` описана, не реализована.
- `crystal` не редактирует ноты; нет MIDI, редактора маппинга граней, trim/loop-точек, сендов/групп, дублей записи.
- Импортированные и записанные керны живут только в памяти; после перезагрузки их камни молчат. Пять жил и панорама фиксированы.
## Файлы
- `index.html`, `style.css` — разметка и стиль
- `engine.js` — аудиоядро: керны, срезы, голоса, климат, транспорт, рендер
- `app.js` — nave: партитура, правка, история, анализ, кристалл, командный слой
- `quarry.js` — карьер: лоток, грани, погода, кольца, опись
- `agent.js` — хор в браузере: трейс, инструменты, локальный дирижёр
- `server.js`, `agent-tools.js`, `start.sh` — локальный сервер и модель
- `terrain.js` — рельеф и город
- `preview.png`, `preview-playing.png`, `preview-agent.png`, `preview-quarry.png`, `preview-mobile.png`, `preview-quarry-mobile.png` — скриншоты
- `preview.mp3` — 62 секунды базового рендера
Сброс проекта: очистить site data (localStorage `zhila.project.v3`).