Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 19 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
[![Platform](https://img.shields.io/badge/platform-Windows%20%7C%20macOS%20%7C%20Linux-111997.svg)](#build--distribution)
[![Electron](https://img.shields.io/badge/Electron-43-47848F.svg)](https://www.electronjs.org/)
[![Downloads](https://img.shields.io/github/downloads/CaYatur/SoundVisualizer/total?label=downloads)](https://github.com/CaYatur/SoundVisualizer/releases)
[![Tests](https://img.shields.io/badge/tests-2577%20passing-2ea043.svg)](#tests)
[![Tests](https://img.shields.io/badge/tests-2613%20passing-2ea043.svg)](#tests)
[![cayadev.com](https://img.shields.io/badge/cayadev.com-e11d2a.svg)](https://cayadev.com)

</div>
Expand Down Expand Up @@ -1109,6 +1109,23 @@ crosses, colour bars and focus rings · drag, arrow-key nudge and exact numeric
visualizer layer its own mode. A status line says what changed, what is next, and why nothing
can happen when a source is empty.

### MCP

An agent can drive the app from the **Control** card. The card is off by default. Five modes
stack, and the one that turns on with the switch is **Read**:

- **Read** sees the show and changes nothing. **Apply** can use scenes, effects and presets that
already exist. **Write** can create and edit, including Auto VJ. **Full** adds the live
surfaces: lighting, mapping, windows, timeline transport, Spout and the stream. **Everything**
also covers updates, audio repair and stream-token rotation.
- The server listens on this computer only, `127.0.0.1`, port **38471** unless you confirm
another. A busy port is not replaced. The agent connects with the stdio command from the setup
dialog; that bridge talks to `http://127.0.0.1:<port>/mcp`.
- Tools cover scenes, layers, effects, presets, displays, the floating window, the clip deck,
timeline transport, recording and export. A blocked call names the mode that is required and
tells the agent not to change the mode and not to click the panel. Changes the agent is allowed
to make show up in the panel the same way a click does, including which displays are selected.

### Windows Dynamic Lighting

- Off by default, and available only when compatible devices are detected.
Expand Down Expand Up @@ -1341,7 +1358,7 @@ npm test
npm start -- --smoke
```

**2577 unit tests, all passing.** They are written to check answers, not to exercise lines:
**2613 unit tests, all passing.** They are written to check answers, not to exercise lines:

- **Formulas** are checked against values derived by hand from their definitions — Viviani's curve
staying on its sphere, the torus tube radius, Chladni's m↔n antisymmetry, every attractor
Expand Down
21 changes: 19 additions & 2 deletions README.tr.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
[![Platform](https://img.shields.io/badge/platform-Windows%20%7C%20macOS%20%7C%20Linux-111997.svg)](#paketleme--dağıtım)
[![Electron](https://img.shields.io/badge/Electron-43-47848F.svg)](https://www.electronjs.org/)
[![İndirme](https://img.shields.io/github/downloads/CaYatur/SoundVisualizer/total?label=indirme)](https://github.com/CaYatur/SoundVisualizer/releases)
[![Test](https://img.shields.io/badge/test-2577%20geçiyor-2ea043.svg)](#testler)
[![Test](https://img.shields.io/badge/test-2613%20geçiyor-2ea043.svg)](#testler)
[![cayadev.com](https://img.shields.io/badge/cayadev.com-e11d2a.svg)](https://cayadev.com)

</div>
Expand Down Expand Up @@ -1109,6 +1109,23 @@ sayısal giriş.
mod verebilirsiniz. Durum satırı ne değiştiğini, sıradakini ve kaynak boşsa neden hiçbir şey
olamayacağını yazar.

### MCP

Bir ajan uygulamayı **Kontrol** kartından sürebilir. Kart varsayılan olarak kapalıdır. Beş kip
birikir; anahtar açılınca gelen kip **Okuma**dır:

- **Okuma** gösteriyi görür, hiçbir şeyi değiştirmez. **Uygula** zaten duran sahne, efekt ve
presetleri kullanabilir. **Yazma** oluşturur ve düzenler, Otomatik VJ dahil. **Tam** canlı
yüzeyleri ekler: ışık, eşleme, pencereler, zaman çizelgesi, Spout ve yayın. **Her şey** buna
güncellemeyi, ses onarımını ve yayın jetonu döndürmeyi de katar.
- Sunucu yalnız bu bilgisayarda dinler, `127.0.0.1`, port **38471** — siz başka bir port
onaylamadıkça. Port meşgulse kendiliğinden değişmez. Ajan, kurulum penceresindeki stdio
komutuyla bağlanır; bu köprü `http://127.0.0.1:<port>/mcp` adresine konuşur.
- Araçlar sahne, katman, efekt, preset, ekran, yüzen pencere, klip destesi, zaman çizelgesi,
kayıt ve dışa aktarmayı kapsar. Engellenen çağrı gereken kipin adını söyler ve ajana kipi
değiştirmemesini, panele tıklamamasını bildirir. İzin verilen değişiklikler panelde tıklamayla
aynı yoldan görünür; seçili ekranlar dahil.

### Windows Dynamic Lighting

- Varsayılan olarak kapalıdır ve yalnızca uyumlu aygıtlar algılandığında görünür.
Expand Down Expand Up @@ -1341,7 +1358,7 @@ npm test
npm start -- --smoke
```

**2577 birim testi, hepsi geçiyor.** Satır çalıştırmak için değil, cevap denetlemek için yazıldılar:
**2613 birim testi, hepsi geçiyor.** Satır çalıştırmak için değil, cevap denetlemek için yazıldılar:

- **Formüller**, tanımlarından elle türetilmiş değerlerle sınanıyor — Viviani eğrisinin küre
üzerinde kalması, simidin boru yarıçapı, Chladni'nin m↔n antisimetrisi, her çekicinin sınırlı
Expand Down
25 changes: 23 additions & 2 deletions ROADMAP.md
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,7 @@ npm test
npm start -- --smoke
```

- **2577 unit tests, all passing** on `main`. 703 of those shipped in v3.1.0;
- **2613 unit tests, all passing** on `main`. 703 of those shipped in v3.1.0;
105 came with v3.1.1; 163 came with v3.1.2; 157 came with v3.1.3 — 1128 at
that tag — 469 more with v3.1.4, most of them from the MilkDrop work, and 878
on `main` since.
Expand Down Expand Up @@ -1738,7 +1738,9 @@ rest after. No version number yet.
- **Store.** Files are read once — in the background at start-up — and
kept; saves and deletes update the cache. `list()` still looks at the
folder's file names on every call, so a file added or removed by hand
shows up; a file edited by hand shows up after a restart. Bulk saves are
shows up. A file edited by hand is re-read when the folder watcher or an
MCP turn names it, and open windows take that change without a restart.
Bulk saves are
written in batches with pauses so the main process keeps serving audio,
lights and IPC, report progress, and keep the pack's own order.
- **Change broadcast.** A save or delete sends only what changed
Expand Down Expand Up @@ -3068,6 +3070,25 @@ expects.
The light each preset leaves now matches MilkDrop's to three decimals.
- **Not matched:** MilkDrop's thin line lands between two rows at about half brightness, where ours lights one row fully. The light is the same; the half-texel placement is Direct3D 9's rasterisation and is not chased.

## Next, not yet numbered — MCP

Local only, not in a numbered release. The Control card lets an agent drive
the app. It is off by default.

- Five modes stack: Read, Apply, Write, Full, Everything. Turning the card on
starts at Read. Read changes nothing. Apply uses what already exists. Write
creates and edits, including Auto VJ. Full adds lighting, mapping, windows,
timeline transport, Spout and the stream. Everything adds updates, audio
repair and stream-token rotation.
- The server binds `127.0.0.1` only, port 38471 unless the user confirms
another. A busy port is left busy. Agents use the stdio command from the
setup dialog, which forwards to `http://127.0.0.1:<port>/mcp`.
- Tools cover scenes, layers, effects, presets, displays, the floating window,
the clip deck, timeline transport, recording and export. A denied call names
the minimum mode and tells the agent not to change the mode or click the
panel. Allowed edits refresh the admin panel through the same config push a
click already uses, including the display selection.

## v3.1.6 — Comprehensive video export

Faster export, more formats, and enough presets that a content creator never
Expand Down
132 changes: 126 additions & 6 deletions src/admin/admin.css
Original file line number Diff line number Diff line change
Expand Up @@ -602,18 +602,23 @@ select:focus { border-color: var(--accent); }
position: absolute;
top: 4px;
right: 4px;
width: 18px;
height: 18px;
z-index: 3;
width: 22px;
height: 22px;
display: inline-flex;
align-items: center;
justify-content: center;
border: 0;
border-radius: 50%;
background: rgba(0,0,0,0.65);
background: rgba(12, 8, 10, 0.88);
color: #fff;
font-size: 10px;
cursor: pointer;
line-height: 18px;
padding: 0;
line-height: 0;
}
.logo-lib-del:hover { background: rgba(230,60,60,0.95); }
.logo-lib-del .svi { width: 12px; height: 12px; color: #fff; }
.logo-lib-del:hover,
.logo-lib-del:focus-visible { background: #e23b3b; color: #fff; }

.subctrls { border-left: 2px solid var(--line2); padding-left: 12px; margin-top: 6px; }

Expand Down Expand Up @@ -1320,3 +1325,118 @@ input[type=color].tl-swatch.big { width: 34px; height: 24px; }
.upd-status.available { color: var(--ok); font-weight: 600; }
.upd-status.error { color: var(--warn); }
.upd-notes { white-space: pre-wrap; word-break: break-word; max-height: 240px; overflow: auto; margin: 6px 0 0; padding: 8px 10px; font: 12px/1.5 ui-monospace, Consolas, monospace; background: var(--bg); border: 1px solid var(--line); border-radius: 8px; color: var(--text); }


/* MCP control card (under Kontrol). Same red/dark cards, switches, and notes. */
.mcp-card { display: grid; gap: 8px; }
.mcp-status {
padding: 8px 10px; border: 1px solid var(--line); border-radius: 9px;
background: var(--card2); color: var(--muted); font-size: 11.5px;
}
.mcp-group { border-top: 1px solid var(--line); padding-top: 8px; }
.mcp-group-title { font-size: 12px; font-weight: 700; margin-bottom: 2px; }
.mcp-switches { display: grid; grid-template-columns: 1fr 1fr; gap: 0 12px; }
.mcp-card .switch input:disabled + .track { opacity: 0.38; filter: grayscale(0.35); }
.mcp-setup {
width: min(720px, calc(100vw - 28px));
max-height: min(82vh, 780px);
overflow: auto;
}
.mcp-setup-note { font-size: 12px; color: var(--muted); line-height: 1.5; margin-bottom: 8px; }
.mcp-client { margin-top: 14px; padding-top: 10px; border-top: 1px solid var(--line); }
.mcp-client h4 { margin: 0 0 6px; font-size: 13px; }
.mcp-steps { margin: 0 0 8px 18px; color: var(--muted); font-size: 12px; line-height: 1.45; }
.mcp-snippet {
margin: 0 0 8px; padding: 10px; border-radius: 8px;
border: 1px solid var(--line); background: #12080b; color: #f3d0d4;
font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
font-size: 11px; line-height: 1.45; white-space: pre-wrap; word-break: break-all;
}

.mcp-modes { display: grid; gap: 6px; }
.mcp-mode {
text-align: left; border: 1px solid var(--line); background: var(--card2);
color: inherit; border-radius: 9px; padding: 8px 10px; cursor: pointer;
}
.mcp-mode.on { border-color: #c4364a; }
.mcp-mode-name { display: block; font-weight: 700; font-size: 12px; }
.mcp-mode-hint { display: block; color: var(--muted); font-size: 11px; margin-top: 2px; }

.mcp-setup-head { display: flex; align-items: center; justify-content: space-between; gap: 8px; margin-bottom: 8px; }
.mcp-setup-head .ask-title { margin: 0; }
.mcp-setup-x { min-width: 32px; }
.mcp-port { display: flex; align-items: center; gap: 8px; }
.mcp-port input { width: 96px; }
.mcp-port .btn {
height: 30px;
box-sizing: border-box;
display: inline-flex;
align-items: center;
}

/* Metin ve sayı kutuları. Sınıfsız type=number (MCP portu dahil) Windows'ta
açık dolgu ve oklarla kalıyordu. Boy, .btn.small ile aynı 30px. */
input[type="text"]:not(.scene-name),
input[type="search"],
input[type="url"],
input[type="password"],
input[type="email"],
input[type="tel"],
input[type="number"],
textarea:not(.code-input):not(.mded-input) {
background: var(--card2);
color: var(--text);
border: 1px solid var(--line);
border-radius: 8px;
padding: 0 8px;
font: inherit;
font-size: 11.5px;
line-height: 1.2;
outline: none;
height: 30px;
box-sizing: border-box;
}
textarea:not(.code-input):not(.mded-input) {
height: auto;
min-height: 30px;
padding: 6px 8px;
}
input[type="text"]:not(.scene-name):focus,
input[type="search"]:focus,
input[type="url"]:focus,
input[type="password"]:focus,
input[type="email"]:focus,
input[type="tel"]:focus,
input[type="number"]:focus,
textarea:not(.code-input):not(.mded-input):focus {
border-color: var(--accent);
}
input[type="number"] {
-moz-appearance: textfield;
appearance: textfield;
}
input[type="number"]::-webkit-outer-spin-button,
input[type="number"]::-webkit-inner-spin-button {
-webkit-appearance: none;
margin: 0;
display: none;
}
.topsearch input[type="text"] {
height: auto;
background: none;
border: none;
border-radius: 0;
padding: 0;
}
.mcp-prompt-block { display: grid; gap: 8px; }
.mcp-manual {
margin-top: 26px;
padding-top: 18px;
border-top: 1px solid var(--line2);
}
.mcp-manual-title {
margin: 0 0 8px;
font-size: 16px;
font-weight: 800;
letter-spacing: .01em;
}
Loading
Loading