From c422368bd59a0619fbc126b3f4cc98d66ac061b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=87A=C4=9EAN=20TURGUT?= Date: Wed, 21 Oct 2026 23:07:43 +0300 Subject: [PATCH 1/3] CaYaDev MilkDrop Presets: pack layout, embedding and the first five (#825) Adds presets/cayadev (CC BY 4.0, attribution "CaYaDev") with Neon Monsoon, Event Horizon, Prism Lattice, Northern Veil and Twelve Moons (MilkDrop 3). scripts/preset-pack.js embeds the folder as src/shared/presets-milkdrop-pack.js, which presets-milkdrop.js appends to the built-in list; it also builds the release zip, now in the release asset list. English descriptions come from pack.json through i18n. Each preset was checked: warp and comp shaders, 90 s on looped music without fade-out, white-out or freeze, 12-13.5 ms per 1080p frame on a Radeon 610M, the same brightness at 60 and 144 Hz, and (MilkDrop 2 presets) the same picture in BeatDrop. Tests enforce the two MilkDrop 2 rules that comparison caught: aspectx/aspecty are not visible to wave and shape code, and prefixed noise samplers must be declared in the shader. Co-authored-by: caganturgut <271973834+caganturgut@users.noreply.github.com> --- CHANGELOG.md | 7 + README.md | 12 +- README.tr.md | 13 +- ROADMAP.md | 2 +- presets/cayadev/CaYaDev - Event Horizon.milk | 181 +++++++ presets/cayadev/CaYaDev - Neon Monsoon.milk | 194 ++++++++ presets/cayadev/CaYaDev - Northern Veil.milk | 133 +++++ presets/cayadev/CaYaDev - Prism Lattice.milk | 194 ++++++++ presets/cayadev/CaYaDev - Twelve Moons.milk | 494 +++++++++++++++++++ presets/cayadev/LICENSE.md | 21 + presets/cayadev/README.md | 41 ++ presets/cayadev/pack.json | 53 ++ scripts/preset-pack.js | 139 ++++++ scripts/release-assets.js | 6 +- src/admin/index.html | 1 + src/exporter/index.html | 1 + src/shared/i18n.js | 9 + src/shared/presets-milkdrop-pack.js | 20 + src/shared/presets-milkdrop.js | 14 + src/visualizer/index.html | 1 + src/web/overlay.html | 1 + tests/milkdrop-fidelity-comp.test.js | 21 +- tests/preset-pack.test.js | 150 ++++++ tests/presets-milkdrop.test.js | 13 +- 24 files changed, 1702 insertions(+), 19 deletions(-) create mode 100644 presets/cayadev/CaYaDev - Event Horizon.milk create mode 100644 presets/cayadev/CaYaDev - Neon Monsoon.milk create mode 100644 presets/cayadev/CaYaDev - Northern Veil.milk create mode 100644 presets/cayadev/CaYaDev - Prism Lattice.milk create mode 100644 presets/cayadev/CaYaDev - Twelve Moons.milk create mode 100644 presets/cayadev/LICENSE.md create mode 100644 presets/cayadev/README.md create mode 100644 presets/cayadev/pack.json create mode 100644 scripts/preset-pack.js create mode 100644 src/shared/presets-milkdrop-pack.js create mode 100644 tests/preset-pack.test.js diff --git a/CHANGELOG.md b/CHANGELOG.md index de67049c..a8be2bbd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,13 @@ GitHub. The full reasoning and the measurements behind each change are in [ROADM Changes on `main` after 3.1.6-beta, not in any build yet. +### CaYaDev MilkDrop Presets [825] + +- **Our own shader presets, built in.** The first five of a planned 50+: *Neon Monsoon* (liquid), *Event Horizon* (tunnel), *Prism Lattice* (geometric), *Northern Veil* (ambient scene) and *Twelve Moons* (MilkDrop 3). They sit next to the five original built-ins in the preset list and auto advance, with English names and author "CaYaDev". +- **Free to use elsewhere under CC BY 4.0.** The `.milk` files are in [`presets/cayadev`](presets/cayadev) with a license and a README, and `node scripts/preset-pack.js --zip` builds the release zip (`CaYaDev-MilkDrop-Presets-.zip`, now in the release asset list). The app embeds them from that folder; a test fails if the embedded copy drifts from the files. +- **Checked before they were added.** Each preset has warp and comp shaders. Each was run for 90 s on looped music (no fade to black, white-out or freeze), measured at 1080p (12–13.5 ms per frame on a Radeon 610M iGPU, 5.5–7 ms on an RTX 5070 Laptop), and compared at 60 and 144 Hz (same average brightness). The MilkDrop 2 presets were also rendered in MilkDrop 2 itself (BeatDrop): same picture. The MilkDrop 3 preset was checked only in our engine. +- **Two MilkDrop 2 rules the comparison caught, now enforced by tests.** MilkDrop 2 does not pass `aspectx`/`aspecty` to custom wave and shape code, so the presets carry them in q31/q32. Prefixed noise samplers such as `sampler_pw_noise_lq` must be declared in the shader; otherwise MilkDrop drops the comp shader while our engine runs it anyway. + ### Audio bridge: its own window for everything, mode switch with restart, clock fix [822] - **The bridge window is the bridge's whole UI.** Three tabs, Status, Sources and Settings, under a header that stays on top. Settings has the bridge name, the pairing secret (show, copy, New Secret with a warning that receivers drop), the port, this computer's addresses with the port and a copy button (for a receiver that has to type the address), the firewall rule, "Start the Bridge at Sign-in" (installed and portable builds; Windows startup list, Linux autostart), "Don't Open the Status Window at Start", and the way out of bridge mode. The panel is still there as "Advanced Settings (Panel)" but is no longer needed. Fields are saved when you leave them, and the window no longer redraws under a field while you type. diff --git a/README.md b/README.md index de2254f6..a721398e 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ layers and **40 GPU effects**, an **OBS overlay**, **Spout / Syphon**, **project [![Downloads](https://img.shields.io/github/downloads/CaYatur/SoundVisualizer/total?label=downloads)](https://github.com/CaYatur/SoundVisualizer/releases) [![License: MIT](https://img.shields.io/badge/License-MIT-e11d2a.svg)](LICENSE) [![Platform](https://img.shields.io/badge/platform-Windows%20%7C%20macOS%20%7C%20Linux-111997.svg)](#download) -[![Tests](https://img.shields.io/badge/tests-3498%20passing-2ea043.svg)](#tests) +[![Tests](https://img.shields.io/badge/tests-3507%20passing-2ea043.svg)](#tests) [![Electron](https://img.shields.io/badge/Electron-43-47848F.svg)](https://www.electronjs.org/) Download for Windows @@ -378,6 +378,10 @@ shaders are translated to GLSL and run on the GPU. - **Five presets of our own ship with the app** — *Aurora*, *Molten Gold*, *Still Rings*, *Endless Tunnel* and *Pulse Weave* — so the engine shows what it does before you import anything. No third-party preset pack is bundled. +- **CaYaDev MilkDrop Presets: 5 shader presets of our own, built in.** Each one has warp and comp shaders, and + each was checked against MilkDrop 2 itself, for 90 s of stability, at 60 and 144 Hz, and for 60 fps at 1080p on + an entry-level integrated GPU. They are also free to use in any MilkDrop player under CC BY 4.0: get them from + [`presets/cayadev`](presets/cayadev) or as the zip on each release. - **Import a whole library** — from a ZIP pack, a folder, or by searching this computer (Winamp, foobar2000 and projectM folders, Downloads, Desktop, Music, Documents). You see what will be added before anything is copied; duplicates are skipped; textures come along; folder @@ -1329,6 +1333,9 @@ it off restores the engine's earlier look. classic tunnel) and *Nabız Örgüsü* (squares on the beat over a motion-vector weave) — written here, so the engine shows what it does before you import a pack of your own. They join auto advance like any other preset. The two pictures on this page are rendered from them. +- **The CaYaDev MilkDrop Presets** ([`presets/cayadev`](presets/cayadev), CC BY 4.0) are built in next to + them: shader presets written from scratch, MilkDrop 2 and MilkDrop 3. The folder README lists the checks each + one passed; the zip on each release holds the same files. - **No preset text is copied into generated code.** There is no `eval` and no generated source: each node becomes a closure, identifiers become pool indices, and function names are resolved against a fixed table at compile time. @@ -1781,7 +1788,7 @@ npm test npm start -- --smoke ``` -**3498 unit tests, all passing.** They are written to check answers, not to exercise lines: +**3507 unit tests, all passing.** They are written to check answers, not to exercise lines: _The count is the runner's total (`# tests`). A few tests depend on the environment (a git checkout, Node 22's built-in WebSocket, the electron-builder schema); where that is missing they are reported as skipped, not passed, so `pass + skipped` always equals this number and the skipped count may be 0 on one machine and 1–4 on another._ @@ -1849,6 +1856,7 @@ src/ transitions, warp, MilkDrop, templates, lyrics, timeline, clip deck web/ OBS overlay and the phone remote native/ Audio helpers (per-application capture, Dynamic Lighting identity) +presets/ CaYaDev MilkDrop Presets (.milk, CC BY 4.0), embedded by scripts/preset-pack.js scripts/ Build, release, benchmark, MilkDrop corpus and render harnesses tests/ Unit tests, run by `npm test` docs/ Screenshots and benchmark results diff --git a/README.tr.md b/README.tr.md index 594e5e30..5f461177 100644 --- a/README.tr.md +++ b/README.tr.md @@ -18,7 +18,7 @@ destesi**, ve **MCP üzerinden yapay zekâ kontrolü**. [![İndirme](https://img.shields.io/github/downloads/CaYatur/SoundVisualizer/total?label=indirme)](https://github.com/CaYatur/SoundVisualizer/releases) [![Lisans: MIT](https://img.shields.io/badge/Lisans-MIT-e11d2a.svg)](LICENSE) [![Platform](https://img.shields.io/badge/platform-Windows%20%7C%20macOS%20%7C%20Linux-111997.svg)](#hızlı-başlangıç) -[![Test](https://img.shields.io/badge/test-3498%20geçiyor-2ea043.svg)](#testler) +[![Test](https://img.shields.io/badge/test-3507%20geçiyor-2ea043.svg)](#testler) [![Electron](https://img.shields.io/badge/Electron-43-47848F.svg)](https://www.electronjs.org/) Windows için indir @@ -379,6 +379,11 @@ composite shader'ları GLSL'e çevrilip GPU'da çalışıyor. - **Uygulama kendi beş presetiyle geliyor** — *Kutup Işığı*, *Erimiş Altın*, *Dingin Halkalar*, *Sonsuz Tünel* ve *Nabız Örgüsü* — böylece motor, siz hiçbir şey içe aktarmadan ne yaptığını gösteriyor. Üçüncü taraf preset paketi gelmiyor. +- **CaYaDev MilkDrop Presetleri: 5 shader presetimiz uygulamaya gömülü.** Her birinde warp ve comp shader'ı var. + Her biri MilkDrop 2'nin kendisiyle karşılaştırıldı, 90 sn kararlılık testinden geçti, 60 ve 144 Hz'te denendi + ve giriş seviyesi bir tümleşik GPU'da 1080p'de 60 fps'ye ölçüldü. CC BY 4.0 ile her MilkDrop oynatıcısında + ücretsiz kullanılabilirler: [`presets/cayadev`](presets/cayadev) klasöründen ya da her sürümdeki zip'ten + indirebilirsiniz. - **Bütün bir kütüphaneyi içe aktarın** — bir ZIP paketinden, bir klasörden ya da bu bilgisayarı arayarak (Winamp, foobar2000 ve projectM klasörleri, İndirilenler, Masaüstü, Müzik, Belgeler). Bir şey kopyalanmadan önce ne ekleneceğini görüyorsunuz; aynıları atlanıyor; dokular da @@ -1335,6 +1340,9 @@ kapatmak motorun önceki görünümünü geri getiriyor. *Nabız Örgüsü* (hareket vektörlerinin dokuduğu örgünün üstünde vuruşla zıplayan kareler) — hepsi burada yazıldı, yani kendi paketinizi eklemeden de motorun ne yaptığı görünüyor. Otomatik geçişe de öteki presetler gibi giriyorlar. Bu sayfadaki iki görsel onlardan alındı. +- **CaYaDev MilkDrop Presetleri** ([`presets/cayadev`](presets/cayadev), CC BY 4.0) onların yanında gömülü + geliyor: sıfırdan yazılmış, MilkDrop 2 ve MilkDrop 3 shader presetleri. Her birinin geçtiği denetimler + klasörün README'sinde; her sürümdeki zip aynı dosyaları taşıyor. - **Preset metninden üretilen koda hiçbir şey kopyalanmıyor.** Tanımlayıcılar havuz indekslerine dönüşüyor, yani bir preset JavaScript kaçıramaz. Bir enjeksiyon testi bunu doğruluyor. - **HLSL warp ve composite shader'ları GLSL'e çevrilip GPU'da koşuyor.** Gerçek bir WebGL2 @@ -1785,7 +1793,7 @@ npm test npm start -- --smoke ``` -**3498 birim testi, hepsi geçiyor.** Satır çalıştırmak için değil, cevap denetlemek için yazıldılar: +**3507 birim testi, hepsi geçiyor.** Satır çalıştırmak için değil, cevap denetlemek için yazıldılar: _Sayı koşunun toplamıdır (`# tests`). Birkaç test ortama bağlı (git çalışma kopyası, Node 22'nin yerleşik WebSocket'i, electron-builder şeması); bunlar eksikse geçti değil atlandı sayılır. Yani `geçen + atlanan` hep bu sayıya eşittir; atlanan sayısı bir makinede 0, başka birinde 1–4 olabilir._ @@ -1854,6 +1862,7 @@ src/ geçişler, bükme, MilkDrop, şablonlar, şarkı sözü, zaman çizelgesi, klip destesi web/ OBS katmanı ve telefon kumandası native/ Ses yardımcıları (uygulama başına yakalama, Dynamic Lighting kimliği) +presets/ CaYaDev MilkDrop Presetleri (.milk, CC BY 4.0); scripts/preset-pack.js gömüyor scripts/ Derleme, sürüm, performans ölçümü, MilkDrop derlemi ve çizim ölçüm araçları tests/ `npm test` ile çalışan birim testleri docs/ Ekran görüntüleri ve ölçüm sonuçları diff --git a/ROADMAP.md b/ROADMAP.md index 8047d20a..2ee3b049 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -136,7 +136,7 @@ npm test npm start -- --smoke ``` -- **3498 unit tests, all passing** on `main`. 703 of those shipped in v3.1.0; +- **3507 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 — 1597 at that tag — 1402 more with v3.1.5 — 2999 at that tag — and 27 diff --git a/presets/cayadev/CaYaDev - Event Horizon.milk b/presets/cayadev/CaYaDev - Event Horizon.milk new file mode 100644 index 00000000..870c2584 --- /dev/null +++ b/presets/cayadev/CaYaDev - Event Horizon.milk @@ -0,0 +1,181 @@ +MILKDROP_PRESET_VERSION=201 +PSVERSION=3 +PSVERSION_WARP=3 +PSVERSION_COMP=3 +[preset00] +fRating=5 +fGammaAdj=1 +fDecay=1 +fVideoEchoZoom=1 +fVideoEchoAlpha=0 +nVideoEchoOrientation=0 +nWaveMode=0 +bAdditiveWaves=0 +bWaveDots=0 +bWaveThick=0 +bModWaveAlphaByVolume=0 +bMaximizeWaveColor=0 +bTexWrap=1 +bDarkenCenter=0 +bRedBlueStereo=0 +bBrighten=0 +bDarken=0 +bSolarize=0 +bInvert=0 +fWaveAlpha=0 +fWaveScale=1 +fWaveSmoothing=0.75 +fWaveParam=0 +fModWaveAlphaStart=0.75 +fModWaveAlphaEnd=0.95 +fWarpAnimSpeed=1 +fWarpScale=1 +fZoomExponent=1 +fShader=0 +zoom=1 +rot=0 +cx=0.5 +cy=0.5 +dx=0 +dy=0 +warp=0 +sx=1 +sy=1 +wave_r=1 +wave_g=1 +wave_b=1 +wave_x=0.5 +wave_y=0.5 +ob_size=0 +ob_r=0 +ob_g=0 +ob_b=0 +ob_a=0 +ib_size=0 +ib_r=0 +ib_g=0 +ib_b=0 +ib_a=0 +nMotionVectorsX=12 +nMotionVectorsY=9 +mv_dx=0 +mv_dy=0 +mv_l=0.9 +mv_r=1 +mv_g=1 +mv_b=1 +mv_a=0 +b1n=0 +b2n=0 +b3n=0 +b1x=1 +b2x=1 +b3x=1 +b1ed=0 +wavecode_0_enabled=1 +wavecode_0_samples=400 +wavecode_0_sep=0 +wavecode_0_bSpectrum=0 +wavecode_0_bUseDots=0 +wavecode_0_bDrawThick=0 +wavecode_0_bAdditive=1 +wavecode_0_scaling=1 +wavecode_0_smoothing=0.5 +wavecode_0_r=1 +wavecode_0_g=1 +wavecode_0_b=1 +wavecode_0_a=0 +wave_0_per_frame1=a = q8*0.9; +wave_0_per_point1=x = sample; +wave_0_per_point2=y = 0.92 + value1*0.12*sin(sample*3.14159); +wave_0_per_point3=r = 0; +wave_0_per_point4=g = 1; +wave_0_per_point5=b = 0; +shapecode_0_enabled=1 +shapecode_0_sides=4 +shapecode_0_additive=1 +shapecode_0_thickOutline=0 +shapecode_0_textured=0 +shapecode_0_num_inst=6 +shapecode_0_x=0.5 +shapecode_0_y=0.5 +shapecode_0_rad=0.003 +shapecode_0_ang=0 +shapecode_0_tex_ang=0 +shapecode_0_tex_zoom=1 +shapecode_0_r=1 +shapecode_0_g=0 +shapecode_0_b=0 +shapecode_0_a=1 +shapecode_0_r2=1 +shapecode_0_g2=0 +shapecode_0_b2=0 +shapecode_0_a2=0 +shapecode_0_border_r=1 +shapecode_0_border_g=1 +shapecode_0_border_b=1 +shapecode_0_border_a=0 +shape_0_per_frame1=x = rand(1000)*0.001; +shape_0_per_frame2=y = 0.9; +shape_0_per_frame3=rad = 0.002 + 0.003*treb_att; +shape_0_per_frame4=a = 0.4 + 0.6*min(1, mid_att); +per_frame_init_1=beat = 0; +per_frame_init_2=last = 0; +per_frame_init_3=glow = 0; +per_frame_init_4=travel = 0; +per_frame_1=q30 = 60/max(fps, 15); +per_frame_2=q31 = aspectx; +per_frame_3=q32 = aspecty; +per_frame_4=travel = travel + (0.35 + 0.55*bass_att)/fps; +per_frame_5=dy = -(0.18 + 0.30*bass_att)/fps; +per_frame_6=beat = (bass > 1.22)*((time - last) > 0.22); +per_frame_7=last = if(beat, time, last); +per_frame_8=glow = max(glow*0.9, beat); +per_frame_9=q1 = sin(time*0.23); +per_frame_10=q2 = cos(time*0.19)*0.6; +per_frame_11=q3 = time*0.02 + 0.06*sin(time*0.11); +per_frame_12=q4 = travel; +per_frame_13=q5 = 0.045 + 0.008*bass_att; +per_frame_14=q6 = glow; +per_frame_15=q7 = time*0.012 + 0.1*sin(time*0.05); +per_frame_16=q8 = beat; +warp_1=`shader_body +warp_2=`{ +warp_3=` ret = tex2D(sampler_main, uv).xyz; +warp_4=` ret.x *= pow(0.986, q30); +warp_5=` ret.y *= pow(0.993, q30); +warp_6=` ret -= 0.001 * q30; +warp_7=`} +comp_1=`shader_body +comp_2=`{ +comp_3=` float2 p = (uv - 0.5) * aspect.xy - float2(q1, q2) * 0.04; +comp_4=` float r = length(p); +comp_5=` float a = atan2(p.y, p.x); +comp_6=` float depth = 0.12 / (r + 0.01); +comp_7=` float2 tuv = float2(a * 0.159155 + q3, depth); +comp_8=` float2 puv = float2(tuv.x * 3.0, depth * 0.35 - q4); +comp_9=` float n1 = tex2D(sampler_noise_hq, puv).x; +comp_10=` float n2 = tex2D(sampler_noise_hq, puv * float2(2.0, 2.3) + float2(0.37, n1 * 0.4)).x; +comp_11=` float plasma = pow(saturate(1.0 - abs(n2 * 2.0 - 1.0)), 6.0) * 0.9 + n1 * 0.12; +comp_12=` float3 w = tex2D(sampler_fw_main, tuv).xyz; +comp_13=` float3 wb = GetBlur1(frac(tuv)); +comp_14=` float streak = w.x * 1.6 + wb.x * 0.8; +comp_15=` float ring = w.y * 1.2 + wb.y * 0.9; +comp_16=` float fog = saturate((r - 0.035) * 2.6); +comp_17=` fog = fog * fog; +comp_18=` float shade = 0.7 + 0.3 * sin(a + 1.5708 + q1 * 0.3); +comp_19=` float3 near = 0.5 + 0.5 * cos(6.28318 * (q7 + float3(0.0, 0.33, 0.67))); +comp_20=` float3 far = 0.5 + 0.5 * cos(6.28318 * (q7 + 0.38 + float3(0.0, 0.33, 0.67))); +comp_21=` near = lerp(near, float3(1.0, 0.6, 0.25), 0.35); +comp_22=` float3 col = lerp(far, near, saturate(r * 2.0)); +comp_23=` float3 pcol = lerp(col, near, plasma); +comp_24=` ret = plasma * pcol * 1.4 * (0.75 + 0.5 * bass_att) * fog * shade; +comp_25=` ret += (streak * lerp(col, float3(1, 1, 1), 0.4) + ring * col * 1.4 * (0.6 + 0.6 * q6)) * fog; +comp_26=` float wob = (tex2D(sampler_noise_lq, float2(a * 0.159155 * 4.0, time * 0.1)).x - 0.5) * 0.012; +comp_27=` float acc = exp(-pow((r - q5 - wob) * 160.0, 2.0)); +comp_28=` float halo = exp(-pow((r - q5 - wob) * 35.0, 2.0)); +comp_29=` ret += acc * float3(1.0, 0.97, 0.92) * (0.5 + 1.0 * q6); +comp_30=` ret += halo * near * (0.35 + 0.9 * q6); +comp_31=` ret *= saturate((r - q5 * 0.85) * 60.0) * 0.85 + 0.15 * saturate(r * 30.0); +comp_32=` ret = 1.0 - exp(-ret * 1.5); +comp_33=`} diff --git a/presets/cayadev/CaYaDev - Neon Monsoon.milk b/presets/cayadev/CaYaDev - Neon Monsoon.milk new file mode 100644 index 00000000..8f1c7480 --- /dev/null +++ b/presets/cayadev/CaYaDev - Neon Monsoon.milk @@ -0,0 +1,194 @@ +MILKDROP_PRESET_VERSION=201 +PSVERSION=3 +PSVERSION_WARP=3 +PSVERSION_COMP=3 +[preset00] +fRating=5 +fGammaAdj=1 +fDecay=1 +fVideoEchoZoom=1 +fVideoEchoAlpha=0 +nVideoEchoOrientation=0 +nWaveMode=0 +bAdditiveWaves=0 +bWaveDots=0 +bWaveThick=0 +bModWaveAlphaByVolume=0 +bMaximizeWaveColor=0 +bTexWrap=1 +bDarkenCenter=0 +bRedBlueStereo=0 +bBrighten=0 +bDarken=0 +bSolarize=0 +bInvert=0 +fWaveAlpha=0 +fWaveScale=1 +fWaveSmoothing=0.75 +fWaveParam=0 +fModWaveAlphaStart=0.75 +fModWaveAlphaEnd=0.95 +fWarpAnimSpeed=1 +fWarpScale=1 +fZoomExponent=1 +fShader=0 +zoom=1 +rot=0 +cx=0.5 +cy=0.5 +dx=0 +dy=0 +warp=0 +sx=1 +sy=1 +wave_r=1 +wave_g=1 +wave_b=1 +wave_x=0.5 +wave_y=0.5 +ob_size=0 +ob_r=0 +ob_g=0 +ob_b=0 +ob_a=0 +ib_size=0 +ib_r=0 +ib_g=0 +ib_b=0 +ib_a=0 +nMotionVectorsX=12 +nMotionVectorsY=9 +mv_dx=0 +mv_dy=0 +mv_l=0.9 +mv_r=1 +mv_g=1 +mv_b=1 +mv_a=0 +b1n=0 +b2n=0 +b3n=0 +b1x=1 +b2x=1 +b3x=1 +b1ed=0 +wavecode_0_enabled=1 +wavecode_0_samples=256 +wavecode_0_sep=0 +wavecode_0_bSpectrum=0 +wavecode_0_bUseDots=0 +wavecode_0_bDrawThick=0 +wavecode_0_bAdditive=1 +wavecode_0_scaling=1 +wavecode_0_smoothing=0.6 +wavecode_0_r=1 +wavecode_0_g=1 +wavecode_0_b=1 +wavecode_0_a=0.9 +wave_0_per_frame1=t1 = time*0.4; +wave_0_per_frame2=t2 = 0.13 + 0.04*bass_att; +wave_0_per_frame3=a = 0.9*min(1, q30); +wave_0_per_point1=an = sample*6.28318 + t1; +wave_0_per_point2=rr = t2 + value1*0.2; +wave_0_per_point3=x = 0.5 + 0.12*sin(time*0.13) + rr*cos(an)*q31; +wave_0_per_point4=y = 0.5 + 0.08*cos(time*0.11) + rr*sin(an)*q32; +wave_0_per_point5=r = 1; +wave_0_per_point6=g = 0; +wave_0_per_point7=b = 0; +wavecode_1_enabled=1 +wavecode_1_samples=384 +wavecode_1_sep=0 +wavecode_1_bSpectrum=0 +wavecode_1_bUseDots=0 +wavecode_1_bDrawThick=0 +wavecode_1_bAdditive=1 +wavecode_1_scaling=1 +wavecode_1_smoothing=0.7 +wavecode_1_r=1 +wavecode_1_g=1 +wavecode_1_b=1 +wavecode_1_a=0.7 +wave_1_per_frame1=a = 0.7*min(1, q30); +wave_1_per_point1=x = sample; +wave_1_per_point2=y = 0.5 + value2*0.4*sin(sample*3.14159) + 0.22*sin(sample*4 + time*0.37); +wave_1_per_point3=r = 0; +wave_1_per_point4=g = 1; +wave_1_per_point5=b = 0; +shapecode_0_enabled=1 +shapecode_0_sides=40 +shapecode_0_additive=1 +shapecode_0_thickOutline=0 +shapecode_0_textured=0 +shapecode_0_num_inst=1 +shapecode_0_x=0.5 +shapecode_0_y=0.5 +shapecode_0_rad=0.06 +shapecode_0_ang=0 +shapecode_0_tex_ang=0 +shapecode_0_tex_zoom=1 +shapecode_0_r=1 +shapecode_0_g=0.25 +shapecode_0_b=0 +shapecode_0_a=0 +shapecode_0_r2=0 +shapecode_0_g2=0 +shapecode_0_b2=0 +shapecode_0_a2=0 +shapecode_0_border_r=1 +shapecode_0_border_g=1 +shapecode_0_border_b=1 +shapecode_0_border_a=0 +shape_0_per_frame1=x = 0.5 + 0.32*sin(time*0.37); +shape_0_per_frame2=y = 0.5 + 0.28*cos(time*0.29); +shape_0_per_frame3=rad = 0.035 + 0.05*max(bass - 0.9, 0); +shape_0_per_frame4=a = min(0.5, 0.6*max(bass - 1.05, 0))*min(1, q30); +per_frame_1=q30 = 60/max(fps, 15); +per_frame_2=q31 = aspectx; +per_frame_3=q32 = aspecty; +per_frame_4=q1 = 0.5 + 0.9*bass_att; +per_frame_5=q2 = cos(time*0.21)*0.7; +per_frame_6=q3 = sin(time*0.17)*0.7; +per_frame_7=q4 = time*0.035; +per_frame_8=q5 = 0.5 + 0.5*sin(time*0.045); +per_frame_9=zoom = 1.0 + 0.002*sin(time*0.31) + 0.008*max(bass_att - 1.05, 0); +warp_1=`shader_body +warp_2=`{ +warp_3=` float3 P = float3((uv - 0.5) * aspect.xy * 1.3, q4); +warp_4=` float e = 0.03; +warp_5=` float nx1 = tex3D(sampler_noisevol_hq, P + float3(e, 0, 0)).x; +warp_6=` float nx0 = tex3D(sampler_noisevol_hq, P - float3(e, 0, 0)).x; +warp_7=` float ny1 = tex3D(sampler_noisevol_hq, P + float3(0, e, 0)).x; +warp_8=` float ny0 = tex3D(sampler_noisevol_hq, P - float3(0, e, 0)).x; +warp_9=` float2 curl = float2(ny1 - ny0, nx0 - nx1) * aspect.zw; +warp_10=` float2 d = texsize.zw * 10.0; +warp_11=` float gx = lum(GetBlur3(uv + float2(d.x, 0))) - lum(GetBlur3(uv - float2(d.x, 0))); +warp_12=` float gy = lum(GetBlur3(uv + float2(0, d.y))) - lum(GetBlur3(uv - float2(0, d.y))); +warp_13=` float2 swirl = float2(-gy, gx) * aspect.zw; +warp_14=` float2 uv2 = uv + (curl * 0.010 * q1 + swirl * 0.012) * q30; +warp_15=` ret = tex2D(sampler_main, uv2).xyz; +warp_16=` ret = ret * pow(0.982, q30) - 0.0025 * q30; +warp_17=`} +comp_1=`shader_body +comp_2=`{ +comp_3=` float2 d = texsize.zw * 3.0; +comp_4=` float3 m = tex2D(sampler_main, uv).xyz; +comp_5=` float3 bl = GetBlur1(uv); +comp_6=` float hx = lum(GetBlur1(uv + float2(d.x, 0))) - lum(GetBlur1(uv - float2(d.x, 0))); +comp_7=` float hy = lum(GetBlur1(uv + float2(0, d.y))) - lum(GetBlur1(uv - float2(0, d.y))); +comp_8=` float3 n = normalize(float3(hx, hy, 0.05)); +comp_9=` float3 L = normalize(float3(q2, q3, 0.9)); +comp_10=` float diff = saturate(dot(n, L)); +comp_11=` float spec = pow(saturate(dot(reflect(-L, n), float3(0, 0, 1))), 28.0); +comp_12=` float3 inkA = lerp(float3(1.0, 0.05, 0.45), float3(1.0, 0.35, 0.02), q5); +comp_13=` float3 inkB = lerp(float3(0.0, 0.7, 1.0), float3(0.3, 0.2, 1.0), q5); +comp_14=` float a = saturate(m.x * 1.2); +comp_15=` float b = saturate(m.y * 1.4); +comp_16=` float3 col = inkA * a * (1.2 - 0.5 * a) + inkB * b + float3(1.0, 0.95, 0.9) * saturate(a * b * 2.5); +comp_17=` ret = col * (0.5 + 0.7 * diff) + spec * 0.4 * saturate((a + b) * 3.0); +comp_18=` float3 glow = inkA * GetBlur2(uv).x + inkB * GetBlur2(uv).y; +comp_19=` ret += glow * (0.35 + 0.3 * bass_att); +comp_20=` ret += float3(0.02, 0.01, 0.05); +comp_21=` ret = 1.0 - exp(-ret * 1.35); +comp_22=` float2 c = uv - 0.5; +comp_23=` ret *= 1.0 - dot(c, c) * 0.8; +comp_24=`} diff --git a/presets/cayadev/CaYaDev - Northern Veil.milk b/presets/cayadev/CaYaDev - Northern Veil.milk new file mode 100644 index 00000000..38ba15a9 --- /dev/null +++ b/presets/cayadev/CaYaDev - Northern Veil.milk @@ -0,0 +1,133 @@ +MILKDROP_PRESET_VERSION=201 +PSVERSION=3 +PSVERSION_WARP=3 +PSVERSION_COMP=3 +[preset00] +fRating=5 +fGammaAdj=1 +fDecay=1 +fVideoEchoZoom=1 +fVideoEchoAlpha=0 +nVideoEchoOrientation=0 +nWaveMode=0 +bAdditiveWaves=0 +bWaveDots=0 +bWaveThick=0 +bModWaveAlphaByVolume=0 +bMaximizeWaveColor=0 +bTexWrap=0 +bDarkenCenter=0 +bRedBlueStereo=0 +bBrighten=0 +bDarken=0 +bSolarize=0 +bInvert=0 +fWaveAlpha=0 +fWaveScale=1 +fWaveSmoothing=0.75 +fWaveParam=0 +fModWaveAlphaStart=0.75 +fModWaveAlphaEnd=0.95 +fWarpAnimSpeed=1 +fWarpScale=1 +fZoomExponent=1 +fShader=0 +zoom=1 +rot=0 +cx=0.5 +cy=0.5 +dx=0 +dy=0 +warp=0 +sx=1 +sy=1 +wave_r=1 +wave_g=1 +wave_b=1 +wave_x=0.5 +wave_y=0.5 +ob_size=0 +ob_r=0 +ob_g=0 +ob_b=0 +ob_a=0 +ib_size=0 +ib_r=0 +ib_g=0 +ib_b=0 +ib_a=0 +nMotionVectorsX=12 +nMotionVectorsY=9 +mv_dx=0 +mv_dy=0 +mv_l=0.9 +mv_r=1 +mv_g=1 +mv_b=1 +mv_a=0 +b1n=0 +b2n=0 +b3n=0 +b1x=1 +b2x=1 +b3x=1 +b1ed=0 +per_frame_init_1=sway = 0; +per_frame_1=q30 = 60/max(fps, 15); +per_frame_2=q31 = aspectx; +per_frame_3=q32 = aspecty; +per_frame_4=sway = sway + (0.6 + 0.9*mid_att)/fps; +per_frame_5=dy = 0.035/fps; +per_frame_6=q1 = sway; +per_frame_7=q2 = time*0.045; +per_frame_8=q3 = 0.45 + 0.65*bass_att; +per_frame_9=q4 = treb_att; +per_frame_10=q5 = 0.6 + 0.4*sin(time*0.043); +warp_1=`shader_body +warp_2=`{ +warp_3=` float x = uv.x; +warp_4=` float n1 = tex2D(sampler_noise_hq, float2(x * 0.7 + q2 * 0.3, 0.31)).x; +warp_5=` float base = 0.55 + 0.05 * sin(x * 4.0 + q1) + 0.035 * sin(x * 9.0 - q1 * 1.4) + (n1 - 0.5) * 0.14 + 0.012 * sin(x * 26.0 - q1 * 3.0); +warp_6=` float h = base - uv.y; +warp_7=` float ray = tex2D(sampler_noise_hq, float2(x * 7.0 + q2, 0.73)).x; +warp_8=` float ray2 = tex2D(sampler_noise_hq, float2(x * 19.0 - q2 * 2.0, 0.11)).x; +warp_9=` ray = pow(ray, 3.0) * 1.6 + pow(ray2, 4.0) * 0.8; +warp_10=` float upper = exp(-max(h, 0.0) * 9.0) * (0.2 + ray); +warp_11=` float hem = exp(min(h, 0.0) * 90.0); +warp_12=` float curtain = upper * hem; +warp_13=` float3 green = float3(0.15, 1.0, 0.55); +warp_14=` float3 violet = float3(0.75, 0.25, 1.0); +warp_15=` float3 col = lerp(green, violet, saturate(h * 4.0 * q5)); +warp_16=` col = lerp(col, float3(1.0, 0.35, 0.5), saturate(n1 * 2.0 - 1.2)); +warp_17=` float sky = step(uv.y, 0.66); +warp_18=` ret = tex2D(sampler_main, uv).xyz * pow(0.955, q30); +warp_19=` ret += col * curtain * 0.032 * q3 * sky * q30; +warp_20=`} +comp_1=`sampler sampler_pw_noise_lq; +comp_2=`shader_body +comp_3=`{ +comp_4=` float hor = 0.68; +comp_5=` float below = step(hor, uv.y); +comp_6=` float d = uv.y - hor; +comp_7=` float rn = tex2D(sampler_noise_hq, float2(uv.x * 2.0 + time * 0.02, uv.y * 14.0 - time * 0.15)).x - 0.5; +comp_8=` float rip = rn * 0.012 + sin(uv.y * 90.0 - time * 1.3) * 0.0012; +comp_9=` float2 u = lerp(uv, float2(uv.x + rip * saturate(d * 12.0), hor - d * 1.25), below); +comp_10=` float m1 = tex2D(sampler_noise_hq, float2(u.x * 1.3, 0.2)).x; +comp_11=` float m2 = tex2D(sampler_noise_hq, float2(u.x * 4.7, 0.6)).x; +comp_12=` float ridge = hor - 0.02 - 0.075 * m1 - 0.012 * m2; +comp_13=` float land = saturate((u.y - ridge) * 400.0); +comp_14=` float3 a = tex2D(sampler_main, u).xyz; +comp_15=` float3 glow = GetBlur2(u) * 0.5 + GetBlur3(u) * 0.45; +comp_16=` float3 skycol = lerp(float3(0.01, 0.015, 0.05), float3(0.03, 0.06, 0.1), saturate((u.y - 0.2) * 2.0)); +comp_17=` float2 sp = u * texsize.xy / 512.0; +comp_18=` float4 st = tex2D(sampler_pw_noise_lq, sp); +comp_19=` float tw = 0.55 + 0.45 * sin(time * (1.3 + st.z * 4.0) + st.w * 30.0); +comp_20=` float star = saturate((st.x * st.y - 0.975) * 45.0) * tw * (0.6 + 0.5 * q4); +comp_21=` float3 s = skycol + a * 1.1 + glow + star * float3(0.85, 0.9, 1.0) * (1.0 - saturate(lum(a) * 3.0)); +comp_22=` float3 landcol = float3(0.006, 0.01, 0.02) + glow * 0.05; +comp_23=` s = lerp(s, landcol, land); +comp_24=` float fade = lerp(1.0, 0.55 * (1.0 - saturate(d * 2.2)), below); +comp_25=` ret = s * fade; +comp_26=` ret += float3(0.05, 0.12, 0.1) * exp(-abs(d) * 120.0) * (0.5 + 0.5 * lum(GetBlur3(float2(uv.x, 0.5))) * 4.0); +comp_27=` ret = 1.0 - exp(-ret * 1.6); +comp_28=`} diff --git a/presets/cayadev/CaYaDev - Prism Lattice.milk b/presets/cayadev/CaYaDev - Prism Lattice.milk new file mode 100644 index 00000000..fec3929a --- /dev/null +++ b/presets/cayadev/CaYaDev - Prism Lattice.milk @@ -0,0 +1,194 @@ +MILKDROP_PRESET_VERSION=201 +PSVERSION=3 +PSVERSION_WARP=3 +PSVERSION_COMP=3 +[preset00] +fRating=5 +fGammaAdj=1 +fDecay=1 +fVideoEchoZoom=1 +fVideoEchoAlpha=0 +nVideoEchoOrientation=0 +nWaveMode=0 +bAdditiveWaves=0 +bWaveDots=0 +bWaveThick=0 +bModWaveAlphaByVolume=0 +bMaximizeWaveColor=0 +bTexWrap=0 +bDarkenCenter=0 +bRedBlueStereo=0 +bBrighten=0 +bDarken=0 +bSolarize=0 +bInvert=0 +fWaveAlpha=0 +fWaveScale=1 +fWaveSmoothing=0.75 +fWaveParam=0 +fModWaveAlphaStart=0.75 +fModWaveAlphaEnd=0.95 +fWarpAnimSpeed=1 +fWarpScale=1 +fZoomExponent=1 +fShader=0 +zoom=1 +rot=0 +cx=0.5 +cy=0.5 +dx=0 +dy=0 +warp=0 +sx=1 +sy=1 +wave_r=1 +wave_g=1 +wave_b=1 +wave_x=0.5 +wave_y=0.5 +ob_size=0 +ob_r=0 +ob_g=0 +ob_b=0 +ob_a=0 +ib_size=0 +ib_r=0 +ib_g=0 +ib_b=0 +ib_a=0 +nMotionVectorsX=12 +nMotionVectorsY=9 +mv_dx=0 +mv_dy=0 +mv_l=0.9 +mv_r=1 +mv_g=1 +mv_b=1 +mv_a=0 +b1n=0 +b2n=0 +b3n=0 +b1x=1 +b2x=1 +b3x=1 +b1ed=0 +wavecode_0_enabled=1 +wavecode_0_samples=300 +wavecode_0_sep=0 +wavecode_0_bSpectrum=0 +wavecode_0_bUseDots=0 +wavecode_0_bDrawThick=0 +wavecode_0_bAdditive=1 +wavecode_0_scaling=1 +wavecode_0_smoothing=0.5 +wavecode_0_r=1 +wavecode_0_g=1 +wavecode_0_b=1 +wavecode_0_a=0.8 +wave_0_per_frame1=t1 = time*0.9; +wave_0_per_frame2=a = 0.8*min(1, q30); +wave_0_per_point1=an = sample*6.28318; +wave_0_per_point2=rr = 0.07 + value1*0.1; +wave_0_per_point3=x = 0.5 + 0.2*cos(t1)*q31 + rr*cos(an)*q31; +wave_0_per_point4=y = 0.5 + 0.2*sin(t1)*q32 + rr*sin(an)*q32; +wave_0_per_point5=r = 0; +wave_0_per_point6=g = 1; +wave_0_per_point7=b = 0; +shapecode_0_enabled=1 +shapecode_0_sides=6 +shapecode_0_additive=1 +shapecode_0_thickOutline=1 +shapecode_0_textured=0 +shapecode_0_num_inst=3 +shapecode_0_x=0.5 +shapecode_0_y=0.5 +shapecode_0_rad=0.2 +shapecode_0_ang=0 +shapecode_0_tex_ang=0 +shapecode_0_tex_zoom=1 +shapecode_0_r=0 +shapecode_0_g=0 +shapecode_0_b=0 +shapecode_0_a=0 +shapecode_0_r2=0 +shapecode_0_g2=1 +shapecode_0_b2=0 +shapecode_0_a2=0 +shapecode_0_border_r=1 +shapecode_0_border_g=0 +shapecode_0_border_b=0 +shapecode_0_border_a=1 +shape_0_per_frame1=rad = 0.08 + instance*0.09 + 0.05*bass_att*(1 - instance*0.3); +shape_0_per_frame2=ang = q2*(1 + instance*0.4)*if(equal(instance, 1), -1, 1); +shape_0_per_frame3=border_a = (0.3 + 0.6*min(1, max(bass - 0.9, 0)))*min(1, q30); +shapecode_1_enabled=1 +shapecode_1_sides=3 +shapecode_1_additive=1 +shapecode_1_thickOutline=0 +shapecode_1_textured=0 +shapecode_1_num_inst=3 +shapecode_1_x=0.5 +shapecode_1_y=0.5 +shapecode_1_rad=0.04 +shapecode_1_ang=0 +shapecode_1_tex_ang=0 +shapecode_1_tex_zoom=1 +shapecode_1_r=0 +shapecode_1_g=0 +shapecode_1_b=1 +shapecode_1_a=0.9 +shapecode_1_r2=0 +shapecode_1_g2=0 +shapecode_1_b2=1 +shapecode_1_a2=0 +shapecode_1_border_r=1 +shapecode_1_border_g=1 +shapecode_1_border_b=1 +shapecode_1_border_a=0 +shape_1_per_frame1=an = time*0.6 + instance*2.0944; +shape_1_per_frame2=x = 0.5 + 0.21*cos(an)*q31; +shape_1_per_frame3=y = 0.5 + 0.21*sin(an)*q32; +shape_1_per_frame4=ang = -an; +shape_1_per_frame5=rad = 0.02 + 0.03*treb_att; +shape_1_per_frame6=a = (0.3 + 0.6*min(1, treb_att))*min(1, q30); +per_frame_init_1=spin = 0; +per_frame_1=q30 = 60/max(fps, 15); +per_frame_2=q31 = aspectx; +per_frame_3=q32 = aspecty; +per_frame_4=spin = spin + (0.15 + 0.5*max(bass_att - 0.9, 0))/fps; +per_frame_5=zoom = 1.0 + (0.35 + 0.35*bass_att)/fps; +per_frame_6=rot = (0.10 + 0.08*sin(time*0.2))/fps; +per_frame_7=q1 = 6; +per_frame_8=q2 = spin; +per_frame_9=q3 = time*0.03; +per_frame_10=q4 = treb_att; +warp_1=`shader_body +warp_2=`{ +warp_3=` ret = tex2D(sampler_main, uv).xyz; +warp_4=` ret += (ret - GetBlur1(uv)) * 0.1 * q30; +warp_5=` ret = ret * pow(0.968, q30) - 0.003 * q30; +warp_6=`} +comp_1=`shader_body +comp_2=`{ +comp_3=` float2 p = (uv - 0.5) * aspect.xy; +comp_4=` float r = length(p); +comp_5=` float a = atan2(p.y, p.x) + q2 * 0.3; +comp_6=` float seg = 6.28318 / q1; +comp_7=` float k = frac(a / seg); +comp_8=` a = abs(k - 0.5) * seg; +comp_9=` float2 m = float2(cos(a), sin(a)) * r; +comp_10=` float2 uvk = 0.5 + m * aspect.zw; +comp_11=` float3 s = tex2D(sampler_fc_main, uvk).xyz; +comp_12=` float3 sb = GetBlur1(uvk); +comp_13=` float3 sb2 = GetBlur2(uvk); +comp_14=` float3 c1 = 0.55 + 0.45 * cos(6.28318 * (float3(0.0, 0.1, 0.2) + q3)); +comp_15=` float3 c2 = 0.55 + 0.45 * cos(6.28318 * (float3(0.5, 0.6, 0.7) + q3 + r * 0.6)); +comp_16=` float3 c3 = float3(0.95, 0.97, 1.0); +comp_17=` float fr = s.x * 1.2 + saturate(s.x - sb.x) * 2.0; +comp_18=` float scope = s.y * 1.1 + saturate(s.y - sb.y) * 2.0; +comp_19=` float tri = s.z; +comp_20=` ret = c1 * fr + c2 * scope + c3 * tri * 0.8; +comp_21=` ret += (c1 * sb2.x + c2 * sb2.y + c3 * sb2.z) * (0.5 + 0.3 * q4); +comp_22=` ret = 1.0 - exp(-ret * 1.4); +comp_23=` ret *= saturate(1.3 - r * 1.2); +comp_24=`} diff --git a/presets/cayadev/CaYaDev - Twelve Moons.milk b/presets/cayadev/CaYaDev - Twelve Moons.milk new file mode 100644 index 00000000..0fd8fde2 --- /dev/null +++ b/presets/cayadev/CaYaDev - Twelve Moons.milk @@ -0,0 +1,494 @@ +MILKDROP_PRESET_VERSION=201 +PSVERSION=3 +PSVERSION_WARP=3 +PSVERSION_COMP=3 +[preset00] +fRating=5 +fGammaAdj=1 +fDecay=1 +fVideoEchoZoom=1 +fVideoEchoAlpha=0 +nVideoEchoOrientation=0 +nWaveMode=0 +bAdditiveWaves=0 +bWaveDots=0 +bWaveThick=0 +bModWaveAlphaByVolume=0 +bMaximizeWaveColor=0 +bTexWrap=0 +bDarkenCenter=0 +bRedBlueStereo=0 +bBrighten=0 +bDarken=0 +bSolarize=0 +bInvert=0 +fWaveAlpha=0 +fWaveScale=1 +fWaveSmoothing=0.75 +fWaveParam=0 +fModWaveAlphaStart=0.75 +fModWaveAlphaEnd=0.95 +fWarpAnimSpeed=1 +fWarpScale=1 +fZoomExponent=1 +fShader=0 +zoom=1 +rot=0 +cx=0.5 +cy=0.5 +dx=0 +dy=0 +warp=0 +sx=1 +sy=1 +wave_r=1 +wave_g=1 +wave_b=1 +wave_x=0.5 +wave_y=0.5 +ob_size=0 +ob_r=0 +ob_g=0 +ob_b=0 +ob_a=0 +ib_size=0 +ib_r=0 +ib_g=0 +ib_b=0 +ib_a=0 +nMotionVectorsX=12 +nMotionVectorsY=9 +mv_dx=0 +mv_dy=0 +mv_l=0.9 +mv_r=1 +mv_g=1 +mv_b=1 +mv_a=0 +b1n=0 +b2n=0 +b3n=0 +b1x=1 +b2x=1 +b3x=1 +b1ed=0 +wavecode_0_enabled=1 +wavecode_0_samples=96 +wavecode_0_sep=0 +wavecode_0_bSpectrum=0 +wavecode_0_bUseDots=0 +wavecode_0_bDrawThick=0 +wavecode_0_bAdditive=1 +wavecode_0_scaling=1 +wavecode_0_smoothing=0.6 +wavecode_0_r=1 +wavecode_0_g=1 +wavecode_0_b=1 +wavecode_0_a=0.9 +wave_0_per_frame1=t1 = q5; +wave_0_per_frame2=a = 0.9*min(1, q30); +wave_0_per_frame3=t2 = 0.170; +wave_0_per_frame4=t3 = 0.010; +wave_0_per_frame5=t4 = 0.55 + 0.45*sin(t1); +wave_0_per_point1=an = sample*6.28318; +wave_0_per_point2=cx = 0.5 + t2*cos(t1)*q31; +wave_0_per_point3=cy = 0.5 - t2*sin(t1)*0.32*q32; +wave_0_per_point4=rr = t3*(1 + value1*2.2)*(0.75 + 0.35*t4); +wave_0_per_point5=x = cx + rr*cos(an)*q31; +wave_0_per_point6=y = cy + rr*sin(an)*q32; +wave_0_per_point7=r = 1*t4; +wave_0_per_point8=g = 0.55*t4; +wave_0_per_point9=b = 0.2*t4; +wavecode_1_enabled=1 +wavecode_1_samples=96 +wavecode_1_sep=0 +wavecode_1_bSpectrum=0 +wavecode_1_bUseDots=0 +wavecode_1_bDrawThick=0 +wavecode_1_bAdditive=1 +wavecode_1_scaling=1 +wavecode_1_smoothing=0.6 +wavecode_1_r=1 +wavecode_1_g=1 +wavecode_1_b=1 +wavecode_1_a=0.9 +wave_1_per_frame1=t1 = q6; +wave_1_per_frame2=a = 0.9*min(1, q30); +wave_1_per_frame3=t2 = 0.192; +wave_1_per_frame4=t3 = 0.014; +wave_1_per_frame5=t4 = 0.55 + 0.45*sin(t1); +wave_1_per_point1=an = sample*6.28318; +wave_1_per_point2=cx = 0.5 + t2*cos(t1)*q31; +wave_1_per_point3=cy = 0.5 - t2*sin(t1)*0.32*q32; +wave_1_per_point4=rr = t3*(1 + value1*2.2)*(0.75 + 0.35*t4); +wave_1_per_point5=x = cx + rr*cos(an)*q31; +wave_1_per_point6=y = cy + rr*sin(an)*q32; +wave_1_per_point7=r = 0.3*t4; +wave_1_per_point8=g = 0.8*t4; +wave_1_per_point9=b = 1*t4; +wavecode_2_enabled=1 +wavecode_2_samples=96 +wavecode_2_sep=0 +wavecode_2_bSpectrum=0 +wavecode_2_bUseDots=0 +wavecode_2_bDrawThick=0 +wavecode_2_bAdditive=1 +wavecode_2_scaling=1 +wavecode_2_smoothing=0.6 +wavecode_2_r=1 +wavecode_2_g=1 +wavecode_2_b=1 +wavecode_2_a=0.9 +wave_2_per_frame1=t1 = q7; +wave_2_per_frame2=a = 0.9*min(1, q30); +wave_2_per_frame3=t2 = 0.214; +wave_2_per_frame4=t3 = 0.018; +wave_2_per_frame5=t4 = 0.55 + 0.45*sin(t1); +wave_2_per_point1=an = sample*6.28318; +wave_2_per_point2=cx = 0.5 + t2*cos(t1)*q31; +wave_2_per_point3=cy = 0.5 - t2*sin(t1)*0.32*q32; +wave_2_per_point4=rr = t3*(1 + value1*2.2)*(0.75 + 0.35*t4); +wave_2_per_point5=x = cx + rr*cos(an)*q31; +wave_2_per_point6=y = cy + rr*sin(an)*q32; +wave_2_per_point7=r = 1*t4; +wave_2_per_point8=g = 0.3*t4; +wave_2_per_point9=b = 0.55*t4; +wavecode_3_enabled=1 +wavecode_3_samples=96 +wavecode_3_sep=0 +wavecode_3_bSpectrum=0 +wavecode_3_bUseDots=0 +wavecode_3_bDrawThick=0 +wavecode_3_bAdditive=1 +wavecode_3_scaling=1 +wavecode_3_smoothing=0.6 +wavecode_3_r=1 +wavecode_3_g=1 +wavecode_3_b=1 +wavecode_3_a=0.9 +wave_3_per_frame1=t1 = q8; +wave_3_per_frame2=a = 0.9*min(1, q30); +wave_3_per_frame3=t2 = 0.236; +wave_3_per_frame4=t3 = 0.022; +wave_3_per_frame5=t4 = 0.55 + 0.45*sin(t1); +wave_3_per_point1=an = sample*6.28318; +wave_3_per_point2=cx = 0.5 + t2*cos(t1)*q31; +wave_3_per_point3=cy = 0.5 - t2*sin(t1)*0.32*q32; +wave_3_per_point4=rr = t3*(1 + value1*2.2)*(0.75 + 0.35*t4); +wave_3_per_point5=x = cx + rr*cos(an)*q31; +wave_3_per_point6=y = cy + rr*sin(an)*q32; +wave_3_per_point7=r = 0.55*t4; +wave_3_per_point8=g = 1*t4; +wave_3_per_point9=b = 0.5*t4; +wavecode_4_enabled=1 +wavecode_4_samples=96 +wavecode_4_sep=0 +wavecode_4_bSpectrum=0 +wavecode_4_bUseDots=0 +wavecode_4_bDrawThick=0 +wavecode_4_bAdditive=1 +wavecode_4_scaling=1 +wavecode_4_smoothing=0.6 +wavecode_4_r=1 +wavecode_4_g=1 +wavecode_4_b=1 +wavecode_4_a=0.9 +wave_4_per_frame1=t1 = q33; +wave_4_per_frame2=a = 0.9*min(1, q30); +wave_4_per_frame3=t2 = 0.258; +wave_4_per_frame4=t3 = 0.010; +wave_4_per_frame5=t4 = 0.55 + 0.45*sin(t1); +wave_4_per_point1=an = sample*6.28318; +wave_4_per_point2=cx = 0.5 + t2*cos(t1)*q31; +wave_4_per_point3=cy = 0.5 - t2*sin(t1)*0.32*q32; +wave_4_per_point4=rr = t3*(1 + value1*2.2)*(0.75 + 0.35*t4); +wave_4_per_point5=x = cx + rr*cos(an)*q31; +wave_4_per_point6=y = cy + rr*sin(an)*q32; +wave_4_per_point7=r = 0.8*t4; +wave_4_per_point8=g = 0.5*t4; +wave_4_per_point9=b = 1*t4; +wavecode_5_enabled=1 +wavecode_5_samples=96 +wavecode_5_sep=0 +wavecode_5_bSpectrum=0 +wavecode_5_bUseDots=0 +wavecode_5_bDrawThick=0 +wavecode_5_bAdditive=1 +wavecode_5_scaling=1 +wavecode_5_smoothing=0.6 +wavecode_5_r=1 +wavecode_5_g=1 +wavecode_5_b=1 +wavecode_5_a=0.9 +wave_5_per_frame1=t1 = q34; +wave_5_per_frame2=a = 0.9*min(1, q30); +wave_5_per_frame3=t2 = 0.280; +wave_5_per_frame4=t3 = 0.014; +wave_5_per_frame5=t4 = 0.55 + 0.45*sin(t1); +wave_5_per_point1=an = sample*6.28318; +wave_5_per_point2=cx = 0.5 + t2*cos(t1)*q31; +wave_5_per_point3=cy = 0.5 - t2*sin(t1)*0.32*q32; +wave_5_per_point4=rr = t3*(1 + value1*2.2)*(0.75 + 0.35*t4); +wave_5_per_point5=x = cx + rr*cos(an)*q31; +wave_5_per_point6=y = cy + rr*sin(an)*q32; +wave_5_per_point7=r = 1*t4; +wave_5_per_point8=g = 0.85*t4; +wave_5_per_point9=b = 0.35*t4; +wavecode_6_enabled=1 +wavecode_6_samples=96 +wavecode_6_sep=0 +wavecode_6_bSpectrum=0 +wavecode_6_bUseDots=0 +wavecode_6_bDrawThick=0 +wavecode_6_bAdditive=1 +wavecode_6_scaling=1 +wavecode_6_smoothing=0.6 +wavecode_6_r=1 +wavecode_6_g=1 +wavecode_6_b=1 +wavecode_6_a=0.9 +wave_6_per_frame1=t1 = q35; +wave_6_per_frame2=a = 0.9*min(1, q30); +wave_6_per_frame3=t2 = 0.302; +wave_6_per_frame4=t3 = 0.018; +wave_6_per_frame5=t4 = 0.55 + 0.45*sin(t1); +wave_6_per_point1=an = sample*6.28318; +wave_6_per_point2=cx = 0.5 + t2*cos(t1)*q31; +wave_6_per_point3=cy = 0.5 - t2*sin(t1)*0.32*q32; +wave_6_per_point4=rr = t3*(1 + value1*2.2)*(0.75 + 0.35*t4); +wave_6_per_point5=x = cx + rr*cos(an)*q31; +wave_6_per_point6=y = cy + rr*sin(an)*q32; +wave_6_per_point7=r = 0.25*t4; +wave_6_per_point8=g = 0.55*t4; +wave_6_per_point9=b = 1*t4; +wavecode_7_enabled=1 +wavecode_7_samples=96 +wavecode_7_sep=0 +wavecode_7_bSpectrum=0 +wavecode_7_bUseDots=0 +wavecode_7_bDrawThick=0 +wavecode_7_bAdditive=1 +wavecode_7_scaling=1 +wavecode_7_smoothing=0.6 +wavecode_7_r=1 +wavecode_7_g=1 +wavecode_7_b=1 +wavecode_7_a=0.9 +wave_7_per_frame1=t1 = q36; +wave_7_per_frame2=a = 0.9*min(1, q30); +wave_7_per_frame3=t2 = 0.324; +wave_7_per_frame4=t3 = 0.022; +wave_7_per_frame5=t4 = 0.55 + 0.45*sin(t1); +wave_7_per_point1=an = sample*6.28318; +wave_7_per_point2=cx = 0.5 + t2*cos(t1)*q31; +wave_7_per_point3=cy = 0.5 - t2*sin(t1)*0.32*q32; +wave_7_per_point4=rr = t3*(1 + value1*2.2)*(0.75 + 0.35*t4); +wave_7_per_point5=x = cx + rr*cos(an)*q31; +wave_7_per_point6=y = cy + rr*sin(an)*q32; +wave_7_per_point7=r = 1*t4; +wave_7_per_point8=g = 0.45*t4; +wave_7_per_point9=b = 0.35*t4; +wavecode_8_enabled=1 +wavecode_8_samples=96 +wavecode_8_sep=0 +wavecode_8_bSpectrum=0 +wavecode_8_bUseDots=0 +wavecode_8_bDrawThick=0 +wavecode_8_bAdditive=1 +wavecode_8_scaling=1 +wavecode_8_smoothing=0.6 +wavecode_8_r=1 +wavecode_8_g=1 +wavecode_8_b=1 +wavecode_8_a=0.9 +wave_8_per_frame1=t1 = q37; +wave_8_per_frame2=a = 0.9*min(1, q30); +wave_8_per_frame3=t2 = 0.346; +wave_8_per_frame4=t3 = 0.010; +wave_8_per_frame5=t4 = 0.55 + 0.45*sin(t1); +wave_8_per_point1=an = sample*6.28318; +wave_8_per_point2=cx = 0.5 + t2*cos(t1)*q31; +wave_8_per_point3=cy = 0.5 - t2*sin(t1)*0.32*q32; +wave_8_per_point4=rr = t3*(1 + value1*2.2)*(0.75 + 0.35*t4); +wave_8_per_point5=x = cx + rr*cos(an)*q31; +wave_8_per_point6=y = cy + rr*sin(an)*q32; +wave_8_per_point7=r = 0.4*t4; +wave_8_per_point8=g = 1*t4; +wave_8_per_point9=b = 0.85*t4; +wavecode_9_enabled=1 +wavecode_9_samples=96 +wavecode_9_sep=0 +wavecode_9_bSpectrum=0 +wavecode_9_bUseDots=0 +wavecode_9_bDrawThick=0 +wavecode_9_bAdditive=1 +wavecode_9_scaling=1 +wavecode_9_smoothing=0.6 +wavecode_9_r=1 +wavecode_9_g=1 +wavecode_9_b=1 +wavecode_9_a=0.9 +wave_9_per_frame1=t1 = q38; +wave_9_per_frame2=a = 0.9*min(1, q30); +wave_9_per_frame3=t2 = 0.368; +wave_9_per_frame4=t3 = 0.014; +wave_9_per_frame5=t4 = 0.55 + 0.45*sin(t1); +wave_9_per_point1=an = sample*6.28318; +wave_9_per_point2=cx = 0.5 + t2*cos(t1)*q31; +wave_9_per_point3=cy = 0.5 - t2*sin(t1)*0.32*q32; +wave_9_per_point4=rr = t3*(1 + value1*2.2)*(0.75 + 0.35*t4); +wave_9_per_point5=x = cx + rr*cos(an)*q31; +wave_9_per_point6=y = cy + rr*sin(an)*q32; +wave_9_per_point7=r = 1*t4; +wave_9_per_point8=g = 0.6*t4; +wave_9_per_point9=b = 0.9*t4; +wavecode_10_enabled=1 +wavecode_10_samples=96 +wavecode_10_sep=0 +wavecode_10_bSpectrum=0 +wavecode_10_bUseDots=0 +wavecode_10_bDrawThick=0 +wavecode_10_bAdditive=1 +wavecode_10_scaling=1 +wavecode_10_smoothing=0.6 +wavecode_10_r=1 +wavecode_10_g=1 +wavecode_10_b=1 +wavecode_10_a=0.9 +wave_10_per_frame1=t1 = q39; +wave_10_per_frame2=a = 0.9*min(1, q30); +wave_10_per_frame3=t2 = 0.390; +wave_10_per_frame4=t3 = 0.018; +wave_10_per_frame5=t4 = 0.55 + 0.45*sin(t1); +wave_10_per_point1=an = sample*6.28318; +wave_10_per_point2=cx = 0.5 + t2*cos(t1)*q31; +wave_10_per_point3=cy = 0.5 - t2*sin(t1)*0.32*q32; +wave_10_per_point4=rr = t3*(1 + value1*2.2)*(0.75 + 0.35*t4); +wave_10_per_point5=x = cx + rr*cos(an)*q31; +wave_10_per_point6=y = cy + rr*sin(an)*q32; +wave_10_per_point7=r = 0.7*t4; +wave_10_per_point8=g = 0.85*t4; +wave_10_per_point9=b = 1*t4; +wavecode_11_enabled=1 +wavecode_11_samples=96 +wavecode_11_sep=0 +wavecode_11_bSpectrum=0 +wavecode_11_bUseDots=0 +wavecode_11_bDrawThick=0 +wavecode_11_bAdditive=1 +wavecode_11_scaling=1 +wavecode_11_smoothing=0.6 +wavecode_11_r=1 +wavecode_11_g=1 +wavecode_11_b=1 +wavecode_11_a=0.9 +wave_11_per_frame1=t1 = q40; +wave_11_per_frame2=a = 0.9*min(1, q30); +wave_11_per_frame3=t2 = 0.412; +wave_11_per_frame4=t3 = 0.022; +wave_11_per_frame5=t4 = 0.55 + 0.45*sin(t1); +wave_11_per_point1=an = sample*6.28318; +wave_11_per_point2=cx = 0.5 + t2*cos(t1)*q31; +wave_11_per_point3=cy = 0.5 - t2*sin(t1)*0.32*q32; +wave_11_per_point4=rr = t3*(1 + value1*2.2)*(0.75 + 0.35*t4); +wave_11_per_point5=x = cx + rr*cos(an)*q31; +wave_11_per_point6=y = cy + rr*sin(an)*q32; +wave_11_per_point7=r = 1*t4; +wave_11_per_point8=g = 0.75*t4; +wave_11_per_point9=b = 0.5*t4; +per_frame_init_1=ph0 = 0; +per_frame_init_2=ph1 = 0; +per_frame_init_3=ph2 = 0; +per_frame_init_4=ph3 = 0; +per_frame_init_5=ph4 = 0; +per_frame_init_6=ph5 = 0; +per_frame_init_7=ph6 = 0; +per_frame_init_8=ph7 = 0; +per_frame_init_9=ph8 = 0; +per_frame_init_10=ph9 = 0; +per_frame_init_11=ph10 = 0; +per_frame_init_12=ph11 = 0; +per_frame_1=q30 = 60/max(fps, 15); +per_frame_2=q31 = aspectx; +per_frame_3=q32 = aspecty; +per_frame_4=q1 = time*0.03; +per_frame_5=q2 = 0.6 + 0.5*bass_att; +per_frame_6=q3 = treb_att; +per_frame_7=q4 = time*0.004; +per_frame_8=ph0 = ph0 + 0.9000*(0.6 + 0.4*mid_att)/fps; +per_frame_9=q5 = ph0 + 0.0000; +per_frame_10=ph1 = ph1 + 0.6278*(0.6 + 0.4*mid_att)/fps; +per_frame_11=q6 = ph1 + 2.4000; +per_frame_12=ph2 = ph2 + 0.4761*(0.6 + 0.4*mid_att)/fps; +per_frame_13=q7 = ph2 + 4.7999; +per_frame_14=ph3 = ph3 + 0.3803*(0.6 + 0.4*mid_att)/fps; +per_frame_15=q8 = ph3 + 7.1999; +per_frame_16=ph4 = ph4 + 0.3148*(0.6 + 0.4*mid_att)/fps; +per_frame_17=q33 = ph4 + 9.5998; +per_frame_18=ph5 = ph5 + 0.2673*(0.6 + 0.4*mid_att)/fps; +per_frame_19=q34 = ph5 + 11.9998; +per_frame_20=ph6 = ph6 + 0.2315*(0.6 + 0.4*mid_att)/fps; +per_frame_21=q35 = ph6 + 14.3998; +per_frame_22=ph7 = ph7 + 0.2036*(0.6 + 0.4*mid_att)/fps; +per_frame_23=q36 = ph7 + 16.7997; +per_frame_24=ph8 = ph8 + 0.1813*(0.6 + 0.4*mid_att)/fps; +per_frame_25=q37 = ph8 + 19.1997; +per_frame_26=ph9 = ph9 + 0.1631*(0.6 + 0.4*mid_att)/fps; +per_frame_27=q38 = ph9 + 21.5996; +per_frame_28=ph10 = ph10 + 0.1480*(0.6 + 0.4*mid_att)/fps; +per_frame_29=q39 = ph10 + 23.9996; +per_frame_30=ph11 = ph11 + 0.1353*(0.6 + 0.4*mid_att)/fps; +per_frame_31=q40 = ph11 + 26.3996; +warp_1=`shader_body +warp_2=`{ +warp_3=` float k = pow(0.94, q30); +warp_4=` ret = lerp(tex2D(sampler_main, uv).xyz, GetBlur1(uv), 0.36 * min(1.0, q30)) * k; +warp_5=` ret = ret - 0.002 * q30; +warp_6=`} +comp_1=`sampler sampler_pw_noise_lq; +comp_2=`shader_body +comp_3=`{ +comp_4=` float2 p = (uv - 0.5) * aspect.xy; +comp_5=` float R = 0.12; +comp_6=` float r = length(p); +comp_7=` float3 trails = tex2D(sampler_main, uv).xyz; +comp_8=` float3 tglow = GetBlur1(uv) * 0.8 + GetBlur2(uv) * 0.6; +comp_9=` float2 sp = uv * texsize.xy / 512.0; +comp_10=` float4 st = tex2D(sampler_pw_noise_lq, sp); +comp_11=` float tw = 0.55 + 0.45 * sin(time * (1.3 + st.z * 4.0) + st.w * 30.0); +comp_12=` float star = saturate((st.x * st.y - 0.975) * 45.0) * tw * (0.5 + 0.5 * q3); +comp_13=` float3 bg = lerp(float3(0.01, 0.01, 0.03), float3(0.04, 0.02, 0.06), saturate(1.0 - r * 1.5)); +comp_14=` bg += tex2D(sampler_noise_hq, uv * 0.6 + q4).x * float3(0.03, 0.015, 0.05); +comp_15=` float3 col = bg + star * float3(0.85, 0.9, 1.0); +comp_16=` float2 e = p / float2(1.0, 0.32); +comp_17=` float er = length(e); +comp_18=` float band = saturate((er - 0.16) * 200.0) * saturate((0.28 - er) * 200.0); +comp_19=` float gaps = tex2D(sampler_noise_hq, float2(er * 2.2, 0.5)).x; +comp_20=` float3 ringc = lerp(float3(0.75, 0.62, 0.45), float3(0.95, 0.88, 0.75), gaps) * (0.35 + 0.65 * smoothstep(0.3, 0.7, gaps)); +comp_21=` float ringa = band * 0.85; +comp_22=` float behind = step(p.y, 0.0); +comp_23=` col = lerp(col, ringc * 0.8, ringa * behind); +comp_24=` float pm = saturate((R - r) * 400.0); +comp_25=` float z = sqrt(saturate(1.0 - (r * r) / (R * R))); +comp_26=` float3 n = float3(p / R, z); +comp_27=` float lat = n.y; +comp_28=` float lon = atan2(n.x, z) * 0.3 + q1; +comp_29=` float bands = tex2D(sampler_noise_hq, float2(lon * 0.5, lat * 0.6 + 0.3)).x; +comp_30=` float bands2 = tex2D(sampler_noise_hq, float2(lon * 1.5, lat * 2.0 + 0.7)).x; +comp_31=` float stripe = sin(lat * 11.0 + bands * 2.5 + bands2 * 0.8) * 0.5 + 0.5; +comp_32=` float3 gas = lerp(float3(0.7, 0.38, 0.2), float3(0.98, 0.88, 0.7), stripe); +comp_33=` gas = lerp(gas, float3(0.85, 0.55, 0.35), saturate(sin(lat * 3.0 + 1.0)) * 0.4); +comp_34=` float storm = exp(-dot(n.xy - float2(0.35, 0.25), n.xy - float2(0.35, 0.25)) * 60.0); +comp_35=` gas = lerp(gas, float3(0.8, 0.35, 0.25), storm * 0.7); +comp_36=` float3 L = normalize(float3(-0.6, -0.35, 0.7)); +comp_37=` float diff = saturate(dot(n, L)); +comp_38=` float3 planet = gas * (0.05 + 1.05 * pow(diff, 0.8)); +comp_39=` planet += float3(0.3, 0.55, 1.0) * pow(1.0 - z, 3.0) * 0.6 * q2; +comp_40=` col = lerp(col, planet, pm); +comp_41=` col = lerp(col, ringc, ringa * (1.0 - behind)); +comp_42=` float atm = exp(-pow((r - R) * 60.0, 2.0)) * (1.0 - pm); +comp_43=` col += float3(0.35, 0.6, 1.0) * atm * 0.5 * q2; +comp_44=` float hide = 1.0 - pm * behind; +comp_45=` col += (trails * 1.2 + tglow) * hide; +comp_46=` ret = 1.0 - exp(-col * 1.5); +comp_47=`} diff --git a/presets/cayadev/LICENSE.md b/presets/cayadev/LICENSE.md new file mode 100644 index 00000000..cd1e05fd --- /dev/null +++ b/presets/cayadev/LICENSE.md @@ -0,0 +1,21 @@ +# License + +The MilkDrop presets in this folder (`*.milk`) are **Copyright (c) 2026 CaYaDev** and are licensed under the +**Creative Commons Attribution 4.0 International License (CC BY 4.0)**. + +To view a copy of this license, visit . + +You are free to share (copy and redistribute in any medium or format) and adapt (remix, transform and build +upon) these presets for any purpose, even commercially, as long as you give appropriate credit, provide a link +to the license, and indicate if changes were made. + +## How to credit + +> "Neon Monsoon" by CaYaDev, from the CaYaDev MilkDrop Presets +> (https://github.com/CaYatur/SoundVisualizer/tree/main/presets/cayadev), licensed under CC BY 4.0. + +Add "modified" if you changed a preset. In a VJ set, a stream or a video description, one line that credits +"CaYaDev MilkDrop Presets (CC BY 4.0)" for the whole set is enough. + +The rest of this repository, including the CAYADEV Visualizer application, is licensed separately under the MIT +License (see `LICENSE` in the repository root). diff --git a/presets/cayadev/README.md b/presets/cayadev/README.md new file mode 100644 index 00000000..f503e9f0 --- /dev/null +++ b/presets/cayadev/README.md @@ -0,0 +1,41 @@ +# CaYaDev MilkDrop Presets + +Original MilkDrop presets made for [CAYADEV Visualizer](https://github.com/CaYatur/SoundVisualizer). They are +built into the app, and you can also use them in any MilkDrop-compatible player. + +Every preset here was written from scratch (no code from community presets) and checked before it was added: + +- **Shaders:** warp and comp shaders; bass, mids and treble each drive something different. +- **Stability:** 90 seconds of looped music without fading to black, washing out to white, or freezing. +- **Speed:** 60 fps at 1080p on an entry-level integrated GPU (measured on an AMD Radeon 610M). +- **MilkDrop 2 match:** MilkDrop 2 presets were rendered in MilkDrop 2 itself (the BeatDrop port) and look the + same as in CAYADEV Visualizer. +- **Refresh rate:** they look the same at 60 Hz and 144 Hz, because trails fade by time, not by frame count. +- **No extra files:** only MilkDrop's built-in noise textures are used, so no texture pack is needed. + +## Presets + +| Preset | Category | Format | +|---|---|---| +| Neon Monsoon | liquid | MilkDrop 2 | +| Event Horizon | tunnel | MilkDrop 2 | +| Prism Lattice | geometric | MilkDrop 2 | +| Northern Veil | ambient | MilkDrop 2 | +| Twelve Moons | space | MilkDrop 3 | + +**MilkDrop 3** presets use more than four custom waves or shapes, or q33–q64. A MilkDrop 2 player loads only +the first four waves and shapes, so these presets show less there. MilkDrop 3 presets were checked in CAYADEV +Visualizer only; MilkDrop 3 itself was not available for testing. + +## Using them elsewhere + +Copy the `.milk` files into your player's preset folder: + +- MilkDrop 2 / BeatDrop / Milkwave: the `presets` folder next to the player. +- projectM: the preset directory from its settings. + +Each file has `PSVERSION=3` (pixel shader model 3.0) and needs DirectX 9.0c-class hardware or newer. + +## License + +[CC BY 4.0](LICENSE.md): use them anywhere, including commercially, and credit "CaYaDev". diff --git a/presets/cayadev/pack.json b/presets/cayadev/pack.json new file mode 100644 index 00000000..d394ee47 --- /dev/null +++ b/presets/cayadev/pack.json @@ -0,0 +1,53 @@ +{ + "name": "CaYaDev MilkDrop Presets", + "author": "CaYaDev", + "license": "CC-BY-4.0", + "presets": [ + { + "file": "CaYaDev - Neon Monsoon.milk", + "id": "md_caya_neon_monsoon", + "category": "liquid", + "description": { + "tr": "İki renkli mürekkep yavaş bir akıntıda ipek gibi kıvrılıyor; yüzey ıslak cam gibi ışık alıyor. Bas akıntıyı hızlandırıyor.", + "en": "Two inks curl like silk in a slow current, and the surface catches light like wet glass. Bass speeds up the current." + } + }, + { + "file": "CaYaDev - Event Horizon.milk", + "id": "md_caya_event_horizon", + "category": "tunnel", + "description": { + "tr": "Akışkan krom duvarlı bir tünel; ucunda vuruşla parlayan bir kara delik halkası. Renk tonu yavaşça dönüyor.", + "en": "A tunnel with liquid chrome walls, ending in a black-hole ring that flares on the beat. The hue turns slowly." + } + }, + { + "file": "CaYaDev - Prism Lattice.milk", + "id": "md_caya_prism_lattice", + "category": "geometric", + "description": { + "tr": "Altıgen çerçeveler ve dönen bir dalga altı kollu bir kaleydoskopta katlanıyor; kenarlar iki tonlu bir paletle parlıyor.", + "en": "Hexagon frames and an orbiting scope fold into a six-way kaleidoscope, with edges lit in a two-tone palette." + } + }, + { + "file": "CaYaDev - Northern Veil.milk", + "id": "md_caya_northern_veil", + "category": "ambient", + "description": { + "tr": "Dağların üstünde kuzey ışıkları ve göldeki dalgalı yansımaları. Bas perdeleri aydınlatıyor, tizler yıldızları kırptırıyor.", + "en": "Northern lights over a mountain ridge, mirrored in a rippling lake. Bass brightens the curtains, treble makes the stars twinkle." + } + }, + { + "file": "CaYaDev - Twelve Moons.milk", + "id": "md_caya_twelve_moons", + "category": "space", + "md3": true, + "description": { + "tr": "Halkalı bir gaz devinin çevresinde, her biri dalga biçimiyle şekillenen on iki ay. MilkDrop 3 presetidir; MilkDrop 2 oynatıcıları ilk dört ayı gösterir.", + "en": "Twelve moons shaped by the waveform orbit a ringed gas giant. A MilkDrop 3 preset; MilkDrop 2 players show the first four moons." + } + } + ] +} diff --git a/scripts/preset-pack.js b/scripts/preset-pack.js new file mode 100644 index 00000000..fa24f551 --- /dev/null +++ b/scripts/preset-pack.js @@ -0,0 +1,139 @@ +/* + * SoundVisualizer — CaYaDev Ses Görselleştirici + * Copyright (c) 2026 Çağan Turgut (CaYatur) — CaYaDev, https://cayadev.com + * https://github.com/CaYatur/SoundVisualizer + * SPDX-License-Identifier: MIT + */ +'use strict'; +/* CaYaDev MilkDrop preset paketi (#825). + * + * Kaynak `presets/cayadev/`: .milk dosyaları ve pack.json (kimlik, kategori, + * TR/EN açıklama). Uygulama dosya okumadan çalışan sayfalarda da (yayın + * katmanı, dışa aktarıcı) presetleri gördüğü için paket JS olarak gömülür: + * bu betik `src/shared/presets-milkdrop-pack.js`i üretir. + * + * node scripts/preset-pack.js gömülü dosyayı yeniden üretir + * node scripts/preset-pack.js --check güncel değilse 1 ile çıkar + * node scripts/preset-pack.js --zip[=] sürüm eki: .milk + LICENSE.md + README.md + * (varsayılan dist/CaYaDev-MilkDrop-Presets-.zip) + * + * Paket CC BY 4.0, uygulama MIT: üretilen dosya da paketin lisansını taşır. */ +const fs = require('fs'); +const path = require('path'); +const zlib = require('zlib'); + +const root = path.join(__dirname, '..'); +const DIR = path.join(root, 'presets', 'cayadev'); +const OUT = path.join(root, 'src', 'shared', 'presets-milkdrop-pack.js'); + +function load() { + const meta = JSON.parse(fs.readFileSync(path.join(DIR, 'pack.json'), 'utf-8')); + const listed = new Set(); + const list = meta.presets.map((p) => { + const m = /^CaYaDev - ([A-Za-z0-9 ]+)\.milk$/.exec(p.file); + if (!m) throw new Error('Dosya adı "CaYaDev - .milk" değil: ' + p.file); + if (!/^md_caya_[a-z0-9_]+$/.test(p.id)) throw new Error('Kimlik md_caya_ ile başlamalı: ' + p.id); + if (!p.description || !p.description.tr || !p.description.en) throw new Error('TR/EN açıklama eksik: ' + p.file); + const source = fs.readFileSync(path.join(DIR, p.file), 'latin1'); + // Başka oynatıcılar UTF-8'i bozuyor; paket dosyaları ASCII + if (/[^\x09\x0a\x0d\x20-\x7e]/.test(source)) throw new Error('ASCII dışı karakter: ' + p.file); + listed.add(p.file); + return { id: p.id, name: m[1], category: p.category, md3: !!p.md3, description: p.description, file: p.file, source }; + }); + const stray = fs.readdirSync(DIR).filter((f) => /\.milk$/i.test(f) && !listed.has(f)); + if (stray.length) throw new Error('pack.json\'da olmayan dosya: ' + stray.join(', ')); + const ids = list.map((p) => p.id); + if (new Set(ids).size !== ids.length) throw new Error('Yinelenen kimlik'); + return list; +} + +function render(list) { + const rows = list.map((p) => ' ' + JSON.stringify({ + id: p.id, name: p.name, category: p.category, md3: p.md3, description: p.description, source: p.source, + }) + ','); + return [ + '/*', + ' * CaYaDev MilkDrop Presets — Copyright (c) 2026 CaYaDev', + ' * https://github.com/CaYatur/SoundVisualizer/tree/main/presets/cayadev', + ' * SPDX-License-Identifier: CC-BY-4.0', + ' */', + "'use strict';", + '/* OTOMATİK ÜRETİLDİ: scripts/preset-pack.js (#825). Elle düzenlemeyin; kaynak', + ' presets/cayadev/ klasörü. Liste shared/presets-milkdrop.js üzerinden yerleşik', + ' havuza giriyor; sayfada bu dosya ondan ÖNCE yükleniyor. */', + '(function () {', + ' const PACK = [', + ...rows, + ' ];', + " if (typeof module !== 'undefined' && module.exports) module.exports = PACK;", + " if (typeof window !== 'undefined' && window) window.SVMilkdropPack = PACK;", + '})();', + '', + ].join('\n'); +} + +// En küçük ZIP yazıcısı (deflate, UTF-8 adlar); yalnız düz dosyalar +function zip(files) { + const crcT = new Int32Array(256); + for (let n = 0; n < 256; n++) { let c = n; for (let k = 0; k < 8; k++) c = c & 1 ? 0xedb88320 ^ (c >>> 1) : c >>> 1; crcT[n] = c; } + const crc = (b) => { let c = -1; for (let i = 0; i < b.length; i++) c = crcT[(c ^ b[i]) & 255] ^ (c >>> 8); return (c ^ -1) >>> 0; }; + const local = []; + const central = []; + let offset = 0; + // Sabit tarih (2026-01-01): aynı içerik aynı zip'i versin + const DOS_TIME = 0, DOS_DATE = ((2026 - 1980) << 9) | (1 << 5) | 1; + for (const f of files) { + const name = Buffer.from(f.name, 'utf-8'); + const data = zlib.deflateRawSync(f.data, { level: 9 }); + const c = crc(f.data); + const h = Buffer.alloc(30); + h.writeUInt32LE(0x04034b50, 0); h.writeUInt16LE(20, 4); h.writeUInt16LE(0x0800, 6); h.writeUInt16LE(8, 8); + h.writeUInt16LE(DOS_TIME, 10); h.writeUInt16LE(DOS_DATE, 12); h.writeUInt32LE(c, 14); + h.writeUInt32LE(data.length, 18); h.writeUInt32LE(f.data.length, 22); h.writeUInt16LE(name.length, 26); h.writeUInt16LE(0, 28); + local.push(h, name, data); + const e = Buffer.alloc(46); + e.writeUInt32LE(0x02014b50, 0); e.writeUInt16LE(20, 4); e.writeUInt16LE(20, 6); e.writeUInt16LE(0x0800, 8); e.writeUInt16LE(8, 10); + e.writeUInt16LE(DOS_TIME, 12); e.writeUInt16LE(DOS_DATE, 14); e.writeUInt32LE(c, 16); + e.writeUInt32LE(data.length, 20); e.writeUInt32LE(f.data.length, 24); e.writeUInt16LE(name.length, 28); + e.writeUInt32LE(offset, 42); + central.push(e, name); + offset += h.length + name.length + data.length; + } + const cd = Buffer.concat(central); + const end = Buffer.alloc(22); + end.writeUInt32LE(0x06054b50, 0); end.writeUInt16LE(files.length, 8); end.writeUInt16LE(files.length, 10); + end.writeUInt32LE(cd.length, 12); end.writeUInt32LE(offset, 16); + return Buffer.concat(local.concat([cd, end])); +} + +function zipName() { + return 'CaYaDev-MilkDrop-Presets-' + require(path.join(root, 'package.json')).version + '.zip'; +} + +module.exports = { load, render, zip, zipName, OUT, DIR }; + +if (require.main === module) { + const args = process.argv.slice(2); + const list = load(); + const text = render(list); + const zipArg = args.find((a) => a === '--zip' || a.startsWith('--zip=')); + if (args.includes('--check')) { + const cur = fs.existsSync(OUT) ? fs.readFileSync(OUT, 'utf-8') : ''; + if (cur !== text) { + console.error('src/shared/presets-milkdrop-pack.js güncel değil: node scripts/preset-pack.js'); + process.exit(1); + } + console.log('Paket güncel: ' + list.length + ' preset'); + } else if (zipArg) { + const out = zipArg.includes('=') ? path.resolve(zipArg.slice(6)) : path.join(root, 'dist', zipName()); + const folder = 'CaYaDev MilkDrop Presets/'; + const files = list.map((p) => ({ name: folder + p.file, data: Buffer.from(p.source, 'latin1') })) + .concat(['LICENSE.md', 'README.md'].map((f) => ({ name: folder + f, data: fs.readFileSync(path.join(DIR, f)) }))); + fs.mkdirSync(path.dirname(out), { recursive: true }); + fs.writeFileSync(out, zip(files)); + console.log(out + ' (' + list.length + ' preset)'); + } else { + fs.writeFileSync(OUT, text); + console.log(path.relative(root, OUT) + ': ' + list.length + ' preset'); + } +} diff --git a/scripts/release-assets.js b/scripts/release-assets.js index c52395ef..c7b27ef8 100644 --- a/scripts/release-assets.js +++ b/scripts/release-assets.js @@ -45,6 +45,9 @@ const ASSETS = [ güncelleme bilgisi bu adı arıyor; yüklenmezse AppImageUpdate çalışmaz. */ { file: 'CAYADEV-Visualizer-' + version + '-linux-x86_64.AppImage.zsync', desc: 'Linux — AppImageUpdate delta file' }, { file: 'CAYADEV-Visualizer-' + version + '-linux-amd64.deb', desc: 'Linux — Debian / Ubuntu' }, + /* CaYaDev MilkDrop preset paketi (#825, CC BY 4.0): `node scripts/preset-pack.js --zip` + dist/ altına üretir; uygulamanın içinde de gömülü geliyor. */ + { file: 'CaYaDev-MilkDrop-Presets-' + version + '.zip', desc: 'MilkDrop presets — CC BY 4.0' }, ]; const labelOf = (a) => a.file + ' (' + a.desc + ')'; @@ -128,7 +131,7 @@ if (CHECK) { console.log('\n' + tag + ': ' + bad + ' sorun, ' + extra.length + ' beklenmeyen dosya'); process.exit(1); } - console.log('\n' + tag + ': altı varlık da yerinde ve etiketli'); + console.log('\n' + tag + ': ' + ASSETS.length + ' varlığın hepsi yerinde ve etiketli'); process.exit(0); } @@ -148,6 +151,7 @@ for (const f of found) console.log('bulundu ' + path.relative(root, f.path)) if (missing.length && !PARTIAL) { console.error('\n' + missing.length + ' dosya eksik, hiçbiri yüklenmedi.\n' + ' Windows: npm run dist:win\n' + + ' Preset paketi: node scripts/preset-pack.js --zip\n' + ' macOS/Linux: gh run download -D , sonra --dir=\n' + ' Bilerek eksik yüklüyorsanız --partial ekleyin.'); process.exit(1); diff --git a/src/admin/index.html b/src/admin/index.html index ce21040a..2290b61a 100644 --- a/src/admin/index.html +++ b/src/admin/index.html @@ -259,6 +259,7 @@

Sahneler

+ diff --git a/src/exporter/index.html b/src/exporter/index.html index 3dc42312..bcfc83e3 100644 --- a/src/exporter/index.html +++ b/src/exporter/index.html @@ -59,6 +59,7 @@ + diff --git a/src/shared/i18n.js b/src/shared/i18n.js index d63b0171..e8ac8efa 100644 --- a/src/shared/i18n.js +++ b/src/shared/i18n.js @@ -3912,6 +3912,15 @@ Bütün birleşimleri sözlüğe yazmak kombinatoryal olurdu; onun yerine ayırıcıdan bölünüp parçalar ayrı ayrı çevriliyor. Sözlükte tam karşılığı olan bir metin buraya hiç gelmez, yukarıda yakalanır. */ + /* CaYaDev paketinin açıklamaları (#825): İngilizcesi pack.json'dan gömülü + paketle geliyor, burada yinelenmiyor. Paket dosyası bu dosyadan sonra + yüklendiği için çağrı anında okunuyor. */ + const pack = typeof window !== 'undefined' && window.SVMilkdropPack; + if (Array.isArray(pack)) { + const hit = pack.find((p) => p.description && p.description.tr === raw.trim()); + if (hit) return hit.description.en; + } + const seg = raw.match(/^(.+?) · (.+)$/); if (seg) return translate(seg[1]) + ' · ' + translate(seg[2]); const breadcrumb = raw.match(/^(.+?)\s+›\s+(.+)$/); diff --git a/src/shared/presets-milkdrop-pack.js b/src/shared/presets-milkdrop-pack.js new file mode 100644 index 00000000..4136f9f3 --- /dev/null +++ b/src/shared/presets-milkdrop-pack.js @@ -0,0 +1,20 @@ +/* + * CaYaDev MilkDrop Presets — Copyright (c) 2026 CaYaDev + * https://github.com/CaYatur/SoundVisualizer/tree/main/presets/cayadev + * SPDX-License-Identifier: CC-BY-4.0 + */ +'use strict'; +/* OTOMATİK ÜRETİLDİ: scripts/preset-pack.js (#825). Elle düzenlemeyin; kaynak + presets/cayadev/ klasörü. Liste shared/presets-milkdrop.js üzerinden yerleşik + havuza giriyor; sayfada bu dosya ondan ÖNCE yükleniyor. */ +(function () { + const PACK = [ + {"id":"md_caya_neon_monsoon","name":"Neon Monsoon","category":"liquid","md3":false,"description":{"tr":"İki renkli mürekkep yavaş bir akıntıda ipek gibi kıvrılıyor; yüzey ıslak cam gibi ışık alıyor. Bas akıntıyı hızlandırıyor.","en":"Two inks curl like silk in a slow current, and the surface catches light like wet glass. Bass speeds up the current."},"source":"MILKDROP_PRESET_VERSION=201\r\nPSVERSION=3\r\nPSVERSION_WARP=3\r\nPSVERSION_COMP=3\r\n[preset00]\r\nfRating=5\r\nfGammaAdj=1\r\nfDecay=1\r\nfVideoEchoZoom=1\r\nfVideoEchoAlpha=0\r\nnVideoEchoOrientation=0\r\nnWaveMode=0\r\nbAdditiveWaves=0\r\nbWaveDots=0\r\nbWaveThick=0\r\nbModWaveAlphaByVolume=0\r\nbMaximizeWaveColor=0\r\nbTexWrap=1\r\nbDarkenCenter=0\r\nbRedBlueStereo=0\r\nbBrighten=0\r\nbDarken=0\r\nbSolarize=0\r\nbInvert=0\r\nfWaveAlpha=0\r\nfWaveScale=1\r\nfWaveSmoothing=0.75\r\nfWaveParam=0\r\nfModWaveAlphaStart=0.75\r\nfModWaveAlphaEnd=0.95\r\nfWarpAnimSpeed=1\r\nfWarpScale=1\r\nfZoomExponent=1\r\nfShader=0\r\nzoom=1\r\nrot=0\r\ncx=0.5\r\ncy=0.5\r\ndx=0\r\ndy=0\r\nwarp=0\r\nsx=1\r\nsy=1\r\nwave_r=1\r\nwave_g=1\r\nwave_b=1\r\nwave_x=0.5\r\nwave_y=0.5\r\nob_size=0\r\nob_r=0\r\nob_g=0\r\nob_b=0\r\nob_a=0\r\nib_size=0\r\nib_r=0\r\nib_g=0\r\nib_b=0\r\nib_a=0\r\nnMotionVectorsX=12\r\nnMotionVectorsY=9\r\nmv_dx=0\r\nmv_dy=0\r\nmv_l=0.9\r\nmv_r=1\r\nmv_g=1\r\nmv_b=1\r\nmv_a=0\r\nb1n=0\r\nb2n=0\r\nb3n=0\r\nb1x=1\r\nb2x=1\r\nb3x=1\r\nb1ed=0\r\nwavecode_0_enabled=1\r\nwavecode_0_samples=256\r\nwavecode_0_sep=0\r\nwavecode_0_bSpectrum=0\r\nwavecode_0_bUseDots=0\r\nwavecode_0_bDrawThick=0\r\nwavecode_0_bAdditive=1\r\nwavecode_0_scaling=1\r\nwavecode_0_smoothing=0.6\r\nwavecode_0_r=1\r\nwavecode_0_g=1\r\nwavecode_0_b=1\r\nwavecode_0_a=0.9\r\nwave_0_per_frame1=t1 = time*0.4;\r\nwave_0_per_frame2=t2 = 0.13 + 0.04*bass_att;\r\nwave_0_per_frame3=a = 0.9*min(1, q30);\r\nwave_0_per_point1=an = sample*6.28318 + t1;\r\nwave_0_per_point2=rr = t2 + value1*0.2;\r\nwave_0_per_point3=x = 0.5 + 0.12*sin(time*0.13) + rr*cos(an)*q31;\r\nwave_0_per_point4=y = 0.5 + 0.08*cos(time*0.11) + rr*sin(an)*q32;\r\nwave_0_per_point5=r = 1;\r\nwave_0_per_point6=g = 0;\r\nwave_0_per_point7=b = 0;\r\nwavecode_1_enabled=1\r\nwavecode_1_samples=384\r\nwavecode_1_sep=0\r\nwavecode_1_bSpectrum=0\r\nwavecode_1_bUseDots=0\r\nwavecode_1_bDrawThick=0\r\nwavecode_1_bAdditive=1\r\nwavecode_1_scaling=1\r\nwavecode_1_smoothing=0.7\r\nwavecode_1_r=1\r\nwavecode_1_g=1\r\nwavecode_1_b=1\r\nwavecode_1_a=0.7\r\nwave_1_per_frame1=a = 0.7*min(1, q30);\r\nwave_1_per_point1=x = sample;\r\nwave_1_per_point2=y = 0.5 + value2*0.4*sin(sample*3.14159) + 0.22*sin(sample*4 + time*0.37);\r\nwave_1_per_point3=r = 0;\r\nwave_1_per_point4=g = 1;\r\nwave_1_per_point5=b = 0;\r\nshapecode_0_enabled=1\r\nshapecode_0_sides=40\r\nshapecode_0_additive=1\r\nshapecode_0_thickOutline=0\r\nshapecode_0_textured=0\r\nshapecode_0_num_inst=1\r\nshapecode_0_x=0.5\r\nshapecode_0_y=0.5\r\nshapecode_0_rad=0.06\r\nshapecode_0_ang=0\r\nshapecode_0_tex_ang=0\r\nshapecode_0_tex_zoom=1\r\nshapecode_0_r=1\r\nshapecode_0_g=0.25\r\nshapecode_0_b=0\r\nshapecode_0_a=0\r\nshapecode_0_r2=0\r\nshapecode_0_g2=0\r\nshapecode_0_b2=0\r\nshapecode_0_a2=0\r\nshapecode_0_border_r=1\r\nshapecode_0_border_g=1\r\nshapecode_0_border_b=1\r\nshapecode_0_border_a=0\r\nshape_0_per_frame1=x = 0.5 + 0.32*sin(time*0.37);\r\nshape_0_per_frame2=y = 0.5 + 0.28*cos(time*0.29);\r\nshape_0_per_frame3=rad = 0.035 + 0.05*max(bass - 0.9, 0);\r\nshape_0_per_frame4=a = min(0.5, 0.6*max(bass - 1.05, 0))*min(1, q30);\r\nper_frame_1=q30 = 60/max(fps, 15);\r\nper_frame_2=q31 = aspectx;\r\nper_frame_3=q32 = aspecty;\r\nper_frame_4=q1 = 0.5 + 0.9*bass_att;\r\nper_frame_5=q2 = cos(time*0.21)*0.7;\r\nper_frame_6=q3 = sin(time*0.17)*0.7;\r\nper_frame_7=q4 = time*0.035;\r\nper_frame_8=q5 = 0.5 + 0.5*sin(time*0.045);\r\nper_frame_9=zoom = 1.0 + 0.002*sin(time*0.31) + 0.008*max(bass_att - 1.05, 0);\r\nwarp_1=`shader_body\r\nwarp_2=`{\r\nwarp_3=` float3 P = float3((uv - 0.5) * aspect.xy * 1.3, q4);\r\nwarp_4=` float e = 0.03;\r\nwarp_5=` float nx1 = tex3D(sampler_noisevol_hq, P + float3(e, 0, 0)).x;\r\nwarp_6=` float nx0 = tex3D(sampler_noisevol_hq, P - float3(e, 0, 0)).x;\r\nwarp_7=` float ny1 = tex3D(sampler_noisevol_hq, P + float3(0, e, 0)).x;\r\nwarp_8=` float ny0 = tex3D(sampler_noisevol_hq, P - float3(0, e, 0)).x;\r\nwarp_9=` float2 curl = float2(ny1 - ny0, nx0 - nx1) * aspect.zw;\r\nwarp_10=` float2 d = texsize.zw * 10.0;\r\nwarp_11=` float gx = lum(GetBlur3(uv + float2(d.x, 0))) - lum(GetBlur3(uv - float2(d.x, 0)));\r\nwarp_12=` float gy = lum(GetBlur3(uv + float2(0, d.y))) - lum(GetBlur3(uv - float2(0, d.y)));\r\nwarp_13=` float2 swirl = float2(-gy, gx) * aspect.zw;\r\nwarp_14=` float2 uv2 = uv + (curl * 0.010 * q1 + swirl * 0.012) * q30;\r\nwarp_15=` ret = tex2D(sampler_main, uv2).xyz;\r\nwarp_16=` ret = ret * pow(0.982, q30) - 0.0025 * q30;\r\nwarp_17=`}\r\ncomp_1=`shader_body\r\ncomp_2=`{\r\ncomp_3=` float2 d = texsize.zw * 3.0;\r\ncomp_4=` float3 m = tex2D(sampler_main, uv).xyz;\r\ncomp_5=` float3 bl = GetBlur1(uv);\r\ncomp_6=` float hx = lum(GetBlur1(uv + float2(d.x, 0))) - lum(GetBlur1(uv - float2(d.x, 0)));\r\ncomp_7=` float hy = lum(GetBlur1(uv + float2(0, d.y))) - lum(GetBlur1(uv - float2(0, d.y)));\r\ncomp_8=` float3 n = normalize(float3(hx, hy, 0.05));\r\ncomp_9=` float3 L = normalize(float3(q2, q3, 0.9));\r\ncomp_10=` float diff = saturate(dot(n, L));\r\ncomp_11=` float spec = pow(saturate(dot(reflect(-L, n), float3(0, 0, 1))), 28.0);\r\ncomp_12=` float3 inkA = lerp(float3(1.0, 0.05, 0.45), float3(1.0, 0.35, 0.02), q5);\r\ncomp_13=` float3 inkB = lerp(float3(0.0, 0.7, 1.0), float3(0.3, 0.2, 1.0), q5);\r\ncomp_14=` float a = saturate(m.x * 1.2);\r\ncomp_15=` float b = saturate(m.y * 1.4);\r\ncomp_16=` float3 col = inkA * a * (1.2 - 0.5 * a) + inkB * b + float3(1.0, 0.95, 0.9) * saturate(a * b * 2.5);\r\ncomp_17=` ret = col * (0.5 + 0.7 * diff) + spec * 0.4 * saturate((a + b) * 3.0);\r\ncomp_18=` float3 glow = inkA * GetBlur2(uv).x + inkB * GetBlur2(uv).y;\r\ncomp_19=` ret += glow * (0.35 + 0.3 * bass_att);\r\ncomp_20=` ret += float3(0.02, 0.01, 0.05);\r\ncomp_21=` ret = 1.0 - exp(-ret * 1.35);\r\ncomp_22=` float2 c = uv - 0.5;\r\ncomp_23=` ret *= 1.0 - dot(c, c) * 0.8;\r\ncomp_24=`}\r\n"}, + {"id":"md_caya_event_horizon","name":"Event Horizon","category":"tunnel","md3":false,"description":{"tr":"Akışkan krom duvarlı bir tünel; ucunda vuruşla parlayan bir kara delik halkası. Renk tonu yavaşça dönüyor.","en":"A tunnel with liquid chrome walls, ending in a black-hole ring that flares on the beat. The hue turns slowly."},"source":"MILKDROP_PRESET_VERSION=201\r\nPSVERSION=3\r\nPSVERSION_WARP=3\r\nPSVERSION_COMP=3\r\n[preset00]\r\nfRating=5\r\nfGammaAdj=1\r\nfDecay=1\r\nfVideoEchoZoom=1\r\nfVideoEchoAlpha=0\r\nnVideoEchoOrientation=0\r\nnWaveMode=0\r\nbAdditiveWaves=0\r\nbWaveDots=0\r\nbWaveThick=0\r\nbModWaveAlphaByVolume=0\r\nbMaximizeWaveColor=0\r\nbTexWrap=1\r\nbDarkenCenter=0\r\nbRedBlueStereo=0\r\nbBrighten=0\r\nbDarken=0\r\nbSolarize=0\r\nbInvert=0\r\nfWaveAlpha=0\r\nfWaveScale=1\r\nfWaveSmoothing=0.75\r\nfWaveParam=0\r\nfModWaveAlphaStart=0.75\r\nfModWaveAlphaEnd=0.95\r\nfWarpAnimSpeed=1\r\nfWarpScale=1\r\nfZoomExponent=1\r\nfShader=0\r\nzoom=1\r\nrot=0\r\ncx=0.5\r\ncy=0.5\r\ndx=0\r\ndy=0\r\nwarp=0\r\nsx=1\r\nsy=1\r\nwave_r=1\r\nwave_g=1\r\nwave_b=1\r\nwave_x=0.5\r\nwave_y=0.5\r\nob_size=0\r\nob_r=0\r\nob_g=0\r\nob_b=0\r\nob_a=0\r\nib_size=0\r\nib_r=0\r\nib_g=0\r\nib_b=0\r\nib_a=0\r\nnMotionVectorsX=12\r\nnMotionVectorsY=9\r\nmv_dx=0\r\nmv_dy=0\r\nmv_l=0.9\r\nmv_r=1\r\nmv_g=1\r\nmv_b=1\r\nmv_a=0\r\nb1n=0\r\nb2n=0\r\nb3n=0\r\nb1x=1\r\nb2x=1\r\nb3x=1\r\nb1ed=0\r\nwavecode_0_enabled=1\r\nwavecode_0_samples=400\r\nwavecode_0_sep=0\r\nwavecode_0_bSpectrum=0\r\nwavecode_0_bUseDots=0\r\nwavecode_0_bDrawThick=0\r\nwavecode_0_bAdditive=1\r\nwavecode_0_scaling=1\r\nwavecode_0_smoothing=0.5\r\nwavecode_0_r=1\r\nwavecode_0_g=1\r\nwavecode_0_b=1\r\nwavecode_0_a=0\r\nwave_0_per_frame1=a = q8*0.9;\r\nwave_0_per_point1=x = sample;\r\nwave_0_per_point2=y = 0.92 + value1*0.12*sin(sample*3.14159);\r\nwave_0_per_point3=r = 0;\r\nwave_0_per_point4=g = 1;\r\nwave_0_per_point5=b = 0;\r\nshapecode_0_enabled=1\r\nshapecode_0_sides=4\r\nshapecode_0_additive=1\r\nshapecode_0_thickOutline=0\r\nshapecode_0_textured=0\r\nshapecode_0_num_inst=6\r\nshapecode_0_x=0.5\r\nshapecode_0_y=0.5\r\nshapecode_0_rad=0.003\r\nshapecode_0_ang=0\r\nshapecode_0_tex_ang=0\r\nshapecode_0_tex_zoom=1\r\nshapecode_0_r=1\r\nshapecode_0_g=0\r\nshapecode_0_b=0\r\nshapecode_0_a=1\r\nshapecode_0_r2=1\r\nshapecode_0_g2=0\r\nshapecode_0_b2=0\r\nshapecode_0_a2=0\r\nshapecode_0_border_r=1\r\nshapecode_0_border_g=1\r\nshapecode_0_border_b=1\r\nshapecode_0_border_a=0\r\nshape_0_per_frame1=x = rand(1000)*0.001;\r\nshape_0_per_frame2=y = 0.9;\r\nshape_0_per_frame3=rad = 0.002 + 0.003*treb_att;\r\nshape_0_per_frame4=a = 0.4 + 0.6*min(1, mid_att);\r\nper_frame_init_1=beat = 0;\r\nper_frame_init_2=last = 0;\r\nper_frame_init_3=glow = 0;\r\nper_frame_init_4=travel = 0;\r\nper_frame_1=q30 = 60/max(fps, 15);\r\nper_frame_2=q31 = aspectx;\r\nper_frame_3=q32 = aspecty;\r\nper_frame_4=travel = travel + (0.35 + 0.55*bass_att)/fps;\r\nper_frame_5=dy = -(0.18 + 0.30*bass_att)/fps;\r\nper_frame_6=beat = (bass > 1.22)*((time - last) > 0.22);\r\nper_frame_7=last = if(beat, time, last);\r\nper_frame_8=glow = max(glow*0.9, beat);\r\nper_frame_9=q1 = sin(time*0.23);\r\nper_frame_10=q2 = cos(time*0.19)*0.6;\r\nper_frame_11=q3 = time*0.02 + 0.06*sin(time*0.11);\r\nper_frame_12=q4 = travel;\r\nper_frame_13=q5 = 0.045 + 0.008*bass_att;\r\nper_frame_14=q6 = glow;\r\nper_frame_15=q7 = time*0.012 + 0.1*sin(time*0.05);\r\nper_frame_16=q8 = beat;\r\nwarp_1=`shader_body\r\nwarp_2=`{\r\nwarp_3=` ret = tex2D(sampler_main, uv).xyz;\r\nwarp_4=` ret.x *= pow(0.986, q30);\r\nwarp_5=` ret.y *= pow(0.993, q30);\r\nwarp_6=` ret -= 0.001 * q30;\r\nwarp_7=`}\r\ncomp_1=`shader_body\r\ncomp_2=`{\r\ncomp_3=` float2 p = (uv - 0.5) * aspect.xy - float2(q1, q2) * 0.04;\r\ncomp_4=` float r = length(p);\r\ncomp_5=` float a = atan2(p.y, p.x);\r\ncomp_6=` float depth = 0.12 / (r + 0.01);\r\ncomp_7=` float2 tuv = float2(a * 0.159155 + q3, depth);\r\ncomp_8=` float2 puv = float2(tuv.x * 3.0, depth * 0.35 - q4);\r\ncomp_9=` float n1 = tex2D(sampler_noise_hq, puv).x;\r\ncomp_10=` float n2 = tex2D(sampler_noise_hq, puv * float2(2.0, 2.3) + float2(0.37, n1 * 0.4)).x;\r\ncomp_11=` float plasma = pow(saturate(1.0 - abs(n2 * 2.0 - 1.0)), 6.0) * 0.9 + n1 * 0.12;\r\ncomp_12=` float3 w = tex2D(sampler_fw_main, tuv).xyz;\r\ncomp_13=` float3 wb = GetBlur1(frac(tuv));\r\ncomp_14=` float streak = w.x * 1.6 + wb.x * 0.8;\r\ncomp_15=` float ring = w.y * 1.2 + wb.y * 0.9;\r\ncomp_16=` float fog = saturate((r - 0.035) * 2.6);\r\ncomp_17=` fog = fog * fog;\r\ncomp_18=` float shade = 0.7 + 0.3 * sin(a + 1.5708 + q1 * 0.3);\r\ncomp_19=` float3 near = 0.5 + 0.5 * cos(6.28318 * (q7 + float3(0.0, 0.33, 0.67)));\r\ncomp_20=` float3 far = 0.5 + 0.5 * cos(6.28318 * (q7 + 0.38 + float3(0.0, 0.33, 0.67)));\r\ncomp_21=` near = lerp(near, float3(1.0, 0.6, 0.25), 0.35);\r\ncomp_22=` float3 col = lerp(far, near, saturate(r * 2.0));\r\ncomp_23=` float3 pcol = lerp(col, near, plasma);\r\ncomp_24=` ret = plasma * pcol * 1.4 * (0.75 + 0.5 * bass_att) * fog * shade;\r\ncomp_25=` ret += (streak * lerp(col, float3(1, 1, 1), 0.4) + ring * col * 1.4 * (0.6 + 0.6 * q6)) * fog;\r\ncomp_26=` float wob = (tex2D(sampler_noise_lq, float2(a * 0.159155 * 4.0, time * 0.1)).x - 0.5) * 0.012;\r\ncomp_27=` float acc = exp(-pow((r - q5 - wob) * 160.0, 2.0));\r\ncomp_28=` float halo = exp(-pow((r - q5 - wob) * 35.0, 2.0));\r\ncomp_29=` ret += acc * float3(1.0, 0.97, 0.92) * (0.5 + 1.0 * q6);\r\ncomp_30=` ret += halo * near * (0.35 + 0.9 * q6);\r\ncomp_31=` ret *= saturate((r - q5 * 0.85) * 60.0) * 0.85 + 0.15 * saturate(r * 30.0);\r\ncomp_32=` ret = 1.0 - exp(-ret * 1.5);\r\ncomp_33=`}\r\n"}, + {"id":"md_caya_prism_lattice","name":"Prism Lattice","category":"geometric","md3":false,"description":{"tr":"Altıgen çerçeveler ve dönen bir dalga altı kollu bir kaleydoskopta katlanıyor; kenarlar iki tonlu bir paletle parlıyor.","en":"Hexagon frames and an orbiting scope fold into a six-way kaleidoscope, with edges lit in a two-tone palette."},"source":"MILKDROP_PRESET_VERSION=201\r\nPSVERSION=3\r\nPSVERSION_WARP=3\r\nPSVERSION_COMP=3\r\n[preset00]\r\nfRating=5\r\nfGammaAdj=1\r\nfDecay=1\r\nfVideoEchoZoom=1\r\nfVideoEchoAlpha=0\r\nnVideoEchoOrientation=0\r\nnWaveMode=0\r\nbAdditiveWaves=0\r\nbWaveDots=0\r\nbWaveThick=0\r\nbModWaveAlphaByVolume=0\r\nbMaximizeWaveColor=0\r\nbTexWrap=0\r\nbDarkenCenter=0\r\nbRedBlueStereo=0\r\nbBrighten=0\r\nbDarken=0\r\nbSolarize=0\r\nbInvert=0\r\nfWaveAlpha=0\r\nfWaveScale=1\r\nfWaveSmoothing=0.75\r\nfWaveParam=0\r\nfModWaveAlphaStart=0.75\r\nfModWaveAlphaEnd=0.95\r\nfWarpAnimSpeed=1\r\nfWarpScale=1\r\nfZoomExponent=1\r\nfShader=0\r\nzoom=1\r\nrot=0\r\ncx=0.5\r\ncy=0.5\r\ndx=0\r\ndy=0\r\nwarp=0\r\nsx=1\r\nsy=1\r\nwave_r=1\r\nwave_g=1\r\nwave_b=1\r\nwave_x=0.5\r\nwave_y=0.5\r\nob_size=0\r\nob_r=0\r\nob_g=0\r\nob_b=0\r\nob_a=0\r\nib_size=0\r\nib_r=0\r\nib_g=0\r\nib_b=0\r\nib_a=0\r\nnMotionVectorsX=12\r\nnMotionVectorsY=9\r\nmv_dx=0\r\nmv_dy=0\r\nmv_l=0.9\r\nmv_r=1\r\nmv_g=1\r\nmv_b=1\r\nmv_a=0\r\nb1n=0\r\nb2n=0\r\nb3n=0\r\nb1x=1\r\nb2x=1\r\nb3x=1\r\nb1ed=0\r\nwavecode_0_enabled=1\r\nwavecode_0_samples=300\r\nwavecode_0_sep=0\r\nwavecode_0_bSpectrum=0\r\nwavecode_0_bUseDots=0\r\nwavecode_0_bDrawThick=0\r\nwavecode_0_bAdditive=1\r\nwavecode_0_scaling=1\r\nwavecode_0_smoothing=0.5\r\nwavecode_0_r=1\r\nwavecode_0_g=1\r\nwavecode_0_b=1\r\nwavecode_0_a=0.8\r\nwave_0_per_frame1=t1 = time*0.9;\r\nwave_0_per_frame2=a = 0.8*min(1, q30);\r\nwave_0_per_point1=an = sample*6.28318;\r\nwave_0_per_point2=rr = 0.07 + value1*0.1;\r\nwave_0_per_point3=x = 0.5 + 0.2*cos(t1)*q31 + rr*cos(an)*q31;\r\nwave_0_per_point4=y = 0.5 + 0.2*sin(t1)*q32 + rr*sin(an)*q32;\r\nwave_0_per_point5=r = 0;\r\nwave_0_per_point6=g = 1;\r\nwave_0_per_point7=b = 0;\r\nshapecode_0_enabled=1\r\nshapecode_0_sides=6\r\nshapecode_0_additive=1\r\nshapecode_0_thickOutline=1\r\nshapecode_0_textured=0\r\nshapecode_0_num_inst=3\r\nshapecode_0_x=0.5\r\nshapecode_0_y=0.5\r\nshapecode_0_rad=0.2\r\nshapecode_0_ang=0\r\nshapecode_0_tex_ang=0\r\nshapecode_0_tex_zoom=1\r\nshapecode_0_r=0\r\nshapecode_0_g=0\r\nshapecode_0_b=0\r\nshapecode_0_a=0\r\nshapecode_0_r2=0\r\nshapecode_0_g2=1\r\nshapecode_0_b2=0\r\nshapecode_0_a2=0\r\nshapecode_0_border_r=1\r\nshapecode_0_border_g=0\r\nshapecode_0_border_b=0\r\nshapecode_0_border_a=1\r\nshape_0_per_frame1=rad = 0.08 + instance*0.09 + 0.05*bass_att*(1 - instance*0.3);\r\nshape_0_per_frame2=ang = q2*(1 + instance*0.4)*if(equal(instance, 1), -1, 1);\r\nshape_0_per_frame3=border_a = (0.3 + 0.6*min(1, max(bass - 0.9, 0)))*min(1, q30);\r\nshapecode_1_enabled=1\r\nshapecode_1_sides=3\r\nshapecode_1_additive=1\r\nshapecode_1_thickOutline=0\r\nshapecode_1_textured=0\r\nshapecode_1_num_inst=3\r\nshapecode_1_x=0.5\r\nshapecode_1_y=0.5\r\nshapecode_1_rad=0.04\r\nshapecode_1_ang=0\r\nshapecode_1_tex_ang=0\r\nshapecode_1_tex_zoom=1\r\nshapecode_1_r=0\r\nshapecode_1_g=0\r\nshapecode_1_b=1\r\nshapecode_1_a=0.9\r\nshapecode_1_r2=0\r\nshapecode_1_g2=0\r\nshapecode_1_b2=1\r\nshapecode_1_a2=0\r\nshapecode_1_border_r=1\r\nshapecode_1_border_g=1\r\nshapecode_1_border_b=1\r\nshapecode_1_border_a=0\r\nshape_1_per_frame1=an = time*0.6 + instance*2.0944;\r\nshape_1_per_frame2=x = 0.5 + 0.21*cos(an)*q31;\r\nshape_1_per_frame3=y = 0.5 + 0.21*sin(an)*q32;\r\nshape_1_per_frame4=ang = -an;\r\nshape_1_per_frame5=rad = 0.02 + 0.03*treb_att;\r\nshape_1_per_frame6=a = (0.3 + 0.6*min(1, treb_att))*min(1, q30);\r\nper_frame_init_1=spin = 0;\r\nper_frame_1=q30 = 60/max(fps, 15);\r\nper_frame_2=q31 = aspectx;\r\nper_frame_3=q32 = aspecty;\r\nper_frame_4=spin = spin + (0.15 + 0.5*max(bass_att - 0.9, 0))/fps;\r\nper_frame_5=zoom = 1.0 + (0.35 + 0.35*bass_att)/fps;\r\nper_frame_6=rot = (0.10 + 0.08*sin(time*0.2))/fps;\r\nper_frame_7=q1 = 6;\r\nper_frame_8=q2 = spin;\r\nper_frame_9=q3 = time*0.03;\r\nper_frame_10=q4 = treb_att;\r\nwarp_1=`shader_body\r\nwarp_2=`{\r\nwarp_3=` ret = tex2D(sampler_main, uv).xyz;\r\nwarp_4=` ret += (ret - GetBlur1(uv)) * 0.1 * q30;\r\nwarp_5=` ret = ret * pow(0.968, q30) - 0.003 * q30;\r\nwarp_6=`}\r\ncomp_1=`shader_body\r\ncomp_2=`{\r\ncomp_3=` float2 p = (uv - 0.5) * aspect.xy;\r\ncomp_4=` float r = length(p);\r\ncomp_5=` float a = atan2(p.y, p.x) + q2 * 0.3;\r\ncomp_6=` float seg = 6.28318 / q1;\r\ncomp_7=` float k = frac(a / seg);\r\ncomp_8=` a = abs(k - 0.5) * seg;\r\ncomp_9=` float2 m = float2(cos(a), sin(a)) * r;\r\ncomp_10=` float2 uvk = 0.5 + m * aspect.zw;\r\ncomp_11=` float3 s = tex2D(sampler_fc_main, uvk).xyz;\r\ncomp_12=` float3 sb = GetBlur1(uvk);\r\ncomp_13=` float3 sb2 = GetBlur2(uvk);\r\ncomp_14=` float3 c1 = 0.55 + 0.45 * cos(6.28318 * (float3(0.0, 0.1, 0.2) + q3));\r\ncomp_15=` float3 c2 = 0.55 + 0.45 * cos(6.28318 * (float3(0.5, 0.6, 0.7) + q3 + r * 0.6));\r\ncomp_16=` float3 c3 = float3(0.95, 0.97, 1.0);\r\ncomp_17=` float fr = s.x * 1.2 + saturate(s.x - sb.x) * 2.0;\r\ncomp_18=` float scope = s.y * 1.1 + saturate(s.y - sb.y) * 2.0;\r\ncomp_19=` float tri = s.z;\r\ncomp_20=` ret = c1 * fr + c2 * scope + c3 * tri * 0.8;\r\ncomp_21=` ret += (c1 * sb2.x + c2 * sb2.y + c3 * sb2.z) * (0.5 + 0.3 * q4);\r\ncomp_22=` ret = 1.0 - exp(-ret * 1.4);\r\ncomp_23=` ret *= saturate(1.3 - r * 1.2);\r\ncomp_24=`}\r\n"}, + {"id":"md_caya_northern_veil","name":"Northern Veil","category":"ambient","md3":false,"description":{"tr":"Dağların üstünde kuzey ışıkları ve göldeki dalgalı yansımaları. Bas perdeleri aydınlatıyor, tizler yıldızları kırptırıyor.","en":"Northern lights over a mountain ridge, mirrored in a rippling lake. Bass brightens the curtains, treble makes the stars twinkle."},"source":"MILKDROP_PRESET_VERSION=201\r\nPSVERSION=3\r\nPSVERSION_WARP=3\r\nPSVERSION_COMP=3\r\n[preset00]\r\nfRating=5\r\nfGammaAdj=1\r\nfDecay=1\r\nfVideoEchoZoom=1\r\nfVideoEchoAlpha=0\r\nnVideoEchoOrientation=0\r\nnWaveMode=0\r\nbAdditiveWaves=0\r\nbWaveDots=0\r\nbWaveThick=0\r\nbModWaveAlphaByVolume=0\r\nbMaximizeWaveColor=0\r\nbTexWrap=0\r\nbDarkenCenter=0\r\nbRedBlueStereo=0\r\nbBrighten=0\r\nbDarken=0\r\nbSolarize=0\r\nbInvert=0\r\nfWaveAlpha=0\r\nfWaveScale=1\r\nfWaveSmoothing=0.75\r\nfWaveParam=0\r\nfModWaveAlphaStart=0.75\r\nfModWaveAlphaEnd=0.95\r\nfWarpAnimSpeed=1\r\nfWarpScale=1\r\nfZoomExponent=1\r\nfShader=0\r\nzoom=1\r\nrot=0\r\ncx=0.5\r\ncy=0.5\r\ndx=0\r\ndy=0\r\nwarp=0\r\nsx=1\r\nsy=1\r\nwave_r=1\r\nwave_g=1\r\nwave_b=1\r\nwave_x=0.5\r\nwave_y=0.5\r\nob_size=0\r\nob_r=0\r\nob_g=0\r\nob_b=0\r\nob_a=0\r\nib_size=0\r\nib_r=0\r\nib_g=0\r\nib_b=0\r\nib_a=0\r\nnMotionVectorsX=12\r\nnMotionVectorsY=9\r\nmv_dx=0\r\nmv_dy=0\r\nmv_l=0.9\r\nmv_r=1\r\nmv_g=1\r\nmv_b=1\r\nmv_a=0\r\nb1n=0\r\nb2n=0\r\nb3n=0\r\nb1x=1\r\nb2x=1\r\nb3x=1\r\nb1ed=0\r\nper_frame_init_1=sway = 0;\r\nper_frame_1=q30 = 60/max(fps, 15);\r\nper_frame_2=q31 = aspectx;\r\nper_frame_3=q32 = aspecty;\r\nper_frame_4=sway = sway + (0.6 + 0.9*mid_att)/fps;\r\nper_frame_5=dy = 0.035/fps;\r\nper_frame_6=q1 = sway;\r\nper_frame_7=q2 = time*0.045;\r\nper_frame_8=q3 = 0.45 + 0.65*bass_att;\r\nper_frame_9=q4 = treb_att;\r\nper_frame_10=q5 = 0.6 + 0.4*sin(time*0.043);\r\nwarp_1=`shader_body\r\nwarp_2=`{\r\nwarp_3=` float x = uv.x;\r\nwarp_4=` float n1 = tex2D(sampler_noise_hq, float2(x * 0.7 + q2 * 0.3, 0.31)).x;\r\nwarp_5=` float base = 0.55 + 0.05 * sin(x * 4.0 + q1) + 0.035 * sin(x * 9.0 - q1 * 1.4) + (n1 - 0.5) * 0.14 + 0.012 * sin(x * 26.0 - q1 * 3.0);\r\nwarp_6=` float h = base - uv.y;\r\nwarp_7=` float ray = tex2D(sampler_noise_hq, float2(x * 7.0 + q2, 0.73)).x;\r\nwarp_8=` float ray2 = tex2D(sampler_noise_hq, float2(x * 19.0 - q2 * 2.0, 0.11)).x;\r\nwarp_9=` ray = pow(ray, 3.0) * 1.6 + pow(ray2, 4.0) * 0.8;\r\nwarp_10=` float upper = exp(-max(h, 0.0) * 9.0) * (0.2 + ray);\r\nwarp_11=` float hem = exp(min(h, 0.0) * 90.0);\r\nwarp_12=` float curtain = upper * hem;\r\nwarp_13=` float3 green = float3(0.15, 1.0, 0.55);\r\nwarp_14=` float3 violet = float3(0.75, 0.25, 1.0);\r\nwarp_15=` float3 col = lerp(green, violet, saturate(h * 4.0 * q5));\r\nwarp_16=` col = lerp(col, float3(1.0, 0.35, 0.5), saturate(n1 * 2.0 - 1.2));\r\nwarp_17=` float sky = step(uv.y, 0.66);\r\nwarp_18=` ret = tex2D(sampler_main, uv).xyz * pow(0.955, q30);\r\nwarp_19=` ret += col * curtain * 0.032 * q3 * sky * q30;\r\nwarp_20=`}\r\ncomp_1=`sampler sampler_pw_noise_lq;\r\ncomp_2=`shader_body\r\ncomp_3=`{\r\ncomp_4=` float hor = 0.68;\r\ncomp_5=` float below = step(hor, uv.y);\r\ncomp_6=` float d = uv.y - hor;\r\ncomp_7=` float rn = tex2D(sampler_noise_hq, float2(uv.x * 2.0 + time * 0.02, uv.y * 14.0 - time * 0.15)).x - 0.5;\r\ncomp_8=` float rip = rn * 0.012 + sin(uv.y * 90.0 - time * 1.3) * 0.0012;\r\ncomp_9=` float2 u = lerp(uv, float2(uv.x + rip * saturate(d * 12.0), hor - d * 1.25), below);\r\ncomp_10=` float m1 = tex2D(sampler_noise_hq, float2(u.x * 1.3, 0.2)).x;\r\ncomp_11=` float m2 = tex2D(sampler_noise_hq, float2(u.x * 4.7, 0.6)).x;\r\ncomp_12=` float ridge = hor - 0.02 - 0.075 * m1 - 0.012 * m2;\r\ncomp_13=` float land = saturate((u.y - ridge) * 400.0);\r\ncomp_14=` float3 a = tex2D(sampler_main, u).xyz;\r\ncomp_15=` float3 glow = GetBlur2(u) * 0.5 + GetBlur3(u) * 0.45;\r\ncomp_16=` float3 skycol = lerp(float3(0.01, 0.015, 0.05), float3(0.03, 0.06, 0.1), saturate((u.y - 0.2) * 2.0));\r\ncomp_17=` float2 sp = u * texsize.xy / 512.0;\r\ncomp_18=` float4 st = tex2D(sampler_pw_noise_lq, sp);\r\ncomp_19=` float tw = 0.55 + 0.45 * sin(time * (1.3 + st.z * 4.0) + st.w * 30.0);\r\ncomp_20=` float star = saturate((st.x * st.y - 0.975) * 45.0) * tw * (0.6 + 0.5 * q4);\r\ncomp_21=` float3 s = skycol + a * 1.1 + glow + star * float3(0.85, 0.9, 1.0) * (1.0 - saturate(lum(a) * 3.0));\r\ncomp_22=` float3 landcol = float3(0.006, 0.01, 0.02) + glow * 0.05;\r\ncomp_23=` s = lerp(s, landcol, land);\r\ncomp_24=` float fade = lerp(1.0, 0.55 * (1.0 - saturate(d * 2.2)), below);\r\ncomp_25=` ret = s * fade;\r\ncomp_26=` ret += float3(0.05, 0.12, 0.1) * exp(-abs(d) * 120.0) * (0.5 + 0.5 * lum(GetBlur3(float2(uv.x, 0.5))) * 4.0);\r\ncomp_27=` ret = 1.0 - exp(-ret * 1.6);\r\ncomp_28=`}\r\n"}, + {"id":"md_caya_twelve_moons","name":"Twelve Moons","category":"space","md3":true,"description":{"tr":"Halkalı bir gaz devinin çevresinde, her biri dalga biçimiyle şekillenen on iki ay. MilkDrop 3 presetidir; MilkDrop 2 oynatıcıları ilk dört ayı gösterir.","en":"Twelve moons shaped by the waveform orbit a ringed gas giant. A MilkDrop 3 preset; MilkDrop 2 players show the first four moons."},"source":"MILKDROP_PRESET_VERSION=201\r\nPSVERSION=3\r\nPSVERSION_WARP=3\r\nPSVERSION_COMP=3\r\n[preset00]\r\nfRating=5\r\nfGammaAdj=1\r\nfDecay=1\r\nfVideoEchoZoom=1\r\nfVideoEchoAlpha=0\r\nnVideoEchoOrientation=0\r\nnWaveMode=0\r\nbAdditiveWaves=0\r\nbWaveDots=0\r\nbWaveThick=0\r\nbModWaveAlphaByVolume=0\r\nbMaximizeWaveColor=0\r\nbTexWrap=0\r\nbDarkenCenter=0\r\nbRedBlueStereo=0\r\nbBrighten=0\r\nbDarken=0\r\nbSolarize=0\r\nbInvert=0\r\nfWaveAlpha=0\r\nfWaveScale=1\r\nfWaveSmoothing=0.75\r\nfWaveParam=0\r\nfModWaveAlphaStart=0.75\r\nfModWaveAlphaEnd=0.95\r\nfWarpAnimSpeed=1\r\nfWarpScale=1\r\nfZoomExponent=1\r\nfShader=0\r\nzoom=1\r\nrot=0\r\ncx=0.5\r\ncy=0.5\r\ndx=0\r\ndy=0\r\nwarp=0\r\nsx=1\r\nsy=1\r\nwave_r=1\r\nwave_g=1\r\nwave_b=1\r\nwave_x=0.5\r\nwave_y=0.5\r\nob_size=0\r\nob_r=0\r\nob_g=0\r\nob_b=0\r\nob_a=0\r\nib_size=0\r\nib_r=0\r\nib_g=0\r\nib_b=0\r\nib_a=0\r\nnMotionVectorsX=12\r\nnMotionVectorsY=9\r\nmv_dx=0\r\nmv_dy=0\r\nmv_l=0.9\r\nmv_r=1\r\nmv_g=1\r\nmv_b=1\r\nmv_a=0\r\nb1n=0\r\nb2n=0\r\nb3n=0\r\nb1x=1\r\nb2x=1\r\nb3x=1\r\nb1ed=0\r\nwavecode_0_enabled=1\r\nwavecode_0_samples=96\r\nwavecode_0_sep=0\r\nwavecode_0_bSpectrum=0\r\nwavecode_0_bUseDots=0\r\nwavecode_0_bDrawThick=0\r\nwavecode_0_bAdditive=1\r\nwavecode_0_scaling=1\r\nwavecode_0_smoothing=0.6\r\nwavecode_0_r=1\r\nwavecode_0_g=1\r\nwavecode_0_b=1\r\nwavecode_0_a=0.9\r\nwave_0_per_frame1=t1 = q5;\r\nwave_0_per_frame2=a = 0.9*min(1, q30);\r\nwave_0_per_frame3=t2 = 0.170;\r\nwave_0_per_frame4=t3 = 0.010;\r\nwave_0_per_frame5=t4 = 0.55 + 0.45*sin(t1);\r\nwave_0_per_point1=an = sample*6.28318;\r\nwave_0_per_point2=cx = 0.5 + t2*cos(t1)*q31;\r\nwave_0_per_point3=cy = 0.5 - t2*sin(t1)*0.32*q32;\r\nwave_0_per_point4=rr = t3*(1 + value1*2.2)*(0.75 + 0.35*t4);\r\nwave_0_per_point5=x = cx + rr*cos(an)*q31;\r\nwave_0_per_point6=y = cy + rr*sin(an)*q32;\r\nwave_0_per_point7=r = 1*t4;\r\nwave_0_per_point8=g = 0.55*t4;\r\nwave_0_per_point9=b = 0.2*t4;\r\nwavecode_1_enabled=1\r\nwavecode_1_samples=96\r\nwavecode_1_sep=0\r\nwavecode_1_bSpectrum=0\r\nwavecode_1_bUseDots=0\r\nwavecode_1_bDrawThick=0\r\nwavecode_1_bAdditive=1\r\nwavecode_1_scaling=1\r\nwavecode_1_smoothing=0.6\r\nwavecode_1_r=1\r\nwavecode_1_g=1\r\nwavecode_1_b=1\r\nwavecode_1_a=0.9\r\nwave_1_per_frame1=t1 = q6;\r\nwave_1_per_frame2=a = 0.9*min(1, q30);\r\nwave_1_per_frame3=t2 = 0.192;\r\nwave_1_per_frame4=t3 = 0.014;\r\nwave_1_per_frame5=t4 = 0.55 + 0.45*sin(t1);\r\nwave_1_per_point1=an = sample*6.28318;\r\nwave_1_per_point2=cx = 0.5 + t2*cos(t1)*q31;\r\nwave_1_per_point3=cy = 0.5 - t2*sin(t1)*0.32*q32;\r\nwave_1_per_point4=rr = t3*(1 + value1*2.2)*(0.75 + 0.35*t4);\r\nwave_1_per_point5=x = cx + rr*cos(an)*q31;\r\nwave_1_per_point6=y = cy + rr*sin(an)*q32;\r\nwave_1_per_point7=r = 0.3*t4;\r\nwave_1_per_point8=g = 0.8*t4;\r\nwave_1_per_point9=b = 1*t4;\r\nwavecode_2_enabled=1\r\nwavecode_2_samples=96\r\nwavecode_2_sep=0\r\nwavecode_2_bSpectrum=0\r\nwavecode_2_bUseDots=0\r\nwavecode_2_bDrawThick=0\r\nwavecode_2_bAdditive=1\r\nwavecode_2_scaling=1\r\nwavecode_2_smoothing=0.6\r\nwavecode_2_r=1\r\nwavecode_2_g=1\r\nwavecode_2_b=1\r\nwavecode_2_a=0.9\r\nwave_2_per_frame1=t1 = q7;\r\nwave_2_per_frame2=a = 0.9*min(1, q30);\r\nwave_2_per_frame3=t2 = 0.214;\r\nwave_2_per_frame4=t3 = 0.018;\r\nwave_2_per_frame5=t4 = 0.55 + 0.45*sin(t1);\r\nwave_2_per_point1=an = sample*6.28318;\r\nwave_2_per_point2=cx = 0.5 + t2*cos(t1)*q31;\r\nwave_2_per_point3=cy = 0.5 - t2*sin(t1)*0.32*q32;\r\nwave_2_per_point4=rr = t3*(1 + value1*2.2)*(0.75 + 0.35*t4);\r\nwave_2_per_point5=x = cx + rr*cos(an)*q31;\r\nwave_2_per_point6=y = cy + rr*sin(an)*q32;\r\nwave_2_per_point7=r = 1*t4;\r\nwave_2_per_point8=g = 0.3*t4;\r\nwave_2_per_point9=b = 0.55*t4;\r\nwavecode_3_enabled=1\r\nwavecode_3_samples=96\r\nwavecode_3_sep=0\r\nwavecode_3_bSpectrum=0\r\nwavecode_3_bUseDots=0\r\nwavecode_3_bDrawThick=0\r\nwavecode_3_bAdditive=1\r\nwavecode_3_scaling=1\r\nwavecode_3_smoothing=0.6\r\nwavecode_3_r=1\r\nwavecode_3_g=1\r\nwavecode_3_b=1\r\nwavecode_3_a=0.9\r\nwave_3_per_frame1=t1 = q8;\r\nwave_3_per_frame2=a = 0.9*min(1, q30);\r\nwave_3_per_frame3=t2 = 0.236;\r\nwave_3_per_frame4=t3 = 0.022;\r\nwave_3_per_frame5=t4 = 0.55 + 0.45*sin(t1);\r\nwave_3_per_point1=an = sample*6.28318;\r\nwave_3_per_point2=cx = 0.5 + t2*cos(t1)*q31;\r\nwave_3_per_point3=cy = 0.5 - t2*sin(t1)*0.32*q32;\r\nwave_3_per_point4=rr = t3*(1 + value1*2.2)*(0.75 + 0.35*t4);\r\nwave_3_per_point5=x = cx + rr*cos(an)*q31;\r\nwave_3_per_point6=y = cy + rr*sin(an)*q32;\r\nwave_3_per_point7=r = 0.55*t4;\r\nwave_3_per_point8=g = 1*t4;\r\nwave_3_per_point9=b = 0.5*t4;\r\nwavecode_4_enabled=1\r\nwavecode_4_samples=96\r\nwavecode_4_sep=0\r\nwavecode_4_bSpectrum=0\r\nwavecode_4_bUseDots=0\r\nwavecode_4_bDrawThick=0\r\nwavecode_4_bAdditive=1\r\nwavecode_4_scaling=1\r\nwavecode_4_smoothing=0.6\r\nwavecode_4_r=1\r\nwavecode_4_g=1\r\nwavecode_4_b=1\r\nwavecode_4_a=0.9\r\nwave_4_per_frame1=t1 = q33;\r\nwave_4_per_frame2=a = 0.9*min(1, q30);\r\nwave_4_per_frame3=t2 = 0.258;\r\nwave_4_per_frame4=t3 = 0.010;\r\nwave_4_per_frame5=t4 = 0.55 + 0.45*sin(t1);\r\nwave_4_per_point1=an = sample*6.28318;\r\nwave_4_per_point2=cx = 0.5 + t2*cos(t1)*q31;\r\nwave_4_per_point3=cy = 0.5 - t2*sin(t1)*0.32*q32;\r\nwave_4_per_point4=rr = t3*(1 + value1*2.2)*(0.75 + 0.35*t4);\r\nwave_4_per_point5=x = cx + rr*cos(an)*q31;\r\nwave_4_per_point6=y = cy + rr*sin(an)*q32;\r\nwave_4_per_point7=r = 0.8*t4;\r\nwave_4_per_point8=g = 0.5*t4;\r\nwave_4_per_point9=b = 1*t4;\r\nwavecode_5_enabled=1\r\nwavecode_5_samples=96\r\nwavecode_5_sep=0\r\nwavecode_5_bSpectrum=0\r\nwavecode_5_bUseDots=0\r\nwavecode_5_bDrawThick=0\r\nwavecode_5_bAdditive=1\r\nwavecode_5_scaling=1\r\nwavecode_5_smoothing=0.6\r\nwavecode_5_r=1\r\nwavecode_5_g=1\r\nwavecode_5_b=1\r\nwavecode_5_a=0.9\r\nwave_5_per_frame1=t1 = q34;\r\nwave_5_per_frame2=a = 0.9*min(1, q30);\r\nwave_5_per_frame3=t2 = 0.280;\r\nwave_5_per_frame4=t3 = 0.014;\r\nwave_5_per_frame5=t4 = 0.55 + 0.45*sin(t1);\r\nwave_5_per_point1=an = sample*6.28318;\r\nwave_5_per_point2=cx = 0.5 + t2*cos(t1)*q31;\r\nwave_5_per_point3=cy = 0.5 - t2*sin(t1)*0.32*q32;\r\nwave_5_per_point4=rr = t3*(1 + value1*2.2)*(0.75 + 0.35*t4);\r\nwave_5_per_point5=x = cx + rr*cos(an)*q31;\r\nwave_5_per_point6=y = cy + rr*sin(an)*q32;\r\nwave_5_per_point7=r = 1*t4;\r\nwave_5_per_point8=g = 0.85*t4;\r\nwave_5_per_point9=b = 0.35*t4;\r\nwavecode_6_enabled=1\r\nwavecode_6_samples=96\r\nwavecode_6_sep=0\r\nwavecode_6_bSpectrum=0\r\nwavecode_6_bUseDots=0\r\nwavecode_6_bDrawThick=0\r\nwavecode_6_bAdditive=1\r\nwavecode_6_scaling=1\r\nwavecode_6_smoothing=0.6\r\nwavecode_6_r=1\r\nwavecode_6_g=1\r\nwavecode_6_b=1\r\nwavecode_6_a=0.9\r\nwave_6_per_frame1=t1 = q35;\r\nwave_6_per_frame2=a = 0.9*min(1, q30);\r\nwave_6_per_frame3=t2 = 0.302;\r\nwave_6_per_frame4=t3 = 0.018;\r\nwave_6_per_frame5=t4 = 0.55 + 0.45*sin(t1);\r\nwave_6_per_point1=an = sample*6.28318;\r\nwave_6_per_point2=cx = 0.5 + t2*cos(t1)*q31;\r\nwave_6_per_point3=cy = 0.5 - t2*sin(t1)*0.32*q32;\r\nwave_6_per_point4=rr = t3*(1 + value1*2.2)*(0.75 + 0.35*t4);\r\nwave_6_per_point5=x = cx + rr*cos(an)*q31;\r\nwave_6_per_point6=y = cy + rr*sin(an)*q32;\r\nwave_6_per_point7=r = 0.25*t4;\r\nwave_6_per_point8=g = 0.55*t4;\r\nwave_6_per_point9=b = 1*t4;\r\nwavecode_7_enabled=1\r\nwavecode_7_samples=96\r\nwavecode_7_sep=0\r\nwavecode_7_bSpectrum=0\r\nwavecode_7_bUseDots=0\r\nwavecode_7_bDrawThick=0\r\nwavecode_7_bAdditive=1\r\nwavecode_7_scaling=1\r\nwavecode_7_smoothing=0.6\r\nwavecode_7_r=1\r\nwavecode_7_g=1\r\nwavecode_7_b=1\r\nwavecode_7_a=0.9\r\nwave_7_per_frame1=t1 = q36;\r\nwave_7_per_frame2=a = 0.9*min(1, q30);\r\nwave_7_per_frame3=t2 = 0.324;\r\nwave_7_per_frame4=t3 = 0.022;\r\nwave_7_per_frame5=t4 = 0.55 + 0.45*sin(t1);\r\nwave_7_per_point1=an = sample*6.28318;\r\nwave_7_per_point2=cx = 0.5 + t2*cos(t1)*q31;\r\nwave_7_per_point3=cy = 0.5 - t2*sin(t1)*0.32*q32;\r\nwave_7_per_point4=rr = t3*(1 + value1*2.2)*(0.75 + 0.35*t4);\r\nwave_7_per_point5=x = cx + rr*cos(an)*q31;\r\nwave_7_per_point6=y = cy + rr*sin(an)*q32;\r\nwave_7_per_point7=r = 1*t4;\r\nwave_7_per_point8=g = 0.45*t4;\r\nwave_7_per_point9=b = 0.35*t4;\r\nwavecode_8_enabled=1\r\nwavecode_8_samples=96\r\nwavecode_8_sep=0\r\nwavecode_8_bSpectrum=0\r\nwavecode_8_bUseDots=0\r\nwavecode_8_bDrawThick=0\r\nwavecode_8_bAdditive=1\r\nwavecode_8_scaling=1\r\nwavecode_8_smoothing=0.6\r\nwavecode_8_r=1\r\nwavecode_8_g=1\r\nwavecode_8_b=1\r\nwavecode_8_a=0.9\r\nwave_8_per_frame1=t1 = q37;\r\nwave_8_per_frame2=a = 0.9*min(1, q30);\r\nwave_8_per_frame3=t2 = 0.346;\r\nwave_8_per_frame4=t3 = 0.010;\r\nwave_8_per_frame5=t4 = 0.55 + 0.45*sin(t1);\r\nwave_8_per_point1=an = sample*6.28318;\r\nwave_8_per_point2=cx = 0.5 + t2*cos(t1)*q31;\r\nwave_8_per_point3=cy = 0.5 - t2*sin(t1)*0.32*q32;\r\nwave_8_per_point4=rr = t3*(1 + value1*2.2)*(0.75 + 0.35*t4);\r\nwave_8_per_point5=x = cx + rr*cos(an)*q31;\r\nwave_8_per_point6=y = cy + rr*sin(an)*q32;\r\nwave_8_per_point7=r = 0.4*t4;\r\nwave_8_per_point8=g = 1*t4;\r\nwave_8_per_point9=b = 0.85*t4;\r\nwavecode_9_enabled=1\r\nwavecode_9_samples=96\r\nwavecode_9_sep=0\r\nwavecode_9_bSpectrum=0\r\nwavecode_9_bUseDots=0\r\nwavecode_9_bDrawThick=0\r\nwavecode_9_bAdditive=1\r\nwavecode_9_scaling=1\r\nwavecode_9_smoothing=0.6\r\nwavecode_9_r=1\r\nwavecode_9_g=1\r\nwavecode_9_b=1\r\nwavecode_9_a=0.9\r\nwave_9_per_frame1=t1 = q38;\r\nwave_9_per_frame2=a = 0.9*min(1, q30);\r\nwave_9_per_frame3=t2 = 0.368;\r\nwave_9_per_frame4=t3 = 0.014;\r\nwave_9_per_frame5=t4 = 0.55 + 0.45*sin(t1);\r\nwave_9_per_point1=an = sample*6.28318;\r\nwave_9_per_point2=cx = 0.5 + t2*cos(t1)*q31;\r\nwave_9_per_point3=cy = 0.5 - t2*sin(t1)*0.32*q32;\r\nwave_9_per_point4=rr = t3*(1 + value1*2.2)*(0.75 + 0.35*t4);\r\nwave_9_per_point5=x = cx + rr*cos(an)*q31;\r\nwave_9_per_point6=y = cy + rr*sin(an)*q32;\r\nwave_9_per_point7=r = 1*t4;\r\nwave_9_per_point8=g = 0.6*t4;\r\nwave_9_per_point9=b = 0.9*t4;\r\nwavecode_10_enabled=1\r\nwavecode_10_samples=96\r\nwavecode_10_sep=0\r\nwavecode_10_bSpectrum=0\r\nwavecode_10_bUseDots=0\r\nwavecode_10_bDrawThick=0\r\nwavecode_10_bAdditive=1\r\nwavecode_10_scaling=1\r\nwavecode_10_smoothing=0.6\r\nwavecode_10_r=1\r\nwavecode_10_g=1\r\nwavecode_10_b=1\r\nwavecode_10_a=0.9\r\nwave_10_per_frame1=t1 = q39;\r\nwave_10_per_frame2=a = 0.9*min(1, q30);\r\nwave_10_per_frame3=t2 = 0.390;\r\nwave_10_per_frame4=t3 = 0.018;\r\nwave_10_per_frame5=t4 = 0.55 + 0.45*sin(t1);\r\nwave_10_per_point1=an = sample*6.28318;\r\nwave_10_per_point2=cx = 0.5 + t2*cos(t1)*q31;\r\nwave_10_per_point3=cy = 0.5 - t2*sin(t1)*0.32*q32;\r\nwave_10_per_point4=rr = t3*(1 + value1*2.2)*(0.75 + 0.35*t4);\r\nwave_10_per_point5=x = cx + rr*cos(an)*q31;\r\nwave_10_per_point6=y = cy + rr*sin(an)*q32;\r\nwave_10_per_point7=r = 0.7*t4;\r\nwave_10_per_point8=g = 0.85*t4;\r\nwave_10_per_point9=b = 1*t4;\r\nwavecode_11_enabled=1\r\nwavecode_11_samples=96\r\nwavecode_11_sep=0\r\nwavecode_11_bSpectrum=0\r\nwavecode_11_bUseDots=0\r\nwavecode_11_bDrawThick=0\r\nwavecode_11_bAdditive=1\r\nwavecode_11_scaling=1\r\nwavecode_11_smoothing=0.6\r\nwavecode_11_r=1\r\nwavecode_11_g=1\r\nwavecode_11_b=1\r\nwavecode_11_a=0.9\r\nwave_11_per_frame1=t1 = q40;\r\nwave_11_per_frame2=a = 0.9*min(1, q30);\r\nwave_11_per_frame3=t2 = 0.412;\r\nwave_11_per_frame4=t3 = 0.022;\r\nwave_11_per_frame5=t4 = 0.55 + 0.45*sin(t1);\r\nwave_11_per_point1=an = sample*6.28318;\r\nwave_11_per_point2=cx = 0.5 + t2*cos(t1)*q31;\r\nwave_11_per_point3=cy = 0.5 - t2*sin(t1)*0.32*q32;\r\nwave_11_per_point4=rr = t3*(1 + value1*2.2)*(0.75 + 0.35*t4);\r\nwave_11_per_point5=x = cx + rr*cos(an)*q31;\r\nwave_11_per_point6=y = cy + rr*sin(an)*q32;\r\nwave_11_per_point7=r = 1*t4;\r\nwave_11_per_point8=g = 0.75*t4;\r\nwave_11_per_point9=b = 0.5*t4;\r\nper_frame_init_1=ph0 = 0;\r\nper_frame_init_2=ph1 = 0;\r\nper_frame_init_3=ph2 = 0;\r\nper_frame_init_4=ph3 = 0;\r\nper_frame_init_5=ph4 = 0;\r\nper_frame_init_6=ph5 = 0;\r\nper_frame_init_7=ph6 = 0;\r\nper_frame_init_8=ph7 = 0;\r\nper_frame_init_9=ph8 = 0;\r\nper_frame_init_10=ph9 = 0;\r\nper_frame_init_11=ph10 = 0;\r\nper_frame_init_12=ph11 = 0;\r\nper_frame_1=q30 = 60/max(fps, 15);\r\nper_frame_2=q31 = aspectx;\r\nper_frame_3=q32 = aspecty;\r\nper_frame_4=q1 = time*0.03;\r\nper_frame_5=q2 = 0.6 + 0.5*bass_att;\r\nper_frame_6=q3 = treb_att;\r\nper_frame_7=q4 = time*0.004;\r\nper_frame_8=ph0 = ph0 + 0.9000*(0.6 + 0.4*mid_att)/fps;\r\nper_frame_9=q5 = ph0 + 0.0000;\r\nper_frame_10=ph1 = ph1 + 0.6278*(0.6 + 0.4*mid_att)/fps;\r\nper_frame_11=q6 = ph1 + 2.4000;\r\nper_frame_12=ph2 = ph2 + 0.4761*(0.6 + 0.4*mid_att)/fps;\r\nper_frame_13=q7 = ph2 + 4.7999;\r\nper_frame_14=ph3 = ph3 + 0.3803*(0.6 + 0.4*mid_att)/fps;\r\nper_frame_15=q8 = ph3 + 7.1999;\r\nper_frame_16=ph4 = ph4 + 0.3148*(0.6 + 0.4*mid_att)/fps;\r\nper_frame_17=q33 = ph4 + 9.5998;\r\nper_frame_18=ph5 = ph5 + 0.2673*(0.6 + 0.4*mid_att)/fps;\r\nper_frame_19=q34 = ph5 + 11.9998;\r\nper_frame_20=ph6 = ph6 + 0.2315*(0.6 + 0.4*mid_att)/fps;\r\nper_frame_21=q35 = ph6 + 14.3998;\r\nper_frame_22=ph7 = ph7 + 0.2036*(0.6 + 0.4*mid_att)/fps;\r\nper_frame_23=q36 = ph7 + 16.7997;\r\nper_frame_24=ph8 = ph8 + 0.1813*(0.6 + 0.4*mid_att)/fps;\r\nper_frame_25=q37 = ph8 + 19.1997;\r\nper_frame_26=ph9 = ph9 + 0.1631*(0.6 + 0.4*mid_att)/fps;\r\nper_frame_27=q38 = ph9 + 21.5996;\r\nper_frame_28=ph10 = ph10 + 0.1480*(0.6 + 0.4*mid_att)/fps;\r\nper_frame_29=q39 = ph10 + 23.9996;\r\nper_frame_30=ph11 = ph11 + 0.1353*(0.6 + 0.4*mid_att)/fps;\r\nper_frame_31=q40 = ph11 + 26.3996;\r\nwarp_1=`shader_body\r\nwarp_2=`{\r\nwarp_3=` float k = pow(0.94, q30);\r\nwarp_4=` ret = lerp(tex2D(sampler_main, uv).xyz, GetBlur1(uv), 0.36 * min(1.0, q30)) * k;\r\nwarp_5=` ret = ret - 0.002 * q30;\r\nwarp_6=`}\r\ncomp_1=`sampler sampler_pw_noise_lq;\r\ncomp_2=`shader_body\r\ncomp_3=`{\r\ncomp_4=` float2 p = (uv - 0.5) * aspect.xy;\r\ncomp_5=` float R = 0.12;\r\ncomp_6=` float r = length(p);\r\ncomp_7=` float3 trails = tex2D(sampler_main, uv).xyz;\r\ncomp_8=` float3 tglow = GetBlur1(uv) * 0.8 + GetBlur2(uv) * 0.6;\r\ncomp_9=` float2 sp = uv * texsize.xy / 512.0;\r\ncomp_10=` float4 st = tex2D(sampler_pw_noise_lq, sp);\r\ncomp_11=` float tw = 0.55 + 0.45 * sin(time * (1.3 + st.z * 4.0) + st.w * 30.0);\r\ncomp_12=` float star = saturate((st.x * st.y - 0.975) * 45.0) * tw * (0.5 + 0.5 * q3);\r\ncomp_13=` float3 bg = lerp(float3(0.01, 0.01, 0.03), float3(0.04, 0.02, 0.06), saturate(1.0 - r * 1.5));\r\ncomp_14=` bg += tex2D(sampler_noise_hq, uv * 0.6 + q4).x * float3(0.03, 0.015, 0.05);\r\ncomp_15=` float3 col = bg + star * float3(0.85, 0.9, 1.0);\r\ncomp_16=` float2 e = p / float2(1.0, 0.32);\r\ncomp_17=` float er = length(e);\r\ncomp_18=` float band = saturate((er - 0.16) * 200.0) * saturate((0.28 - er) * 200.0);\r\ncomp_19=` float gaps = tex2D(sampler_noise_hq, float2(er * 2.2, 0.5)).x;\r\ncomp_20=` float3 ringc = lerp(float3(0.75, 0.62, 0.45), float3(0.95, 0.88, 0.75), gaps) * (0.35 + 0.65 * smoothstep(0.3, 0.7, gaps));\r\ncomp_21=` float ringa = band * 0.85;\r\ncomp_22=` float behind = step(p.y, 0.0);\r\ncomp_23=` col = lerp(col, ringc * 0.8, ringa * behind);\r\ncomp_24=` float pm = saturate((R - r) * 400.0);\r\ncomp_25=` float z = sqrt(saturate(1.0 - (r * r) / (R * R)));\r\ncomp_26=` float3 n = float3(p / R, z);\r\ncomp_27=` float lat = n.y;\r\ncomp_28=` float lon = atan2(n.x, z) * 0.3 + q1;\r\ncomp_29=` float bands = tex2D(sampler_noise_hq, float2(lon * 0.5, lat * 0.6 + 0.3)).x;\r\ncomp_30=` float bands2 = tex2D(sampler_noise_hq, float2(lon * 1.5, lat * 2.0 + 0.7)).x;\r\ncomp_31=` float stripe = sin(lat * 11.0 + bands * 2.5 + bands2 * 0.8) * 0.5 + 0.5;\r\ncomp_32=` float3 gas = lerp(float3(0.7, 0.38, 0.2), float3(0.98, 0.88, 0.7), stripe);\r\ncomp_33=` gas = lerp(gas, float3(0.85, 0.55, 0.35), saturate(sin(lat * 3.0 + 1.0)) * 0.4);\r\ncomp_34=` float storm = exp(-dot(n.xy - float2(0.35, 0.25), n.xy - float2(0.35, 0.25)) * 60.0);\r\ncomp_35=` gas = lerp(gas, float3(0.8, 0.35, 0.25), storm * 0.7);\r\ncomp_36=` float3 L = normalize(float3(-0.6, -0.35, 0.7));\r\ncomp_37=` float diff = saturate(dot(n, L));\r\ncomp_38=` float3 planet = gas * (0.05 + 1.05 * pow(diff, 0.8));\r\ncomp_39=` planet += float3(0.3, 0.55, 1.0) * pow(1.0 - z, 3.0) * 0.6 * q2;\r\ncomp_40=` col = lerp(col, planet, pm);\r\ncomp_41=` col = lerp(col, ringc, ringa * (1.0 - behind));\r\ncomp_42=` float atm = exp(-pow((r - R) * 60.0, 2.0)) * (1.0 - pm);\r\ncomp_43=` col += float3(0.35, 0.6, 1.0) * atm * 0.5 * q2;\r\ncomp_44=` float hide = 1.0 - pm * behind;\r\ncomp_45=` col += (trails * 1.2 + tglow) * hide;\r\ncomp_46=` ret = 1.0 - exp(-col * 1.5);\r\ncomp_47=`}\r\n"}, + ]; + if (typeof module !== 'undefined' && module.exports) module.exports = PACK; + if (typeof window !== 'undefined' && window) window.SVMilkdropPack = PACK; +})(); diff --git a/src/shared/presets-milkdrop.js b/src/shared/presets-milkdrop.js index 8e92d15e..8e493976 100644 --- a/src/shared/presets-milkdrop.js +++ b/src/shared/presets-milkdrop.js @@ -782,6 +782,20 @@ wave_1_per_point2=y = 0.12 + 0.62*value1; wave_1_per_point3=a = 0.14 + 0.26*value1;`), ]; + /* CaYaDev PAKETİ (#825): presets/cayadev/ klasöründen üretilen + presets-milkdrop-pack.js (scripts/preset-pack.js). Sayfada o dosya bundan + önce yükleniyor ve `SVMilkdropPack` bırakıyor; Node'da require ile geliyor. + İkisi de yoksa (testlerin `new Function` değerlendirmesi) paket yok sayılır. + Adlar İngilizce ve çevrilmiyor; açıklamaların İngilizcesi i18n'de. */ + let PACK = (typeof window !== 'undefined' && window && window.SVMilkdropPack) || null; + if (!PACK && typeof require === 'function') { + try { PACK = require('./presets-milkdrop-pack.js'); } catch (e) { PACK = null; } + } + for (const p of Array.isArray(PACK) ? PACK : []) { + LIST.push(Object.assign(MD(p.id, p.name, p.description.tr, p.source), + { author: 'CaYaDev', pack: true, category: p.category, md3: !!p.md3 })); + } + if (typeof module !== 'undefined' && module.exports) module.exports = LIST; const P = typeof window !== 'undefined' ? window.SVPresets : null; if (!P || !P.registerBuiltin) return; diff --git a/src/visualizer/index.html b/src/visualizer/index.html index bafb7cfa..6c573859 100644 --- a/src/visualizer/index.html +++ b/src/visualizer/index.html @@ -54,6 +54,7 @@ + diff --git a/src/web/overlay.html b/src/web/overlay.html index 64570d15..7036f873 100644 --- a/src/web/overlay.html +++ b/src/web/overlay.html @@ -90,6 +90,7 @@ + diff --git a/tests/milkdrop-fidelity-comp.test.js b/tests/milkdrop-fidelity-comp.test.js index a7ada874..aaa2b406 100644 --- a/tests/milkdrop-fidelity-comp.test.js +++ b/tests/milkdrop-fidelity-comp.test.js @@ -238,7 +238,11 @@ const MD2_SHAPE_KEYS = ['enabled', 'sides', 'additive', 'thickOutline', 'texture 'x', 'y', 'rad', 'ang', 'tex_ang', 'tex_zoom', 'r', 'g', 'b', 'a', 'r2', 'g2', 'b2', 'a2', 'border_r', 'border_g', 'border_b', 'border_a']; const MD2_CODE = /^(per_frame_init_|per_frame_|per_pixel_|warp_|comp_|wave_[0-3]_(?:init|per_frame|per_point)|shape_[0-3]_(?:init|per_frame))([1-9]\d*)$/; -function md2Reads(key) { +/* MilkDrop 3 presetleri (paketteki `md3`) 16 dalga ve şekil yuvası okuyor. */ +const MD3_SLOT = /^(?:wave_|shape_|wavecode_|shapecode_)(?:[4-9]|1[0-5])_/; +const MD3_CODE = /^(wave_\d+_(?:init|per_frame|per_point)|shape_\d+_(?:init|per_frame))([1-9]\d*)$/; +function md2Reads(key, md3) { + if (md3 && MD3_SLOT.test(key)) return md2Reads(key.replace(/_(?:[4-9]|1[0-5])_/, '_0_')); if (MD2_KEYS.has(key) || MD2_CODE.test(key)) return true; const w = /^wavecode_[0-3]_(\w+)$/.exec(key); if (w) return MD2_WAVE_KEYS.includes(w[1]); @@ -250,7 +254,7 @@ test('kendi presetlerimiz yalnız MilkDrop\'un okuduğu anahtarları, birer kez const B = require('../src/shared/presets-milkdrop.js'); const G = require('../src/shared/milkdrop-generator.js'); const X = require('../src/shared/milkdrop-mashup.js'); - const texts = B.map((p) => [p.id, p.source]); + const texts = B.map((p) => [p.id, p.source, p.md3]); for (let i = 0; i < 64; i++) { const r = G.generate({ energy: (i * 37) % 101, warmth: (i * 53) % 101, density: (i * 71) % 101, motion: (i * 89) % 101, seed: i * 7919 }); @@ -264,7 +268,7 @@ test('kendi presetlerimiz yalnız MilkDrop\'un okuduğu anahtarları, birer kez texts.push(['karışım ' + i, X.compose(d)]); } let checked = 0; - for (const [id, text] of texts) { + for (const [id, text, md3] of texts) { const seen = new Set(); const code = new Map(); for (const line of text.split(/\r?\n/)) { @@ -273,10 +277,10 @@ test('kendi presetlerimiz yalnız MilkDrop\'un okuduğu anahtarları, birer kez const eq = line.indexOf('='); assert.ok(eq > 0, id + ': anahtarsız satır: ' + line); const key = line.slice(0, eq); - assert.ok(md2Reads(key), id + ': MilkDrop bu anahtarı okumuyor: ' + key); + assert.ok(md2Reads(key, md3), id + ': MilkDrop bu anahtarı okumuyor: ' + key); assert.ok(!seen.has(key), id + ': anahtar iki kez (MilkDrop ilkini okuyor): ' + key); seen.add(key); - const c = MD2_CODE.exec(key); + const c = MD2_CODE.exec(key) || (md3 && MD3_CODE.exec(key)); if (c) code.set(c[1], (code.get(c[1]) || []).concat(+c[2])); checked++; } @@ -284,10 +288,11 @@ test('kendi presetlerimiz yalnız MilkDrop\'un okuduğu anahtarları, birer kez const sorted = nums.slice().sort((a, b) => a - b); sorted.forEach((n, k) => assert.strictEqual(n, k + 1, id + ': ' + prefix + ' numarasında boşluk')); } - // İki okuyuş kendi presetlerimizde aynı: uyum anahtarı onları değiştirmiyor - assert.strictEqual(M.readingsDiffer(text), false, id + ': iki okuyuş ayrışıyor'); + /* İki okuyuş kendi presetlerimizde aynı: uyum anahtarı onları değiştirmiyor. + MilkDrop 3 presetinde ayrışmak doğru: MilkDrop 2 okuyuşu dört yuvada duruyor. */ + if (!md3) assert.strictEqual(M.readingsDiffer(text), false, id + ': iki okuyuş ayrışıyor'); } - assert.ok(texts.length === 5 + 64 + 30 && checked > 10000, 'yeterince satır denetlendi: ' + checked); + assert.ok(texts.length === B.length + 64 + 30 && checked > 10000, 'yeterince satır denetlendi: ' + checked); }); // ----------------------------------------------------------------- motor diff --git a/tests/preset-pack.test.js b/tests/preset-pack.test.js new file mode 100644 index 00000000..141456f1 --- /dev/null +++ b/tests/preset-pack.test.js @@ -0,0 +1,150 @@ +'use strict'; +/* CaYaDev MilkDrop preset paketi (#825). + * + * Görünüş gözle ve önizleme/karşılaştırma araçlarıyla onaylandı (bkz. + * presets/cayadev/README.md). Testlerin tuttuğu şey paketin BAŞKA + * OYNATICILARDA da çalışmasını sağlayan kurallar ve gömülü kopyanın + * kaynakla aynı kalması: + * - dosyalar ASCII, adlar "CaYaDev - .milk", lisans ve README yerinde; + * - her preset warp ve comp shader'ı taşıyor ve motorda hatasız çevriliyor; + * - MilkDrop 2'nin kendisinin bildirmediği örnekleyiciler (sampler_pw_noise_lq + * gibi) shader'da bildirilmiş: bildirilmezse MilkDrop comp'u düşürüyor, + * bizim motor ise sessizce çalıştırıyor (BeatDrop'ta ölçüldü); + * - dalga ve şekil kodu aspectx/aspecty okumuyor: MilkDrop 2 onları bu + * bloklara vermiyor (0 görünüyor), paket q31/q32 ile taşıyor; + * - söndürmeler kare hızına bağlı değil (q30), 144 Hz'te izler kısalmıyor. */ +const test = require('node:test'); +const assert = require('node:assert'); +const fs = require('fs'); +const os = require('os'); +const path = require('path'); + +const root = path.join(__dirname, '..'); +const PP = require('../scripts/preset-pack.js'); +const MD = require('../src/shared/milkdrop.js'); +const S = require('../src/shared/milkdrop-shader.js'); +const ZIP = require('../src/main/zip-reader.js'); +const LIST = require('../src/shared/presets-milkdrop.js'); + +const PACK = PP.load(); + +test('gömülü paket dosyası presets/cayadev ile aynı', () => { + assert.strictEqual(fs.readFileSync(PP.OUT, 'utf-8'), PP.render(PACK), + 'node scripts/preset-pack.js ile yeniden üretin'); + // Yerleşik listeye ekleniyor, elle yazılmış beşin ardından + const own = LIST.filter((p) => !p.pack); + const mine = LIST.filter((p) => p.pack); + assert.strictEqual(own.length, 5); + assert.deepStrictEqual(mine.map((p) => p.id), PACK.map((p) => p.id)); + for (const p of mine) { + assert.strictEqual(p.author, 'CaYaDev', p.id); + assert.strictEqual(p.builtin, true, p.id); + assert.strictEqual(p.kind, 'milkdrop', p.id); + } +}); + +test('dosya adı, kimlik, açıklama ve lisans', () => { + assert.ok(PACK.length >= 5); + for (const p of PACK) { + assert.match(p.file, /^CaYaDev - [A-Z][A-Za-z0-9 ]+\.milk$/, p.file); + assert.strictEqual(p.id, 'md_caya_' + p.name.toLowerCase().replace(/ /g, '_'), p.file); + assert.ok(p.description.tr.length > 30 && p.description.en.length > 30, p.file + ': açıklama kısa'); + assert.ok(/^[a-z ]+$/.test(p.category), p.file + ': kategori'); + } + const lic = fs.readFileSync(path.join(PP.DIR, 'LICENSE.md'), 'utf-8'); + assert.match(lic, /CC BY 4\.0/); + assert.match(lic, /CaYaDev/); + const readme = fs.readFileSync(path.join(PP.DIR, 'README.md'), 'utf-8'); + for (const p of PACK) assert.ok(readme.includes('| ' + p.name + ' |'), 'README tablosunda yok: ' + p.name); +}); + +test('her preset MilkDrop 2 başlığı, warp ve comp shader\'ı taşıyor ve hatasız çevriliyor', () => { + for (const p of PACK) { + assert.ok(p.source.startsWith('MILKDROP_PRESET_VERSION=201\r\nPSVERSION=3\r\nPSVERSION_WARP=3\r\nPSVERSION_COMP=3\r\n'), p.name); + const parsed = new MD.Preset(p.source, { seed: 1234 }); + assert.deepStrictEqual(parsed.errors, [], p.name + ': ' + parsed.errors.join(' | ')); + const f = MD.parseMilk(p.source); + for (const [stage, text] of [['warp', f.warpShader], ['comp', f.compShader]]) { + assert.ok(text && /shader_body/.test(text), p.name + ': ' + stage + ' shader yok'); + const t = S.translate(text, { stage }); + assert.deepStrictEqual(t.hard, [], p.name + ' ' + stage); + assert.deepStrictEqual(t.soft, [], p.name + ' ' + stage); + } + } +}); + +test('MilkDrop 3 işareti dosyanın kendisiyle tutarlı', () => { + for (const p of PACK) { + assert.strictEqual(MD.md3Auto(p.source), p.md3, p.name + ': md3 ' + MD.md3Features(p.source).join(',')); + } +}); + +test('MilkDrop\'un bildirmediği örnekleyiciler shader\'da bildirilmiş', () => { + const own = /^(main|fw_main|fc_main|pw_main|pc_main|noise_lq|noise_lq_lite|noise_mq|noise_hq|noisevol_lq|noisevol_hq|blur1|blur2|blur3)$/; + for (const p of PACK) { + const f = MD.parseMilk(p.source); + for (const text of [f.warpShader, f.compShader]) { + const used = new Set((text.match(/sampler_[A-Za-z0-9_]+/g) || []).map((s) => s.slice(8))); + for (const n of used) { + if (own.test(n)) continue; + // Yalnız MilkDrop'un yerleşik dokuları: paket doku dosyası istemiyor + assert.match(n, /^(fw_|fc_|pw_|pc_)(noise_(lq|lq_lite|mq|hq)|noisevol_(lq|hq))$/, p.name + ': ' + n); + assert.ok(new RegExp('^sampler\\s+sampler_' + n + '\\s*;', 'm').test(text), p.name + ': sampler_' + n + ' bildirilmemiş'); + } + } + } +}); + +test('dalga ve şekil kodu en-boy oranını q31/q32\'den okuyor', () => { + for (const p of PACK) { + for (const line of p.source.split(/\r\n/)) { + if (/^(wave|shape)_\d+_(init|per_frame|per_point)\d+=/.test(line)) { + assert.doesNotMatch(line, /aspect[xy]/, p.name + ': ' + line); + } + } + assert.match(p.source, /\r\nper_frame_2=q31 = aspectx;\r\nper_frame_3=q32 = aspecty;\r\n/, p.name); + } +}); + +test('söndürmeler kare hızından bağımsız', () => { + for (const p of PACK) { + assert.match(p.source, /\r\nper_frame_1=q30 = 60\/max\(fps, 15\);\r\n/, p.name); + const warp = MD.parseMilk(p.source).warpShader; + // Geri besleme tamponunu kare başına çarpan her söndürme q30 ile ölçekli + assert.match(warp, /pow\([^)]*q30\)/, p.name + ': warp söndürmesi q30\'suz'); + } +}); + +test('sürüm eki: zip paketi okunuyor ve içerik birebir', () => { + const dir = fs.mkdtempSync(path.join(os.tmpdir(), 'sv-pack-')); + try { + const out = path.join(dir, 'pack.zip'); + const folder = 'CaYaDev MilkDrop Presets/'; + const files = PACK.map((p) => ({ name: folder + p.file, data: Buffer.from(p.source, 'latin1') })) + .concat([{ name: folder + 'LICENSE.md', data: fs.readFileSync(path.join(PP.DIR, 'LICENSE.md')) }]); + fs.writeFileSync(out, PP.zip(files)); + const z = ZIP.open(out); + try { + assert.deepStrictEqual(z.entries.map((e) => e.name), files.map((f) => f.name)); + z.entries.forEach((e, i) => assert.ok(z.read(e).equals(files[i].data), e.name)); + } finally { z.close(); } + // Aynı içerik aynı arşiv: sürümler arası fark yalnız gerçek değişiklik + assert.ok(PP.zip(files).equals(fs.readFileSync(out))); + } finally { fs.rmSync(dir, { recursive: true, force: true }); } + assert.match(PP.zipName(), /^CaYaDev-MilkDrop-Presets-\d+\.\d+\.\d+(-[\w.]+)?\.zip$/); + // Sürüm betiği zip'i bekliyor + const rel = fs.readFileSync(path.join(root, 'scripts/release-assets.js'), 'utf-8'); + assert.match(rel, /'CaYaDev-MilkDrop-Presets-' \+ version \+ '\.zip'/); +}); + +test('her sayfa paketi presets-milkdrop.js\'ten ÖNCE yüklüyor; çeviri paketten', () => { + for (const rel of ['src/admin/index.html', 'src/exporter/index.html', 'src/visualizer/index.html', 'src/web/overlay.html']) { + const html = fs.readFileSync(path.join(root, rel), 'utf-8'); + const pack = html.indexOf('presets-milkdrop-pack.js'); + const mine = html.indexOf('presets-milkdrop.js'); + assert.ok(pack > 0 && pack < mine, rel); + } + const i18n = fs.readFileSync(path.join(root, 'src/shared/i18n.js'), 'utf-8'); + assert.match(i18n, /window\.SVMilkdropPack/); + assert.match(i18n, /hit\.description\.en/); +}); diff --git a/tests/presets-milkdrop.test.js b/tests/presets-milkdrop.test.js index f5aaf505..d20c63dc 100644 --- a/tests/presets-milkdrop.test.js +++ b/tests/presets-milkdrop.test.js @@ -21,19 +21,22 @@ require('../src/shared/defaults.js'); require('../src/shared/presets.js'); const PR = global.window.SVPresets; const LIST = require('../src/shared/presets-milkdrop.js'); +/* Elle yazılmış beş preset; CaYaDev paketi (#825) aynı listeye ekleniyor ve + kendi denetimleri tests/preset-pack.test.js'te. */ +const OWN = LIST.filter((p) => !p.pack); const MD = require('../src/shared/milkdrop.js'); const SRC = fs.readFileSync(path.join(root, 'src/admin/milkdrop-panel.js'), 'utf-8'); const MODE = fs.readFileSync(path.join(root, 'src/visualizer/modes/milkdrop.js'), 'utf-8'); test('beş preset kayıtlı ve kimlikleri deposuyla çakışmıyor', () => { - assert.strictEqual(LIST.length, 5); + assert.strictEqual(OWN.length, 5); const ids = LIST.map((p) => p.id); - assert.strictEqual(new Set(ids).size, 5, 'kimlik yinelenmiş'); + assert.strictEqual(new Set(ids).size, ids.length, 'kimlik yinelenmiş'); for (const id of ids) { /* Depo kimliği `md_` ya da `usr_` üretiyor; önek ayrı olmalı ki kullanıcının preseti bir yerleşiği gölgelemesin. */ - assert.match(id, /^md_caya_[a-z]+$/, id); + assert.match(id, /^md_caya_[a-z0-9_]+$/, id); /* presets-store.js `safeName` kimlikten dosya adı türetiyor ve bu küme dışındaki her karakteri atıyor: kimlik o kümede kalmalı. */ assert.strictEqual(id.replace(/[^A-Za-z0-9_-]/g, ''), id, id); @@ -48,7 +51,7 @@ test('her preset motorda hatasız derleniyor', () => { }); test('her preset hareket ve ışık üretiyor', () => { - for (const p of LIST) { + for (const p of OWN) { const parsed = new MD.Preset(p.source, { seed: 1234 }); /* Hareket: per_frame ve per_pixel'in ikisi de yazılmış olmalı. Yalnız başlıkla gelen bir preset duran bir görüntü çizer. */ @@ -127,7 +130,7 @@ test('kaynaklar bize ait: hiçbiri bir pakete işaret etmiyor', () => { /* Yerleşikler kendi yazdıklarımız. Bir preset paketinden alınmış olsaydı dosya başlığında adı ya da yazarı kalırdı; ayrıca kullanıcı dokusu isteyen bir preset doku paketi olmadan gürültüyle çizilirdi. */ - for (const p of LIST) { + for (const p of OWN) { assert.strictEqual(p.author, 'CAYADEV', p.id); assert.doesNotMatch(p.source, /sampler_(?!fw_|fc_|pw_|pc_|main|blur|noise|pw_main)/i, p.id + ': kullanıcı dokusu istiyor'); assert.doesNotMatch(p.source, /^\s*MILKDROP_PRESET_VERSION/im, p.id); From 0314f1d3aee6008f398e3d908fdc2e5f8e2ca3a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=87A=C4=9EAN=20TURGUT?= Date: Wed, 21 Oct 2026 23:08:14 +0300 Subject: [PATCH 2/3] Keep the preset files' CRLF bytes in every checkout (#825) The embedded copy and the test compare the exact bytes; with autocrlf the files were stored with LF and an Ubuntu checkout would not match. Co-authored-by: caganturgut <271973834+caganturgut@users.noreply.github.com> --- .gitattributes | 3 + presets/cayadev/CaYaDev - Event Horizon.milk | 362 +++---- presets/cayadev/CaYaDev - Neon Monsoon.milk | 388 ++++---- presets/cayadev/CaYaDev - Northern Veil.milk | 266 ++--- presets/cayadev/CaYaDev - Prism Lattice.milk | 388 ++++---- presets/cayadev/CaYaDev - Twelve Moons.milk | 988 +++++++++---------- 6 files changed, 1199 insertions(+), 1196 deletions(-) create mode 100644 .gitattributes diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 00000000..f6546a5a --- /dev/null +++ b/.gitattributes @@ -0,0 +1,3 @@ +# CaYaDev presetleri (#825): .milk dosyaları CRLF olarak birebir saklanır; +# gömülü kopya ve sürüm zip'i her işletim sisteminde aynı baytları taşısın. +presets/cayadev/*.milk -text diff --git a/presets/cayadev/CaYaDev - Event Horizon.milk b/presets/cayadev/CaYaDev - Event Horizon.milk index 870c2584..43cb45cc 100644 --- a/presets/cayadev/CaYaDev - Event Horizon.milk +++ b/presets/cayadev/CaYaDev - Event Horizon.milk @@ -1,181 +1,181 @@ -MILKDROP_PRESET_VERSION=201 -PSVERSION=3 -PSVERSION_WARP=3 -PSVERSION_COMP=3 -[preset00] -fRating=5 -fGammaAdj=1 -fDecay=1 -fVideoEchoZoom=1 -fVideoEchoAlpha=0 -nVideoEchoOrientation=0 -nWaveMode=0 -bAdditiveWaves=0 -bWaveDots=0 -bWaveThick=0 -bModWaveAlphaByVolume=0 -bMaximizeWaveColor=0 -bTexWrap=1 -bDarkenCenter=0 -bRedBlueStereo=0 -bBrighten=0 -bDarken=0 -bSolarize=0 -bInvert=0 -fWaveAlpha=0 -fWaveScale=1 -fWaveSmoothing=0.75 -fWaveParam=0 -fModWaveAlphaStart=0.75 -fModWaveAlphaEnd=0.95 -fWarpAnimSpeed=1 -fWarpScale=1 -fZoomExponent=1 -fShader=0 -zoom=1 -rot=0 -cx=0.5 -cy=0.5 -dx=0 -dy=0 -warp=0 -sx=1 -sy=1 -wave_r=1 -wave_g=1 -wave_b=1 -wave_x=0.5 -wave_y=0.5 -ob_size=0 -ob_r=0 -ob_g=0 -ob_b=0 -ob_a=0 -ib_size=0 -ib_r=0 -ib_g=0 -ib_b=0 -ib_a=0 -nMotionVectorsX=12 -nMotionVectorsY=9 -mv_dx=0 -mv_dy=0 -mv_l=0.9 -mv_r=1 -mv_g=1 -mv_b=1 -mv_a=0 -b1n=0 -b2n=0 -b3n=0 -b1x=1 -b2x=1 -b3x=1 -b1ed=0 -wavecode_0_enabled=1 -wavecode_0_samples=400 -wavecode_0_sep=0 -wavecode_0_bSpectrum=0 -wavecode_0_bUseDots=0 -wavecode_0_bDrawThick=0 -wavecode_0_bAdditive=1 -wavecode_0_scaling=1 -wavecode_0_smoothing=0.5 -wavecode_0_r=1 -wavecode_0_g=1 -wavecode_0_b=1 -wavecode_0_a=0 -wave_0_per_frame1=a = q8*0.9; -wave_0_per_point1=x = sample; -wave_0_per_point2=y = 0.92 + value1*0.12*sin(sample*3.14159); -wave_0_per_point3=r = 0; -wave_0_per_point4=g = 1; -wave_0_per_point5=b = 0; -shapecode_0_enabled=1 -shapecode_0_sides=4 -shapecode_0_additive=1 -shapecode_0_thickOutline=0 -shapecode_0_textured=0 -shapecode_0_num_inst=6 -shapecode_0_x=0.5 -shapecode_0_y=0.5 -shapecode_0_rad=0.003 -shapecode_0_ang=0 -shapecode_0_tex_ang=0 -shapecode_0_tex_zoom=1 -shapecode_0_r=1 -shapecode_0_g=0 -shapecode_0_b=0 -shapecode_0_a=1 -shapecode_0_r2=1 -shapecode_0_g2=0 -shapecode_0_b2=0 -shapecode_0_a2=0 -shapecode_0_border_r=1 -shapecode_0_border_g=1 -shapecode_0_border_b=1 -shapecode_0_border_a=0 -shape_0_per_frame1=x = rand(1000)*0.001; -shape_0_per_frame2=y = 0.9; -shape_0_per_frame3=rad = 0.002 + 0.003*treb_att; -shape_0_per_frame4=a = 0.4 + 0.6*min(1, mid_att); -per_frame_init_1=beat = 0; -per_frame_init_2=last = 0; -per_frame_init_3=glow = 0; -per_frame_init_4=travel = 0; -per_frame_1=q30 = 60/max(fps, 15); -per_frame_2=q31 = aspectx; -per_frame_3=q32 = aspecty; -per_frame_4=travel = travel + (0.35 + 0.55*bass_att)/fps; -per_frame_5=dy = -(0.18 + 0.30*bass_att)/fps; -per_frame_6=beat = (bass > 1.22)*((time - last) > 0.22); -per_frame_7=last = if(beat, time, last); -per_frame_8=glow = max(glow*0.9, beat); -per_frame_9=q1 = sin(time*0.23); -per_frame_10=q2 = cos(time*0.19)*0.6; -per_frame_11=q3 = time*0.02 + 0.06*sin(time*0.11); -per_frame_12=q4 = travel; -per_frame_13=q5 = 0.045 + 0.008*bass_att; -per_frame_14=q6 = glow; -per_frame_15=q7 = time*0.012 + 0.1*sin(time*0.05); -per_frame_16=q8 = beat; -warp_1=`shader_body -warp_2=`{ -warp_3=` ret = tex2D(sampler_main, uv).xyz; -warp_4=` ret.x *= pow(0.986, q30); -warp_5=` ret.y *= pow(0.993, q30); -warp_6=` ret -= 0.001 * q30; -warp_7=`} -comp_1=`shader_body -comp_2=`{ -comp_3=` float2 p = (uv - 0.5) * aspect.xy - float2(q1, q2) * 0.04; -comp_4=` float r = length(p); -comp_5=` float a = atan2(p.y, p.x); -comp_6=` float depth = 0.12 / (r + 0.01); -comp_7=` float2 tuv = float2(a * 0.159155 + q3, depth); -comp_8=` float2 puv = float2(tuv.x * 3.0, depth * 0.35 - q4); -comp_9=` float n1 = tex2D(sampler_noise_hq, puv).x; -comp_10=` float n2 = tex2D(sampler_noise_hq, puv * float2(2.0, 2.3) + float2(0.37, n1 * 0.4)).x; -comp_11=` float plasma = pow(saturate(1.0 - abs(n2 * 2.0 - 1.0)), 6.0) * 0.9 + n1 * 0.12; -comp_12=` float3 w = tex2D(sampler_fw_main, tuv).xyz; -comp_13=` float3 wb = GetBlur1(frac(tuv)); -comp_14=` float streak = w.x * 1.6 + wb.x * 0.8; -comp_15=` float ring = w.y * 1.2 + wb.y * 0.9; -comp_16=` float fog = saturate((r - 0.035) * 2.6); -comp_17=` fog = fog * fog; -comp_18=` float shade = 0.7 + 0.3 * sin(a + 1.5708 + q1 * 0.3); -comp_19=` float3 near = 0.5 + 0.5 * cos(6.28318 * (q7 + float3(0.0, 0.33, 0.67))); -comp_20=` float3 far = 0.5 + 0.5 * cos(6.28318 * (q7 + 0.38 + float3(0.0, 0.33, 0.67))); -comp_21=` near = lerp(near, float3(1.0, 0.6, 0.25), 0.35); -comp_22=` float3 col = lerp(far, near, saturate(r * 2.0)); -comp_23=` float3 pcol = lerp(col, near, plasma); -comp_24=` ret = plasma * pcol * 1.4 * (0.75 + 0.5 * bass_att) * fog * shade; -comp_25=` ret += (streak * lerp(col, float3(1, 1, 1), 0.4) + ring * col * 1.4 * (0.6 + 0.6 * q6)) * fog; -comp_26=` float wob = (tex2D(sampler_noise_lq, float2(a * 0.159155 * 4.0, time * 0.1)).x - 0.5) * 0.012; -comp_27=` float acc = exp(-pow((r - q5 - wob) * 160.0, 2.0)); -comp_28=` float halo = exp(-pow((r - q5 - wob) * 35.0, 2.0)); -comp_29=` ret += acc * float3(1.0, 0.97, 0.92) * (0.5 + 1.0 * q6); -comp_30=` ret += halo * near * (0.35 + 0.9 * q6); -comp_31=` ret *= saturate((r - q5 * 0.85) * 60.0) * 0.85 + 0.15 * saturate(r * 30.0); -comp_32=` ret = 1.0 - exp(-ret * 1.5); -comp_33=`} +MILKDROP_PRESET_VERSION=201 +PSVERSION=3 +PSVERSION_WARP=3 +PSVERSION_COMP=3 +[preset00] +fRating=5 +fGammaAdj=1 +fDecay=1 +fVideoEchoZoom=1 +fVideoEchoAlpha=0 +nVideoEchoOrientation=0 +nWaveMode=0 +bAdditiveWaves=0 +bWaveDots=0 +bWaveThick=0 +bModWaveAlphaByVolume=0 +bMaximizeWaveColor=0 +bTexWrap=1 +bDarkenCenter=0 +bRedBlueStereo=0 +bBrighten=0 +bDarken=0 +bSolarize=0 +bInvert=0 +fWaveAlpha=0 +fWaveScale=1 +fWaveSmoothing=0.75 +fWaveParam=0 +fModWaveAlphaStart=0.75 +fModWaveAlphaEnd=0.95 +fWarpAnimSpeed=1 +fWarpScale=1 +fZoomExponent=1 +fShader=0 +zoom=1 +rot=0 +cx=0.5 +cy=0.5 +dx=0 +dy=0 +warp=0 +sx=1 +sy=1 +wave_r=1 +wave_g=1 +wave_b=1 +wave_x=0.5 +wave_y=0.5 +ob_size=0 +ob_r=0 +ob_g=0 +ob_b=0 +ob_a=0 +ib_size=0 +ib_r=0 +ib_g=0 +ib_b=0 +ib_a=0 +nMotionVectorsX=12 +nMotionVectorsY=9 +mv_dx=0 +mv_dy=0 +mv_l=0.9 +mv_r=1 +mv_g=1 +mv_b=1 +mv_a=0 +b1n=0 +b2n=0 +b3n=0 +b1x=1 +b2x=1 +b3x=1 +b1ed=0 +wavecode_0_enabled=1 +wavecode_0_samples=400 +wavecode_0_sep=0 +wavecode_0_bSpectrum=0 +wavecode_0_bUseDots=0 +wavecode_0_bDrawThick=0 +wavecode_0_bAdditive=1 +wavecode_0_scaling=1 +wavecode_0_smoothing=0.5 +wavecode_0_r=1 +wavecode_0_g=1 +wavecode_0_b=1 +wavecode_0_a=0 +wave_0_per_frame1=a = q8*0.9; +wave_0_per_point1=x = sample; +wave_0_per_point2=y = 0.92 + value1*0.12*sin(sample*3.14159); +wave_0_per_point3=r = 0; +wave_0_per_point4=g = 1; +wave_0_per_point5=b = 0; +shapecode_0_enabled=1 +shapecode_0_sides=4 +shapecode_0_additive=1 +shapecode_0_thickOutline=0 +shapecode_0_textured=0 +shapecode_0_num_inst=6 +shapecode_0_x=0.5 +shapecode_0_y=0.5 +shapecode_0_rad=0.003 +shapecode_0_ang=0 +shapecode_0_tex_ang=0 +shapecode_0_tex_zoom=1 +shapecode_0_r=1 +shapecode_0_g=0 +shapecode_0_b=0 +shapecode_0_a=1 +shapecode_0_r2=1 +shapecode_0_g2=0 +shapecode_0_b2=0 +shapecode_0_a2=0 +shapecode_0_border_r=1 +shapecode_0_border_g=1 +shapecode_0_border_b=1 +shapecode_0_border_a=0 +shape_0_per_frame1=x = rand(1000)*0.001; +shape_0_per_frame2=y = 0.9; +shape_0_per_frame3=rad = 0.002 + 0.003*treb_att; +shape_0_per_frame4=a = 0.4 + 0.6*min(1, mid_att); +per_frame_init_1=beat = 0; +per_frame_init_2=last = 0; +per_frame_init_3=glow = 0; +per_frame_init_4=travel = 0; +per_frame_1=q30 = 60/max(fps, 15); +per_frame_2=q31 = aspectx; +per_frame_3=q32 = aspecty; +per_frame_4=travel = travel + (0.35 + 0.55*bass_att)/fps; +per_frame_5=dy = -(0.18 + 0.30*bass_att)/fps; +per_frame_6=beat = (bass > 1.22)*((time - last) > 0.22); +per_frame_7=last = if(beat, time, last); +per_frame_8=glow = max(glow*0.9, beat); +per_frame_9=q1 = sin(time*0.23); +per_frame_10=q2 = cos(time*0.19)*0.6; +per_frame_11=q3 = time*0.02 + 0.06*sin(time*0.11); +per_frame_12=q4 = travel; +per_frame_13=q5 = 0.045 + 0.008*bass_att; +per_frame_14=q6 = glow; +per_frame_15=q7 = time*0.012 + 0.1*sin(time*0.05); +per_frame_16=q8 = beat; +warp_1=`shader_body +warp_2=`{ +warp_3=` ret = tex2D(sampler_main, uv).xyz; +warp_4=` ret.x *= pow(0.986, q30); +warp_5=` ret.y *= pow(0.993, q30); +warp_6=` ret -= 0.001 * q30; +warp_7=`} +comp_1=`shader_body +comp_2=`{ +comp_3=` float2 p = (uv - 0.5) * aspect.xy - float2(q1, q2) * 0.04; +comp_4=` float r = length(p); +comp_5=` float a = atan2(p.y, p.x); +comp_6=` float depth = 0.12 / (r + 0.01); +comp_7=` float2 tuv = float2(a * 0.159155 + q3, depth); +comp_8=` float2 puv = float2(tuv.x * 3.0, depth * 0.35 - q4); +comp_9=` float n1 = tex2D(sampler_noise_hq, puv).x; +comp_10=` float n2 = tex2D(sampler_noise_hq, puv * float2(2.0, 2.3) + float2(0.37, n1 * 0.4)).x; +comp_11=` float plasma = pow(saturate(1.0 - abs(n2 * 2.0 - 1.0)), 6.0) * 0.9 + n1 * 0.12; +comp_12=` float3 w = tex2D(sampler_fw_main, tuv).xyz; +comp_13=` float3 wb = GetBlur1(frac(tuv)); +comp_14=` float streak = w.x * 1.6 + wb.x * 0.8; +comp_15=` float ring = w.y * 1.2 + wb.y * 0.9; +comp_16=` float fog = saturate((r - 0.035) * 2.6); +comp_17=` fog = fog * fog; +comp_18=` float shade = 0.7 + 0.3 * sin(a + 1.5708 + q1 * 0.3); +comp_19=` float3 near = 0.5 + 0.5 * cos(6.28318 * (q7 + float3(0.0, 0.33, 0.67))); +comp_20=` float3 far = 0.5 + 0.5 * cos(6.28318 * (q7 + 0.38 + float3(0.0, 0.33, 0.67))); +comp_21=` near = lerp(near, float3(1.0, 0.6, 0.25), 0.35); +comp_22=` float3 col = lerp(far, near, saturate(r * 2.0)); +comp_23=` float3 pcol = lerp(col, near, plasma); +comp_24=` ret = plasma * pcol * 1.4 * (0.75 + 0.5 * bass_att) * fog * shade; +comp_25=` ret += (streak * lerp(col, float3(1, 1, 1), 0.4) + ring * col * 1.4 * (0.6 + 0.6 * q6)) * fog; +comp_26=` float wob = (tex2D(sampler_noise_lq, float2(a * 0.159155 * 4.0, time * 0.1)).x - 0.5) * 0.012; +comp_27=` float acc = exp(-pow((r - q5 - wob) * 160.0, 2.0)); +comp_28=` float halo = exp(-pow((r - q5 - wob) * 35.0, 2.0)); +comp_29=` ret += acc * float3(1.0, 0.97, 0.92) * (0.5 + 1.0 * q6); +comp_30=` ret += halo * near * (0.35 + 0.9 * q6); +comp_31=` ret *= saturate((r - q5 * 0.85) * 60.0) * 0.85 + 0.15 * saturate(r * 30.0); +comp_32=` ret = 1.0 - exp(-ret * 1.5); +comp_33=`} diff --git a/presets/cayadev/CaYaDev - Neon Monsoon.milk b/presets/cayadev/CaYaDev - Neon Monsoon.milk index 8f1c7480..d11daaee 100644 --- a/presets/cayadev/CaYaDev - Neon Monsoon.milk +++ b/presets/cayadev/CaYaDev - Neon Monsoon.milk @@ -1,194 +1,194 @@ -MILKDROP_PRESET_VERSION=201 -PSVERSION=3 -PSVERSION_WARP=3 -PSVERSION_COMP=3 -[preset00] -fRating=5 -fGammaAdj=1 -fDecay=1 -fVideoEchoZoom=1 -fVideoEchoAlpha=0 -nVideoEchoOrientation=0 -nWaveMode=0 -bAdditiveWaves=0 -bWaveDots=0 -bWaveThick=0 -bModWaveAlphaByVolume=0 -bMaximizeWaveColor=0 -bTexWrap=1 -bDarkenCenter=0 -bRedBlueStereo=0 -bBrighten=0 -bDarken=0 -bSolarize=0 -bInvert=0 -fWaveAlpha=0 -fWaveScale=1 -fWaveSmoothing=0.75 -fWaveParam=0 -fModWaveAlphaStart=0.75 -fModWaveAlphaEnd=0.95 -fWarpAnimSpeed=1 -fWarpScale=1 -fZoomExponent=1 -fShader=0 -zoom=1 -rot=0 -cx=0.5 -cy=0.5 -dx=0 -dy=0 -warp=0 -sx=1 -sy=1 -wave_r=1 -wave_g=1 -wave_b=1 -wave_x=0.5 -wave_y=0.5 -ob_size=0 -ob_r=0 -ob_g=0 -ob_b=0 -ob_a=0 -ib_size=0 -ib_r=0 -ib_g=0 -ib_b=0 -ib_a=0 -nMotionVectorsX=12 -nMotionVectorsY=9 -mv_dx=0 -mv_dy=0 -mv_l=0.9 -mv_r=1 -mv_g=1 -mv_b=1 -mv_a=0 -b1n=0 -b2n=0 -b3n=0 -b1x=1 -b2x=1 -b3x=1 -b1ed=0 -wavecode_0_enabled=1 -wavecode_0_samples=256 -wavecode_0_sep=0 -wavecode_0_bSpectrum=0 -wavecode_0_bUseDots=0 -wavecode_0_bDrawThick=0 -wavecode_0_bAdditive=1 -wavecode_0_scaling=1 -wavecode_0_smoothing=0.6 -wavecode_0_r=1 -wavecode_0_g=1 -wavecode_0_b=1 -wavecode_0_a=0.9 -wave_0_per_frame1=t1 = time*0.4; -wave_0_per_frame2=t2 = 0.13 + 0.04*bass_att; -wave_0_per_frame3=a = 0.9*min(1, q30); -wave_0_per_point1=an = sample*6.28318 + t1; -wave_0_per_point2=rr = t2 + value1*0.2; -wave_0_per_point3=x = 0.5 + 0.12*sin(time*0.13) + rr*cos(an)*q31; -wave_0_per_point4=y = 0.5 + 0.08*cos(time*0.11) + rr*sin(an)*q32; -wave_0_per_point5=r = 1; -wave_0_per_point6=g = 0; -wave_0_per_point7=b = 0; -wavecode_1_enabled=1 -wavecode_1_samples=384 -wavecode_1_sep=0 -wavecode_1_bSpectrum=0 -wavecode_1_bUseDots=0 -wavecode_1_bDrawThick=0 -wavecode_1_bAdditive=1 -wavecode_1_scaling=1 -wavecode_1_smoothing=0.7 -wavecode_1_r=1 -wavecode_1_g=1 -wavecode_1_b=1 -wavecode_1_a=0.7 -wave_1_per_frame1=a = 0.7*min(1, q30); -wave_1_per_point1=x = sample; -wave_1_per_point2=y = 0.5 + value2*0.4*sin(sample*3.14159) + 0.22*sin(sample*4 + time*0.37); -wave_1_per_point3=r = 0; -wave_1_per_point4=g = 1; -wave_1_per_point5=b = 0; -shapecode_0_enabled=1 -shapecode_0_sides=40 -shapecode_0_additive=1 -shapecode_0_thickOutline=0 -shapecode_0_textured=0 -shapecode_0_num_inst=1 -shapecode_0_x=0.5 -shapecode_0_y=0.5 -shapecode_0_rad=0.06 -shapecode_0_ang=0 -shapecode_0_tex_ang=0 -shapecode_0_tex_zoom=1 -shapecode_0_r=1 -shapecode_0_g=0.25 -shapecode_0_b=0 -shapecode_0_a=0 -shapecode_0_r2=0 -shapecode_0_g2=0 -shapecode_0_b2=0 -shapecode_0_a2=0 -shapecode_0_border_r=1 -shapecode_0_border_g=1 -shapecode_0_border_b=1 -shapecode_0_border_a=0 -shape_0_per_frame1=x = 0.5 + 0.32*sin(time*0.37); -shape_0_per_frame2=y = 0.5 + 0.28*cos(time*0.29); -shape_0_per_frame3=rad = 0.035 + 0.05*max(bass - 0.9, 0); -shape_0_per_frame4=a = min(0.5, 0.6*max(bass - 1.05, 0))*min(1, q30); -per_frame_1=q30 = 60/max(fps, 15); -per_frame_2=q31 = aspectx; -per_frame_3=q32 = aspecty; -per_frame_4=q1 = 0.5 + 0.9*bass_att; -per_frame_5=q2 = cos(time*0.21)*0.7; -per_frame_6=q3 = sin(time*0.17)*0.7; -per_frame_7=q4 = time*0.035; -per_frame_8=q5 = 0.5 + 0.5*sin(time*0.045); -per_frame_9=zoom = 1.0 + 0.002*sin(time*0.31) + 0.008*max(bass_att - 1.05, 0); -warp_1=`shader_body -warp_2=`{ -warp_3=` float3 P = float3((uv - 0.5) * aspect.xy * 1.3, q4); -warp_4=` float e = 0.03; -warp_5=` float nx1 = tex3D(sampler_noisevol_hq, P + float3(e, 0, 0)).x; -warp_6=` float nx0 = tex3D(sampler_noisevol_hq, P - float3(e, 0, 0)).x; -warp_7=` float ny1 = tex3D(sampler_noisevol_hq, P + float3(0, e, 0)).x; -warp_8=` float ny0 = tex3D(sampler_noisevol_hq, P - float3(0, e, 0)).x; -warp_9=` float2 curl = float2(ny1 - ny0, nx0 - nx1) * aspect.zw; -warp_10=` float2 d = texsize.zw * 10.0; -warp_11=` float gx = lum(GetBlur3(uv + float2(d.x, 0))) - lum(GetBlur3(uv - float2(d.x, 0))); -warp_12=` float gy = lum(GetBlur3(uv + float2(0, d.y))) - lum(GetBlur3(uv - float2(0, d.y))); -warp_13=` float2 swirl = float2(-gy, gx) * aspect.zw; -warp_14=` float2 uv2 = uv + (curl * 0.010 * q1 + swirl * 0.012) * q30; -warp_15=` ret = tex2D(sampler_main, uv2).xyz; -warp_16=` ret = ret * pow(0.982, q30) - 0.0025 * q30; -warp_17=`} -comp_1=`shader_body -comp_2=`{ -comp_3=` float2 d = texsize.zw * 3.0; -comp_4=` float3 m = tex2D(sampler_main, uv).xyz; -comp_5=` float3 bl = GetBlur1(uv); -comp_6=` float hx = lum(GetBlur1(uv + float2(d.x, 0))) - lum(GetBlur1(uv - float2(d.x, 0))); -comp_7=` float hy = lum(GetBlur1(uv + float2(0, d.y))) - lum(GetBlur1(uv - float2(0, d.y))); -comp_8=` float3 n = normalize(float3(hx, hy, 0.05)); -comp_9=` float3 L = normalize(float3(q2, q3, 0.9)); -comp_10=` float diff = saturate(dot(n, L)); -comp_11=` float spec = pow(saturate(dot(reflect(-L, n), float3(0, 0, 1))), 28.0); -comp_12=` float3 inkA = lerp(float3(1.0, 0.05, 0.45), float3(1.0, 0.35, 0.02), q5); -comp_13=` float3 inkB = lerp(float3(0.0, 0.7, 1.0), float3(0.3, 0.2, 1.0), q5); -comp_14=` float a = saturate(m.x * 1.2); -comp_15=` float b = saturate(m.y * 1.4); -comp_16=` float3 col = inkA * a * (1.2 - 0.5 * a) + inkB * b + float3(1.0, 0.95, 0.9) * saturate(a * b * 2.5); -comp_17=` ret = col * (0.5 + 0.7 * diff) + spec * 0.4 * saturate((a + b) * 3.0); -comp_18=` float3 glow = inkA * GetBlur2(uv).x + inkB * GetBlur2(uv).y; -comp_19=` ret += glow * (0.35 + 0.3 * bass_att); -comp_20=` ret += float3(0.02, 0.01, 0.05); -comp_21=` ret = 1.0 - exp(-ret * 1.35); -comp_22=` float2 c = uv - 0.5; -comp_23=` ret *= 1.0 - dot(c, c) * 0.8; -comp_24=`} +MILKDROP_PRESET_VERSION=201 +PSVERSION=3 +PSVERSION_WARP=3 +PSVERSION_COMP=3 +[preset00] +fRating=5 +fGammaAdj=1 +fDecay=1 +fVideoEchoZoom=1 +fVideoEchoAlpha=0 +nVideoEchoOrientation=0 +nWaveMode=0 +bAdditiveWaves=0 +bWaveDots=0 +bWaveThick=0 +bModWaveAlphaByVolume=0 +bMaximizeWaveColor=0 +bTexWrap=1 +bDarkenCenter=0 +bRedBlueStereo=0 +bBrighten=0 +bDarken=0 +bSolarize=0 +bInvert=0 +fWaveAlpha=0 +fWaveScale=1 +fWaveSmoothing=0.75 +fWaveParam=0 +fModWaveAlphaStart=0.75 +fModWaveAlphaEnd=0.95 +fWarpAnimSpeed=1 +fWarpScale=1 +fZoomExponent=1 +fShader=0 +zoom=1 +rot=0 +cx=0.5 +cy=0.5 +dx=0 +dy=0 +warp=0 +sx=1 +sy=1 +wave_r=1 +wave_g=1 +wave_b=1 +wave_x=0.5 +wave_y=0.5 +ob_size=0 +ob_r=0 +ob_g=0 +ob_b=0 +ob_a=0 +ib_size=0 +ib_r=0 +ib_g=0 +ib_b=0 +ib_a=0 +nMotionVectorsX=12 +nMotionVectorsY=9 +mv_dx=0 +mv_dy=0 +mv_l=0.9 +mv_r=1 +mv_g=1 +mv_b=1 +mv_a=0 +b1n=0 +b2n=0 +b3n=0 +b1x=1 +b2x=1 +b3x=1 +b1ed=0 +wavecode_0_enabled=1 +wavecode_0_samples=256 +wavecode_0_sep=0 +wavecode_0_bSpectrum=0 +wavecode_0_bUseDots=0 +wavecode_0_bDrawThick=0 +wavecode_0_bAdditive=1 +wavecode_0_scaling=1 +wavecode_0_smoothing=0.6 +wavecode_0_r=1 +wavecode_0_g=1 +wavecode_0_b=1 +wavecode_0_a=0.9 +wave_0_per_frame1=t1 = time*0.4; +wave_0_per_frame2=t2 = 0.13 + 0.04*bass_att; +wave_0_per_frame3=a = 0.9*min(1, q30); +wave_0_per_point1=an = sample*6.28318 + t1; +wave_0_per_point2=rr = t2 + value1*0.2; +wave_0_per_point3=x = 0.5 + 0.12*sin(time*0.13) + rr*cos(an)*q31; +wave_0_per_point4=y = 0.5 + 0.08*cos(time*0.11) + rr*sin(an)*q32; +wave_0_per_point5=r = 1; +wave_0_per_point6=g = 0; +wave_0_per_point7=b = 0; +wavecode_1_enabled=1 +wavecode_1_samples=384 +wavecode_1_sep=0 +wavecode_1_bSpectrum=0 +wavecode_1_bUseDots=0 +wavecode_1_bDrawThick=0 +wavecode_1_bAdditive=1 +wavecode_1_scaling=1 +wavecode_1_smoothing=0.7 +wavecode_1_r=1 +wavecode_1_g=1 +wavecode_1_b=1 +wavecode_1_a=0.7 +wave_1_per_frame1=a = 0.7*min(1, q30); +wave_1_per_point1=x = sample; +wave_1_per_point2=y = 0.5 + value2*0.4*sin(sample*3.14159) + 0.22*sin(sample*4 + time*0.37); +wave_1_per_point3=r = 0; +wave_1_per_point4=g = 1; +wave_1_per_point5=b = 0; +shapecode_0_enabled=1 +shapecode_0_sides=40 +shapecode_0_additive=1 +shapecode_0_thickOutline=0 +shapecode_0_textured=0 +shapecode_0_num_inst=1 +shapecode_0_x=0.5 +shapecode_0_y=0.5 +shapecode_0_rad=0.06 +shapecode_0_ang=0 +shapecode_0_tex_ang=0 +shapecode_0_tex_zoom=1 +shapecode_0_r=1 +shapecode_0_g=0.25 +shapecode_0_b=0 +shapecode_0_a=0 +shapecode_0_r2=0 +shapecode_0_g2=0 +shapecode_0_b2=0 +shapecode_0_a2=0 +shapecode_0_border_r=1 +shapecode_0_border_g=1 +shapecode_0_border_b=1 +shapecode_0_border_a=0 +shape_0_per_frame1=x = 0.5 + 0.32*sin(time*0.37); +shape_0_per_frame2=y = 0.5 + 0.28*cos(time*0.29); +shape_0_per_frame3=rad = 0.035 + 0.05*max(bass - 0.9, 0); +shape_0_per_frame4=a = min(0.5, 0.6*max(bass - 1.05, 0))*min(1, q30); +per_frame_1=q30 = 60/max(fps, 15); +per_frame_2=q31 = aspectx; +per_frame_3=q32 = aspecty; +per_frame_4=q1 = 0.5 + 0.9*bass_att; +per_frame_5=q2 = cos(time*0.21)*0.7; +per_frame_6=q3 = sin(time*0.17)*0.7; +per_frame_7=q4 = time*0.035; +per_frame_8=q5 = 0.5 + 0.5*sin(time*0.045); +per_frame_9=zoom = 1.0 + 0.002*sin(time*0.31) + 0.008*max(bass_att - 1.05, 0); +warp_1=`shader_body +warp_2=`{ +warp_3=` float3 P = float3((uv - 0.5) * aspect.xy * 1.3, q4); +warp_4=` float e = 0.03; +warp_5=` float nx1 = tex3D(sampler_noisevol_hq, P + float3(e, 0, 0)).x; +warp_6=` float nx0 = tex3D(sampler_noisevol_hq, P - float3(e, 0, 0)).x; +warp_7=` float ny1 = tex3D(sampler_noisevol_hq, P + float3(0, e, 0)).x; +warp_8=` float ny0 = tex3D(sampler_noisevol_hq, P - float3(0, e, 0)).x; +warp_9=` float2 curl = float2(ny1 - ny0, nx0 - nx1) * aspect.zw; +warp_10=` float2 d = texsize.zw * 10.0; +warp_11=` float gx = lum(GetBlur3(uv + float2(d.x, 0))) - lum(GetBlur3(uv - float2(d.x, 0))); +warp_12=` float gy = lum(GetBlur3(uv + float2(0, d.y))) - lum(GetBlur3(uv - float2(0, d.y))); +warp_13=` float2 swirl = float2(-gy, gx) * aspect.zw; +warp_14=` float2 uv2 = uv + (curl * 0.010 * q1 + swirl * 0.012) * q30; +warp_15=` ret = tex2D(sampler_main, uv2).xyz; +warp_16=` ret = ret * pow(0.982, q30) - 0.0025 * q30; +warp_17=`} +comp_1=`shader_body +comp_2=`{ +comp_3=` float2 d = texsize.zw * 3.0; +comp_4=` float3 m = tex2D(sampler_main, uv).xyz; +comp_5=` float3 bl = GetBlur1(uv); +comp_6=` float hx = lum(GetBlur1(uv + float2(d.x, 0))) - lum(GetBlur1(uv - float2(d.x, 0))); +comp_7=` float hy = lum(GetBlur1(uv + float2(0, d.y))) - lum(GetBlur1(uv - float2(0, d.y))); +comp_8=` float3 n = normalize(float3(hx, hy, 0.05)); +comp_9=` float3 L = normalize(float3(q2, q3, 0.9)); +comp_10=` float diff = saturate(dot(n, L)); +comp_11=` float spec = pow(saturate(dot(reflect(-L, n), float3(0, 0, 1))), 28.0); +comp_12=` float3 inkA = lerp(float3(1.0, 0.05, 0.45), float3(1.0, 0.35, 0.02), q5); +comp_13=` float3 inkB = lerp(float3(0.0, 0.7, 1.0), float3(0.3, 0.2, 1.0), q5); +comp_14=` float a = saturate(m.x * 1.2); +comp_15=` float b = saturate(m.y * 1.4); +comp_16=` float3 col = inkA * a * (1.2 - 0.5 * a) + inkB * b + float3(1.0, 0.95, 0.9) * saturate(a * b * 2.5); +comp_17=` ret = col * (0.5 + 0.7 * diff) + spec * 0.4 * saturate((a + b) * 3.0); +comp_18=` float3 glow = inkA * GetBlur2(uv).x + inkB * GetBlur2(uv).y; +comp_19=` ret += glow * (0.35 + 0.3 * bass_att); +comp_20=` ret += float3(0.02, 0.01, 0.05); +comp_21=` ret = 1.0 - exp(-ret * 1.35); +comp_22=` float2 c = uv - 0.5; +comp_23=` ret *= 1.0 - dot(c, c) * 0.8; +comp_24=`} diff --git a/presets/cayadev/CaYaDev - Northern Veil.milk b/presets/cayadev/CaYaDev - Northern Veil.milk index 38ba15a9..d03a33df 100644 --- a/presets/cayadev/CaYaDev - Northern Veil.milk +++ b/presets/cayadev/CaYaDev - Northern Veil.milk @@ -1,133 +1,133 @@ -MILKDROP_PRESET_VERSION=201 -PSVERSION=3 -PSVERSION_WARP=3 -PSVERSION_COMP=3 -[preset00] -fRating=5 -fGammaAdj=1 -fDecay=1 -fVideoEchoZoom=1 -fVideoEchoAlpha=0 -nVideoEchoOrientation=0 -nWaveMode=0 -bAdditiveWaves=0 -bWaveDots=0 -bWaveThick=0 -bModWaveAlphaByVolume=0 -bMaximizeWaveColor=0 -bTexWrap=0 -bDarkenCenter=0 -bRedBlueStereo=0 -bBrighten=0 -bDarken=0 -bSolarize=0 -bInvert=0 -fWaveAlpha=0 -fWaveScale=1 -fWaveSmoothing=0.75 -fWaveParam=0 -fModWaveAlphaStart=0.75 -fModWaveAlphaEnd=0.95 -fWarpAnimSpeed=1 -fWarpScale=1 -fZoomExponent=1 -fShader=0 -zoom=1 -rot=0 -cx=0.5 -cy=0.5 -dx=0 -dy=0 -warp=0 -sx=1 -sy=1 -wave_r=1 -wave_g=1 -wave_b=1 -wave_x=0.5 -wave_y=0.5 -ob_size=0 -ob_r=0 -ob_g=0 -ob_b=0 -ob_a=0 -ib_size=0 -ib_r=0 -ib_g=0 -ib_b=0 -ib_a=0 -nMotionVectorsX=12 -nMotionVectorsY=9 -mv_dx=0 -mv_dy=0 -mv_l=0.9 -mv_r=1 -mv_g=1 -mv_b=1 -mv_a=0 -b1n=0 -b2n=0 -b3n=0 -b1x=1 -b2x=1 -b3x=1 -b1ed=0 -per_frame_init_1=sway = 0; -per_frame_1=q30 = 60/max(fps, 15); -per_frame_2=q31 = aspectx; -per_frame_3=q32 = aspecty; -per_frame_4=sway = sway + (0.6 + 0.9*mid_att)/fps; -per_frame_5=dy = 0.035/fps; -per_frame_6=q1 = sway; -per_frame_7=q2 = time*0.045; -per_frame_8=q3 = 0.45 + 0.65*bass_att; -per_frame_9=q4 = treb_att; -per_frame_10=q5 = 0.6 + 0.4*sin(time*0.043); -warp_1=`shader_body -warp_2=`{ -warp_3=` float x = uv.x; -warp_4=` float n1 = tex2D(sampler_noise_hq, float2(x * 0.7 + q2 * 0.3, 0.31)).x; -warp_5=` float base = 0.55 + 0.05 * sin(x * 4.0 + q1) + 0.035 * sin(x * 9.0 - q1 * 1.4) + (n1 - 0.5) * 0.14 + 0.012 * sin(x * 26.0 - q1 * 3.0); -warp_6=` float h = base - uv.y; -warp_7=` float ray = tex2D(sampler_noise_hq, float2(x * 7.0 + q2, 0.73)).x; -warp_8=` float ray2 = tex2D(sampler_noise_hq, float2(x * 19.0 - q2 * 2.0, 0.11)).x; -warp_9=` ray = pow(ray, 3.0) * 1.6 + pow(ray2, 4.0) * 0.8; -warp_10=` float upper = exp(-max(h, 0.0) * 9.0) * (0.2 + ray); -warp_11=` float hem = exp(min(h, 0.0) * 90.0); -warp_12=` float curtain = upper * hem; -warp_13=` float3 green = float3(0.15, 1.0, 0.55); -warp_14=` float3 violet = float3(0.75, 0.25, 1.0); -warp_15=` float3 col = lerp(green, violet, saturate(h * 4.0 * q5)); -warp_16=` col = lerp(col, float3(1.0, 0.35, 0.5), saturate(n1 * 2.0 - 1.2)); -warp_17=` float sky = step(uv.y, 0.66); -warp_18=` ret = tex2D(sampler_main, uv).xyz * pow(0.955, q30); -warp_19=` ret += col * curtain * 0.032 * q3 * sky * q30; -warp_20=`} -comp_1=`sampler sampler_pw_noise_lq; -comp_2=`shader_body -comp_3=`{ -comp_4=` float hor = 0.68; -comp_5=` float below = step(hor, uv.y); -comp_6=` float d = uv.y - hor; -comp_7=` float rn = tex2D(sampler_noise_hq, float2(uv.x * 2.0 + time * 0.02, uv.y * 14.0 - time * 0.15)).x - 0.5; -comp_8=` float rip = rn * 0.012 + sin(uv.y * 90.0 - time * 1.3) * 0.0012; -comp_9=` float2 u = lerp(uv, float2(uv.x + rip * saturate(d * 12.0), hor - d * 1.25), below); -comp_10=` float m1 = tex2D(sampler_noise_hq, float2(u.x * 1.3, 0.2)).x; -comp_11=` float m2 = tex2D(sampler_noise_hq, float2(u.x * 4.7, 0.6)).x; -comp_12=` float ridge = hor - 0.02 - 0.075 * m1 - 0.012 * m2; -comp_13=` float land = saturate((u.y - ridge) * 400.0); -comp_14=` float3 a = tex2D(sampler_main, u).xyz; -comp_15=` float3 glow = GetBlur2(u) * 0.5 + GetBlur3(u) * 0.45; -comp_16=` float3 skycol = lerp(float3(0.01, 0.015, 0.05), float3(0.03, 0.06, 0.1), saturate((u.y - 0.2) * 2.0)); -comp_17=` float2 sp = u * texsize.xy / 512.0; -comp_18=` float4 st = tex2D(sampler_pw_noise_lq, sp); -comp_19=` float tw = 0.55 + 0.45 * sin(time * (1.3 + st.z * 4.0) + st.w * 30.0); -comp_20=` float star = saturate((st.x * st.y - 0.975) * 45.0) * tw * (0.6 + 0.5 * q4); -comp_21=` float3 s = skycol + a * 1.1 + glow + star * float3(0.85, 0.9, 1.0) * (1.0 - saturate(lum(a) * 3.0)); -comp_22=` float3 landcol = float3(0.006, 0.01, 0.02) + glow * 0.05; -comp_23=` s = lerp(s, landcol, land); -comp_24=` float fade = lerp(1.0, 0.55 * (1.0 - saturate(d * 2.2)), below); -comp_25=` ret = s * fade; -comp_26=` ret += float3(0.05, 0.12, 0.1) * exp(-abs(d) * 120.0) * (0.5 + 0.5 * lum(GetBlur3(float2(uv.x, 0.5))) * 4.0); -comp_27=` ret = 1.0 - exp(-ret * 1.6); -comp_28=`} +MILKDROP_PRESET_VERSION=201 +PSVERSION=3 +PSVERSION_WARP=3 +PSVERSION_COMP=3 +[preset00] +fRating=5 +fGammaAdj=1 +fDecay=1 +fVideoEchoZoom=1 +fVideoEchoAlpha=0 +nVideoEchoOrientation=0 +nWaveMode=0 +bAdditiveWaves=0 +bWaveDots=0 +bWaveThick=0 +bModWaveAlphaByVolume=0 +bMaximizeWaveColor=0 +bTexWrap=0 +bDarkenCenter=0 +bRedBlueStereo=0 +bBrighten=0 +bDarken=0 +bSolarize=0 +bInvert=0 +fWaveAlpha=0 +fWaveScale=1 +fWaveSmoothing=0.75 +fWaveParam=0 +fModWaveAlphaStart=0.75 +fModWaveAlphaEnd=0.95 +fWarpAnimSpeed=1 +fWarpScale=1 +fZoomExponent=1 +fShader=0 +zoom=1 +rot=0 +cx=0.5 +cy=0.5 +dx=0 +dy=0 +warp=0 +sx=1 +sy=1 +wave_r=1 +wave_g=1 +wave_b=1 +wave_x=0.5 +wave_y=0.5 +ob_size=0 +ob_r=0 +ob_g=0 +ob_b=0 +ob_a=0 +ib_size=0 +ib_r=0 +ib_g=0 +ib_b=0 +ib_a=0 +nMotionVectorsX=12 +nMotionVectorsY=9 +mv_dx=0 +mv_dy=0 +mv_l=0.9 +mv_r=1 +mv_g=1 +mv_b=1 +mv_a=0 +b1n=0 +b2n=0 +b3n=0 +b1x=1 +b2x=1 +b3x=1 +b1ed=0 +per_frame_init_1=sway = 0; +per_frame_1=q30 = 60/max(fps, 15); +per_frame_2=q31 = aspectx; +per_frame_3=q32 = aspecty; +per_frame_4=sway = sway + (0.6 + 0.9*mid_att)/fps; +per_frame_5=dy = 0.035/fps; +per_frame_6=q1 = sway; +per_frame_7=q2 = time*0.045; +per_frame_8=q3 = 0.45 + 0.65*bass_att; +per_frame_9=q4 = treb_att; +per_frame_10=q5 = 0.6 + 0.4*sin(time*0.043); +warp_1=`shader_body +warp_2=`{ +warp_3=` float x = uv.x; +warp_4=` float n1 = tex2D(sampler_noise_hq, float2(x * 0.7 + q2 * 0.3, 0.31)).x; +warp_5=` float base = 0.55 + 0.05 * sin(x * 4.0 + q1) + 0.035 * sin(x * 9.0 - q1 * 1.4) + (n1 - 0.5) * 0.14 + 0.012 * sin(x * 26.0 - q1 * 3.0); +warp_6=` float h = base - uv.y; +warp_7=` float ray = tex2D(sampler_noise_hq, float2(x * 7.0 + q2, 0.73)).x; +warp_8=` float ray2 = tex2D(sampler_noise_hq, float2(x * 19.0 - q2 * 2.0, 0.11)).x; +warp_9=` ray = pow(ray, 3.0) * 1.6 + pow(ray2, 4.0) * 0.8; +warp_10=` float upper = exp(-max(h, 0.0) * 9.0) * (0.2 + ray); +warp_11=` float hem = exp(min(h, 0.0) * 90.0); +warp_12=` float curtain = upper * hem; +warp_13=` float3 green = float3(0.15, 1.0, 0.55); +warp_14=` float3 violet = float3(0.75, 0.25, 1.0); +warp_15=` float3 col = lerp(green, violet, saturate(h * 4.0 * q5)); +warp_16=` col = lerp(col, float3(1.0, 0.35, 0.5), saturate(n1 * 2.0 - 1.2)); +warp_17=` float sky = step(uv.y, 0.66); +warp_18=` ret = tex2D(sampler_main, uv).xyz * pow(0.955, q30); +warp_19=` ret += col * curtain * 0.032 * q3 * sky * q30; +warp_20=`} +comp_1=`sampler sampler_pw_noise_lq; +comp_2=`shader_body +comp_3=`{ +comp_4=` float hor = 0.68; +comp_5=` float below = step(hor, uv.y); +comp_6=` float d = uv.y - hor; +comp_7=` float rn = tex2D(sampler_noise_hq, float2(uv.x * 2.0 + time * 0.02, uv.y * 14.0 - time * 0.15)).x - 0.5; +comp_8=` float rip = rn * 0.012 + sin(uv.y * 90.0 - time * 1.3) * 0.0012; +comp_9=` float2 u = lerp(uv, float2(uv.x + rip * saturate(d * 12.0), hor - d * 1.25), below); +comp_10=` float m1 = tex2D(sampler_noise_hq, float2(u.x * 1.3, 0.2)).x; +comp_11=` float m2 = tex2D(sampler_noise_hq, float2(u.x * 4.7, 0.6)).x; +comp_12=` float ridge = hor - 0.02 - 0.075 * m1 - 0.012 * m2; +comp_13=` float land = saturate((u.y - ridge) * 400.0); +comp_14=` float3 a = tex2D(sampler_main, u).xyz; +comp_15=` float3 glow = GetBlur2(u) * 0.5 + GetBlur3(u) * 0.45; +comp_16=` float3 skycol = lerp(float3(0.01, 0.015, 0.05), float3(0.03, 0.06, 0.1), saturate((u.y - 0.2) * 2.0)); +comp_17=` float2 sp = u * texsize.xy / 512.0; +comp_18=` float4 st = tex2D(sampler_pw_noise_lq, sp); +comp_19=` float tw = 0.55 + 0.45 * sin(time * (1.3 + st.z * 4.0) + st.w * 30.0); +comp_20=` float star = saturate((st.x * st.y - 0.975) * 45.0) * tw * (0.6 + 0.5 * q4); +comp_21=` float3 s = skycol + a * 1.1 + glow + star * float3(0.85, 0.9, 1.0) * (1.0 - saturate(lum(a) * 3.0)); +comp_22=` float3 landcol = float3(0.006, 0.01, 0.02) + glow * 0.05; +comp_23=` s = lerp(s, landcol, land); +comp_24=` float fade = lerp(1.0, 0.55 * (1.0 - saturate(d * 2.2)), below); +comp_25=` ret = s * fade; +comp_26=` ret += float3(0.05, 0.12, 0.1) * exp(-abs(d) * 120.0) * (0.5 + 0.5 * lum(GetBlur3(float2(uv.x, 0.5))) * 4.0); +comp_27=` ret = 1.0 - exp(-ret * 1.6); +comp_28=`} diff --git a/presets/cayadev/CaYaDev - Prism Lattice.milk b/presets/cayadev/CaYaDev - Prism Lattice.milk index fec3929a..e018f0b7 100644 --- a/presets/cayadev/CaYaDev - Prism Lattice.milk +++ b/presets/cayadev/CaYaDev - Prism Lattice.milk @@ -1,194 +1,194 @@ -MILKDROP_PRESET_VERSION=201 -PSVERSION=3 -PSVERSION_WARP=3 -PSVERSION_COMP=3 -[preset00] -fRating=5 -fGammaAdj=1 -fDecay=1 -fVideoEchoZoom=1 -fVideoEchoAlpha=0 -nVideoEchoOrientation=0 -nWaveMode=0 -bAdditiveWaves=0 -bWaveDots=0 -bWaveThick=0 -bModWaveAlphaByVolume=0 -bMaximizeWaveColor=0 -bTexWrap=0 -bDarkenCenter=0 -bRedBlueStereo=0 -bBrighten=0 -bDarken=0 -bSolarize=0 -bInvert=0 -fWaveAlpha=0 -fWaveScale=1 -fWaveSmoothing=0.75 -fWaveParam=0 -fModWaveAlphaStart=0.75 -fModWaveAlphaEnd=0.95 -fWarpAnimSpeed=1 -fWarpScale=1 -fZoomExponent=1 -fShader=0 -zoom=1 -rot=0 -cx=0.5 -cy=0.5 -dx=0 -dy=0 -warp=0 -sx=1 -sy=1 -wave_r=1 -wave_g=1 -wave_b=1 -wave_x=0.5 -wave_y=0.5 -ob_size=0 -ob_r=0 -ob_g=0 -ob_b=0 -ob_a=0 -ib_size=0 -ib_r=0 -ib_g=0 -ib_b=0 -ib_a=0 -nMotionVectorsX=12 -nMotionVectorsY=9 -mv_dx=0 -mv_dy=0 -mv_l=0.9 -mv_r=1 -mv_g=1 -mv_b=1 -mv_a=0 -b1n=0 -b2n=0 -b3n=0 -b1x=1 -b2x=1 -b3x=1 -b1ed=0 -wavecode_0_enabled=1 -wavecode_0_samples=300 -wavecode_0_sep=0 -wavecode_0_bSpectrum=0 -wavecode_0_bUseDots=0 -wavecode_0_bDrawThick=0 -wavecode_0_bAdditive=1 -wavecode_0_scaling=1 -wavecode_0_smoothing=0.5 -wavecode_0_r=1 -wavecode_0_g=1 -wavecode_0_b=1 -wavecode_0_a=0.8 -wave_0_per_frame1=t1 = time*0.9; -wave_0_per_frame2=a = 0.8*min(1, q30); -wave_0_per_point1=an = sample*6.28318; -wave_0_per_point2=rr = 0.07 + value1*0.1; -wave_0_per_point3=x = 0.5 + 0.2*cos(t1)*q31 + rr*cos(an)*q31; -wave_0_per_point4=y = 0.5 + 0.2*sin(t1)*q32 + rr*sin(an)*q32; -wave_0_per_point5=r = 0; -wave_0_per_point6=g = 1; -wave_0_per_point7=b = 0; -shapecode_0_enabled=1 -shapecode_0_sides=6 -shapecode_0_additive=1 -shapecode_0_thickOutline=1 -shapecode_0_textured=0 -shapecode_0_num_inst=3 -shapecode_0_x=0.5 -shapecode_0_y=0.5 -shapecode_0_rad=0.2 -shapecode_0_ang=0 -shapecode_0_tex_ang=0 -shapecode_0_tex_zoom=1 -shapecode_0_r=0 -shapecode_0_g=0 -shapecode_0_b=0 -shapecode_0_a=0 -shapecode_0_r2=0 -shapecode_0_g2=1 -shapecode_0_b2=0 -shapecode_0_a2=0 -shapecode_0_border_r=1 -shapecode_0_border_g=0 -shapecode_0_border_b=0 -shapecode_0_border_a=1 -shape_0_per_frame1=rad = 0.08 + instance*0.09 + 0.05*bass_att*(1 - instance*0.3); -shape_0_per_frame2=ang = q2*(1 + instance*0.4)*if(equal(instance, 1), -1, 1); -shape_0_per_frame3=border_a = (0.3 + 0.6*min(1, max(bass - 0.9, 0)))*min(1, q30); -shapecode_1_enabled=1 -shapecode_1_sides=3 -shapecode_1_additive=1 -shapecode_1_thickOutline=0 -shapecode_1_textured=0 -shapecode_1_num_inst=3 -shapecode_1_x=0.5 -shapecode_1_y=0.5 -shapecode_1_rad=0.04 -shapecode_1_ang=0 -shapecode_1_tex_ang=0 -shapecode_1_tex_zoom=1 -shapecode_1_r=0 -shapecode_1_g=0 -shapecode_1_b=1 -shapecode_1_a=0.9 -shapecode_1_r2=0 -shapecode_1_g2=0 -shapecode_1_b2=1 -shapecode_1_a2=0 -shapecode_1_border_r=1 -shapecode_1_border_g=1 -shapecode_1_border_b=1 -shapecode_1_border_a=0 -shape_1_per_frame1=an = time*0.6 + instance*2.0944; -shape_1_per_frame2=x = 0.5 + 0.21*cos(an)*q31; -shape_1_per_frame3=y = 0.5 + 0.21*sin(an)*q32; -shape_1_per_frame4=ang = -an; -shape_1_per_frame5=rad = 0.02 + 0.03*treb_att; -shape_1_per_frame6=a = (0.3 + 0.6*min(1, treb_att))*min(1, q30); -per_frame_init_1=spin = 0; -per_frame_1=q30 = 60/max(fps, 15); -per_frame_2=q31 = aspectx; -per_frame_3=q32 = aspecty; -per_frame_4=spin = spin + (0.15 + 0.5*max(bass_att - 0.9, 0))/fps; -per_frame_5=zoom = 1.0 + (0.35 + 0.35*bass_att)/fps; -per_frame_6=rot = (0.10 + 0.08*sin(time*0.2))/fps; -per_frame_7=q1 = 6; -per_frame_8=q2 = spin; -per_frame_9=q3 = time*0.03; -per_frame_10=q4 = treb_att; -warp_1=`shader_body -warp_2=`{ -warp_3=` ret = tex2D(sampler_main, uv).xyz; -warp_4=` ret += (ret - GetBlur1(uv)) * 0.1 * q30; -warp_5=` ret = ret * pow(0.968, q30) - 0.003 * q30; -warp_6=`} -comp_1=`shader_body -comp_2=`{ -comp_3=` float2 p = (uv - 0.5) * aspect.xy; -comp_4=` float r = length(p); -comp_5=` float a = atan2(p.y, p.x) + q2 * 0.3; -comp_6=` float seg = 6.28318 / q1; -comp_7=` float k = frac(a / seg); -comp_8=` a = abs(k - 0.5) * seg; -comp_9=` float2 m = float2(cos(a), sin(a)) * r; -comp_10=` float2 uvk = 0.5 + m * aspect.zw; -comp_11=` float3 s = tex2D(sampler_fc_main, uvk).xyz; -comp_12=` float3 sb = GetBlur1(uvk); -comp_13=` float3 sb2 = GetBlur2(uvk); -comp_14=` float3 c1 = 0.55 + 0.45 * cos(6.28318 * (float3(0.0, 0.1, 0.2) + q3)); -comp_15=` float3 c2 = 0.55 + 0.45 * cos(6.28318 * (float3(0.5, 0.6, 0.7) + q3 + r * 0.6)); -comp_16=` float3 c3 = float3(0.95, 0.97, 1.0); -comp_17=` float fr = s.x * 1.2 + saturate(s.x - sb.x) * 2.0; -comp_18=` float scope = s.y * 1.1 + saturate(s.y - sb.y) * 2.0; -comp_19=` float tri = s.z; -comp_20=` ret = c1 * fr + c2 * scope + c3 * tri * 0.8; -comp_21=` ret += (c1 * sb2.x + c2 * sb2.y + c3 * sb2.z) * (0.5 + 0.3 * q4); -comp_22=` ret = 1.0 - exp(-ret * 1.4); -comp_23=` ret *= saturate(1.3 - r * 1.2); -comp_24=`} +MILKDROP_PRESET_VERSION=201 +PSVERSION=3 +PSVERSION_WARP=3 +PSVERSION_COMP=3 +[preset00] +fRating=5 +fGammaAdj=1 +fDecay=1 +fVideoEchoZoom=1 +fVideoEchoAlpha=0 +nVideoEchoOrientation=0 +nWaveMode=0 +bAdditiveWaves=0 +bWaveDots=0 +bWaveThick=0 +bModWaveAlphaByVolume=0 +bMaximizeWaveColor=0 +bTexWrap=0 +bDarkenCenter=0 +bRedBlueStereo=0 +bBrighten=0 +bDarken=0 +bSolarize=0 +bInvert=0 +fWaveAlpha=0 +fWaveScale=1 +fWaveSmoothing=0.75 +fWaveParam=0 +fModWaveAlphaStart=0.75 +fModWaveAlphaEnd=0.95 +fWarpAnimSpeed=1 +fWarpScale=1 +fZoomExponent=1 +fShader=0 +zoom=1 +rot=0 +cx=0.5 +cy=0.5 +dx=0 +dy=0 +warp=0 +sx=1 +sy=1 +wave_r=1 +wave_g=1 +wave_b=1 +wave_x=0.5 +wave_y=0.5 +ob_size=0 +ob_r=0 +ob_g=0 +ob_b=0 +ob_a=0 +ib_size=0 +ib_r=0 +ib_g=0 +ib_b=0 +ib_a=0 +nMotionVectorsX=12 +nMotionVectorsY=9 +mv_dx=0 +mv_dy=0 +mv_l=0.9 +mv_r=1 +mv_g=1 +mv_b=1 +mv_a=0 +b1n=0 +b2n=0 +b3n=0 +b1x=1 +b2x=1 +b3x=1 +b1ed=0 +wavecode_0_enabled=1 +wavecode_0_samples=300 +wavecode_0_sep=0 +wavecode_0_bSpectrum=0 +wavecode_0_bUseDots=0 +wavecode_0_bDrawThick=0 +wavecode_0_bAdditive=1 +wavecode_0_scaling=1 +wavecode_0_smoothing=0.5 +wavecode_0_r=1 +wavecode_0_g=1 +wavecode_0_b=1 +wavecode_0_a=0.8 +wave_0_per_frame1=t1 = time*0.9; +wave_0_per_frame2=a = 0.8*min(1, q30); +wave_0_per_point1=an = sample*6.28318; +wave_0_per_point2=rr = 0.07 + value1*0.1; +wave_0_per_point3=x = 0.5 + 0.2*cos(t1)*q31 + rr*cos(an)*q31; +wave_0_per_point4=y = 0.5 + 0.2*sin(t1)*q32 + rr*sin(an)*q32; +wave_0_per_point5=r = 0; +wave_0_per_point6=g = 1; +wave_0_per_point7=b = 0; +shapecode_0_enabled=1 +shapecode_0_sides=6 +shapecode_0_additive=1 +shapecode_0_thickOutline=1 +shapecode_0_textured=0 +shapecode_0_num_inst=3 +shapecode_0_x=0.5 +shapecode_0_y=0.5 +shapecode_0_rad=0.2 +shapecode_0_ang=0 +shapecode_0_tex_ang=0 +shapecode_0_tex_zoom=1 +shapecode_0_r=0 +shapecode_0_g=0 +shapecode_0_b=0 +shapecode_0_a=0 +shapecode_0_r2=0 +shapecode_0_g2=1 +shapecode_0_b2=0 +shapecode_0_a2=0 +shapecode_0_border_r=1 +shapecode_0_border_g=0 +shapecode_0_border_b=0 +shapecode_0_border_a=1 +shape_0_per_frame1=rad = 0.08 + instance*0.09 + 0.05*bass_att*(1 - instance*0.3); +shape_0_per_frame2=ang = q2*(1 + instance*0.4)*if(equal(instance, 1), -1, 1); +shape_0_per_frame3=border_a = (0.3 + 0.6*min(1, max(bass - 0.9, 0)))*min(1, q30); +shapecode_1_enabled=1 +shapecode_1_sides=3 +shapecode_1_additive=1 +shapecode_1_thickOutline=0 +shapecode_1_textured=0 +shapecode_1_num_inst=3 +shapecode_1_x=0.5 +shapecode_1_y=0.5 +shapecode_1_rad=0.04 +shapecode_1_ang=0 +shapecode_1_tex_ang=0 +shapecode_1_tex_zoom=1 +shapecode_1_r=0 +shapecode_1_g=0 +shapecode_1_b=1 +shapecode_1_a=0.9 +shapecode_1_r2=0 +shapecode_1_g2=0 +shapecode_1_b2=1 +shapecode_1_a2=0 +shapecode_1_border_r=1 +shapecode_1_border_g=1 +shapecode_1_border_b=1 +shapecode_1_border_a=0 +shape_1_per_frame1=an = time*0.6 + instance*2.0944; +shape_1_per_frame2=x = 0.5 + 0.21*cos(an)*q31; +shape_1_per_frame3=y = 0.5 + 0.21*sin(an)*q32; +shape_1_per_frame4=ang = -an; +shape_1_per_frame5=rad = 0.02 + 0.03*treb_att; +shape_1_per_frame6=a = (0.3 + 0.6*min(1, treb_att))*min(1, q30); +per_frame_init_1=spin = 0; +per_frame_1=q30 = 60/max(fps, 15); +per_frame_2=q31 = aspectx; +per_frame_3=q32 = aspecty; +per_frame_4=spin = spin + (0.15 + 0.5*max(bass_att - 0.9, 0))/fps; +per_frame_5=zoom = 1.0 + (0.35 + 0.35*bass_att)/fps; +per_frame_6=rot = (0.10 + 0.08*sin(time*0.2))/fps; +per_frame_7=q1 = 6; +per_frame_8=q2 = spin; +per_frame_9=q3 = time*0.03; +per_frame_10=q4 = treb_att; +warp_1=`shader_body +warp_2=`{ +warp_3=` ret = tex2D(sampler_main, uv).xyz; +warp_4=` ret += (ret - GetBlur1(uv)) * 0.1 * q30; +warp_5=` ret = ret * pow(0.968, q30) - 0.003 * q30; +warp_6=`} +comp_1=`shader_body +comp_2=`{ +comp_3=` float2 p = (uv - 0.5) * aspect.xy; +comp_4=` float r = length(p); +comp_5=` float a = atan2(p.y, p.x) + q2 * 0.3; +comp_6=` float seg = 6.28318 / q1; +comp_7=` float k = frac(a / seg); +comp_8=` a = abs(k - 0.5) * seg; +comp_9=` float2 m = float2(cos(a), sin(a)) * r; +comp_10=` float2 uvk = 0.5 + m * aspect.zw; +comp_11=` float3 s = tex2D(sampler_fc_main, uvk).xyz; +comp_12=` float3 sb = GetBlur1(uvk); +comp_13=` float3 sb2 = GetBlur2(uvk); +comp_14=` float3 c1 = 0.55 + 0.45 * cos(6.28318 * (float3(0.0, 0.1, 0.2) + q3)); +comp_15=` float3 c2 = 0.55 + 0.45 * cos(6.28318 * (float3(0.5, 0.6, 0.7) + q3 + r * 0.6)); +comp_16=` float3 c3 = float3(0.95, 0.97, 1.0); +comp_17=` float fr = s.x * 1.2 + saturate(s.x - sb.x) * 2.0; +comp_18=` float scope = s.y * 1.1 + saturate(s.y - sb.y) * 2.0; +comp_19=` float tri = s.z; +comp_20=` ret = c1 * fr + c2 * scope + c3 * tri * 0.8; +comp_21=` ret += (c1 * sb2.x + c2 * sb2.y + c3 * sb2.z) * (0.5 + 0.3 * q4); +comp_22=` ret = 1.0 - exp(-ret * 1.4); +comp_23=` ret *= saturate(1.3 - r * 1.2); +comp_24=`} diff --git a/presets/cayadev/CaYaDev - Twelve Moons.milk b/presets/cayadev/CaYaDev - Twelve Moons.milk index 0fd8fde2..5231dd41 100644 --- a/presets/cayadev/CaYaDev - Twelve Moons.milk +++ b/presets/cayadev/CaYaDev - Twelve Moons.milk @@ -1,494 +1,494 @@ -MILKDROP_PRESET_VERSION=201 -PSVERSION=3 -PSVERSION_WARP=3 -PSVERSION_COMP=3 -[preset00] -fRating=5 -fGammaAdj=1 -fDecay=1 -fVideoEchoZoom=1 -fVideoEchoAlpha=0 -nVideoEchoOrientation=0 -nWaveMode=0 -bAdditiveWaves=0 -bWaveDots=0 -bWaveThick=0 -bModWaveAlphaByVolume=0 -bMaximizeWaveColor=0 -bTexWrap=0 -bDarkenCenter=0 -bRedBlueStereo=0 -bBrighten=0 -bDarken=0 -bSolarize=0 -bInvert=0 -fWaveAlpha=0 -fWaveScale=1 -fWaveSmoothing=0.75 -fWaveParam=0 -fModWaveAlphaStart=0.75 -fModWaveAlphaEnd=0.95 -fWarpAnimSpeed=1 -fWarpScale=1 -fZoomExponent=1 -fShader=0 -zoom=1 -rot=0 -cx=0.5 -cy=0.5 -dx=0 -dy=0 -warp=0 -sx=1 -sy=1 -wave_r=1 -wave_g=1 -wave_b=1 -wave_x=0.5 -wave_y=0.5 -ob_size=0 -ob_r=0 -ob_g=0 -ob_b=0 -ob_a=0 -ib_size=0 -ib_r=0 -ib_g=0 -ib_b=0 -ib_a=0 -nMotionVectorsX=12 -nMotionVectorsY=9 -mv_dx=0 -mv_dy=0 -mv_l=0.9 -mv_r=1 -mv_g=1 -mv_b=1 -mv_a=0 -b1n=0 -b2n=0 -b3n=0 -b1x=1 -b2x=1 -b3x=1 -b1ed=0 -wavecode_0_enabled=1 -wavecode_0_samples=96 -wavecode_0_sep=0 -wavecode_0_bSpectrum=0 -wavecode_0_bUseDots=0 -wavecode_0_bDrawThick=0 -wavecode_0_bAdditive=1 -wavecode_0_scaling=1 -wavecode_0_smoothing=0.6 -wavecode_0_r=1 -wavecode_0_g=1 -wavecode_0_b=1 -wavecode_0_a=0.9 -wave_0_per_frame1=t1 = q5; -wave_0_per_frame2=a = 0.9*min(1, q30); -wave_0_per_frame3=t2 = 0.170; -wave_0_per_frame4=t3 = 0.010; -wave_0_per_frame5=t4 = 0.55 + 0.45*sin(t1); -wave_0_per_point1=an = sample*6.28318; -wave_0_per_point2=cx = 0.5 + t2*cos(t1)*q31; -wave_0_per_point3=cy = 0.5 - t2*sin(t1)*0.32*q32; -wave_0_per_point4=rr = t3*(1 + value1*2.2)*(0.75 + 0.35*t4); -wave_0_per_point5=x = cx + rr*cos(an)*q31; -wave_0_per_point6=y = cy + rr*sin(an)*q32; -wave_0_per_point7=r = 1*t4; -wave_0_per_point8=g = 0.55*t4; -wave_0_per_point9=b = 0.2*t4; -wavecode_1_enabled=1 -wavecode_1_samples=96 -wavecode_1_sep=0 -wavecode_1_bSpectrum=0 -wavecode_1_bUseDots=0 -wavecode_1_bDrawThick=0 -wavecode_1_bAdditive=1 -wavecode_1_scaling=1 -wavecode_1_smoothing=0.6 -wavecode_1_r=1 -wavecode_1_g=1 -wavecode_1_b=1 -wavecode_1_a=0.9 -wave_1_per_frame1=t1 = q6; -wave_1_per_frame2=a = 0.9*min(1, q30); -wave_1_per_frame3=t2 = 0.192; -wave_1_per_frame4=t3 = 0.014; -wave_1_per_frame5=t4 = 0.55 + 0.45*sin(t1); -wave_1_per_point1=an = sample*6.28318; -wave_1_per_point2=cx = 0.5 + t2*cos(t1)*q31; -wave_1_per_point3=cy = 0.5 - t2*sin(t1)*0.32*q32; -wave_1_per_point4=rr = t3*(1 + value1*2.2)*(0.75 + 0.35*t4); -wave_1_per_point5=x = cx + rr*cos(an)*q31; -wave_1_per_point6=y = cy + rr*sin(an)*q32; -wave_1_per_point7=r = 0.3*t4; -wave_1_per_point8=g = 0.8*t4; -wave_1_per_point9=b = 1*t4; -wavecode_2_enabled=1 -wavecode_2_samples=96 -wavecode_2_sep=0 -wavecode_2_bSpectrum=0 -wavecode_2_bUseDots=0 -wavecode_2_bDrawThick=0 -wavecode_2_bAdditive=1 -wavecode_2_scaling=1 -wavecode_2_smoothing=0.6 -wavecode_2_r=1 -wavecode_2_g=1 -wavecode_2_b=1 -wavecode_2_a=0.9 -wave_2_per_frame1=t1 = q7; -wave_2_per_frame2=a = 0.9*min(1, q30); -wave_2_per_frame3=t2 = 0.214; -wave_2_per_frame4=t3 = 0.018; -wave_2_per_frame5=t4 = 0.55 + 0.45*sin(t1); -wave_2_per_point1=an = sample*6.28318; -wave_2_per_point2=cx = 0.5 + t2*cos(t1)*q31; -wave_2_per_point3=cy = 0.5 - t2*sin(t1)*0.32*q32; -wave_2_per_point4=rr = t3*(1 + value1*2.2)*(0.75 + 0.35*t4); -wave_2_per_point5=x = cx + rr*cos(an)*q31; -wave_2_per_point6=y = cy + rr*sin(an)*q32; -wave_2_per_point7=r = 1*t4; -wave_2_per_point8=g = 0.3*t4; -wave_2_per_point9=b = 0.55*t4; -wavecode_3_enabled=1 -wavecode_3_samples=96 -wavecode_3_sep=0 -wavecode_3_bSpectrum=0 -wavecode_3_bUseDots=0 -wavecode_3_bDrawThick=0 -wavecode_3_bAdditive=1 -wavecode_3_scaling=1 -wavecode_3_smoothing=0.6 -wavecode_3_r=1 -wavecode_3_g=1 -wavecode_3_b=1 -wavecode_3_a=0.9 -wave_3_per_frame1=t1 = q8; -wave_3_per_frame2=a = 0.9*min(1, q30); -wave_3_per_frame3=t2 = 0.236; -wave_3_per_frame4=t3 = 0.022; -wave_3_per_frame5=t4 = 0.55 + 0.45*sin(t1); -wave_3_per_point1=an = sample*6.28318; -wave_3_per_point2=cx = 0.5 + t2*cos(t1)*q31; -wave_3_per_point3=cy = 0.5 - t2*sin(t1)*0.32*q32; -wave_3_per_point4=rr = t3*(1 + value1*2.2)*(0.75 + 0.35*t4); -wave_3_per_point5=x = cx + rr*cos(an)*q31; -wave_3_per_point6=y = cy + rr*sin(an)*q32; -wave_3_per_point7=r = 0.55*t4; -wave_3_per_point8=g = 1*t4; -wave_3_per_point9=b = 0.5*t4; -wavecode_4_enabled=1 -wavecode_4_samples=96 -wavecode_4_sep=0 -wavecode_4_bSpectrum=0 -wavecode_4_bUseDots=0 -wavecode_4_bDrawThick=0 -wavecode_4_bAdditive=1 -wavecode_4_scaling=1 -wavecode_4_smoothing=0.6 -wavecode_4_r=1 -wavecode_4_g=1 -wavecode_4_b=1 -wavecode_4_a=0.9 -wave_4_per_frame1=t1 = q33; -wave_4_per_frame2=a = 0.9*min(1, q30); -wave_4_per_frame3=t2 = 0.258; -wave_4_per_frame4=t3 = 0.010; -wave_4_per_frame5=t4 = 0.55 + 0.45*sin(t1); -wave_4_per_point1=an = sample*6.28318; -wave_4_per_point2=cx = 0.5 + t2*cos(t1)*q31; -wave_4_per_point3=cy = 0.5 - t2*sin(t1)*0.32*q32; -wave_4_per_point4=rr = t3*(1 + value1*2.2)*(0.75 + 0.35*t4); -wave_4_per_point5=x = cx + rr*cos(an)*q31; -wave_4_per_point6=y = cy + rr*sin(an)*q32; -wave_4_per_point7=r = 0.8*t4; -wave_4_per_point8=g = 0.5*t4; -wave_4_per_point9=b = 1*t4; -wavecode_5_enabled=1 -wavecode_5_samples=96 -wavecode_5_sep=0 -wavecode_5_bSpectrum=0 -wavecode_5_bUseDots=0 -wavecode_5_bDrawThick=0 -wavecode_5_bAdditive=1 -wavecode_5_scaling=1 -wavecode_5_smoothing=0.6 -wavecode_5_r=1 -wavecode_5_g=1 -wavecode_5_b=1 -wavecode_5_a=0.9 -wave_5_per_frame1=t1 = q34; -wave_5_per_frame2=a = 0.9*min(1, q30); -wave_5_per_frame3=t2 = 0.280; -wave_5_per_frame4=t3 = 0.014; -wave_5_per_frame5=t4 = 0.55 + 0.45*sin(t1); -wave_5_per_point1=an = sample*6.28318; -wave_5_per_point2=cx = 0.5 + t2*cos(t1)*q31; -wave_5_per_point3=cy = 0.5 - t2*sin(t1)*0.32*q32; -wave_5_per_point4=rr = t3*(1 + value1*2.2)*(0.75 + 0.35*t4); -wave_5_per_point5=x = cx + rr*cos(an)*q31; -wave_5_per_point6=y = cy + rr*sin(an)*q32; -wave_5_per_point7=r = 1*t4; -wave_5_per_point8=g = 0.85*t4; -wave_5_per_point9=b = 0.35*t4; -wavecode_6_enabled=1 -wavecode_6_samples=96 -wavecode_6_sep=0 -wavecode_6_bSpectrum=0 -wavecode_6_bUseDots=0 -wavecode_6_bDrawThick=0 -wavecode_6_bAdditive=1 -wavecode_6_scaling=1 -wavecode_6_smoothing=0.6 -wavecode_6_r=1 -wavecode_6_g=1 -wavecode_6_b=1 -wavecode_6_a=0.9 -wave_6_per_frame1=t1 = q35; -wave_6_per_frame2=a = 0.9*min(1, q30); -wave_6_per_frame3=t2 = 0.302; -wave_6_per_frame4=t3 = 0.018; -wave_6_per_frame5=t4 = 0.55 + 0.45*sin(t1); -wave_6_per_point1=an = sample*6.28318; -wave_6_per_point2=cx = 0.5 + t2*cos(t1)*q31; -wave_6_per_point3=cy = 0.5 - t2*sin(t1)*0.32*q32; -wave_6_per_point4=rr = t3*(1 + value1*2.2)*(0.75 + 0.35*t4); -wave_6_per_point5=x = cx + rr*cos(an)*q31; -wave_6_per_point6=y = cy + rr*sin(an)*q32; -wave_6_per_point7=r = 0.25*t4; -wave_6_per_point8=g = 0.55*t4; -wave_6_per_point9=b = 1*t4; -wavecode_7_enabled=1 -wavecode_7_samples=96 -wavecode_7_sep=0 -wavecode_7_bSpectrum=0 -wavecode_7_bUseDots=0 -wavecode_7_bDrawThick=0 -wavecode_7_bAdditive=1 -wavecode_7_scaling=1 -wavecode_7_smoothing=0.6 -wavecode_7_r=1 -wavecode_7_g=1 -wavecode_7_b=1 -wavecode_7_a=0.9 -wave_7_per_frame1=t1 = q36; -wave_7_per_frame2=a = 0.9*min(1, q30); -wave_7_per_frame3=t2 = 0.324; -wave_7_per_frame4=t3 = 0.022; -wave_7_per_frame5=t4 = 0.55 + 0.45*sin(t1); -wave_7_per_point1=an = sample*6.28318; -wave_7_per_point2=cx = 0.5 + t2*cos(t1)*q31; -wave_7_per_point3=cy = 0.5 - t2*sin(t1)*0.32*q32; -wave_7_per_point4=rr = t3*(1 + value1*2.2)*(0.75 + 0.35*t4); -wave_7_per_point5=x = cx + rr*cos(an)*q31; -wave_7_per_point6=y = cy + rr*sin(an)*q32; -wave_7_per_point7=r = 1*t4; -wave_7_per_point8=g = 0.45*t4; -wave_7_per_point9=b = 0.35*t4; -wavecode_8_enabled=1 -wavecode_8_samples=96 -wavecode_8_sep=0 -wavecode_8_bSpectrum=0 -wavecode_8_bUseDots=0 -wavecode_8_bDrawThick=0 -wavecode_8_bAdditive=1 -wavecode_8_scaling=1 -wavecode_8_smoothing=0.6 -wavecode_8_r=1 -wavecode_8_g=1 -wavecode_8_b=1 -wavecode_8_a=0.9 -wave_8_per_frame1=t1 = q37; -wave_8_per_frame2=a = 0.9*min(1, q30); -wave_8_per_frame3=t2 = 0.346; -wave_8_per_frame4=t3 = 0.010; -wave_8_per_frame5=t4 = 0.55 + 0.45*sin(t1); -wave_8_per_point1=an = sample*6.28318; -wave_8_per_point2=cx = 0.5 + t2*cos(t1)*q31; -wave_8_per_point3=cy = 0.5 - t2*sin(t1)*0.32*q32; -wave_8_per_point4=rr = t3*(1 + value1*2.2)*(0.75 + 0.35*t4); -wave_8_per_point5=x = cx + rr*cos(an)*q31; -wave_8_per_point6=y = cy + rr*sin(an)*q32; -wave_8_per_point7=r = 0.4*t4; -wave_8_per_point8=g = 1*t4; -wave_8_per_point9=b = 0.85*t4; -wavecode_9_enabled=1 -wavecode_9_samples=96 -wavecode_9_sep=0 -wavecode_9_bSpectrum=0 -wavecode_9_bUseDots=0 -wavecode_9_bDrawThick=0 -wavecode_9_bAdditive=1 -wavecode_9_scaling=1 -wavecode_9_smoothing=0.6 -wavecode_9_r=1 -wavecode_9_g=1 -wavecode_9_b=1 -wavecode_9_a=0.9 -wave_9_per_frame1=t1 = q38; -wave_9_per_frame2=a = 0.9*min(1, q30); -wave_9_per_frame3=t2 = 0.368; -wave_9_per_frame4=t3 = 0.014; -wave_9_per_frame5=t4 = 0.55 + 0.45*sin(t1); -wave_9_per_point1=an = sample*6.28318; -wave_9_per_point2=cx = 0.5 + t2*cos(t1)*q31; -wave_9_per_point3=cy = 0.5 - t2*sin(t1)*0.32*q32; -wave_9_per_point4=rr = t3*(1 + value1*2.2)*(0.75 + 0.35*t4); -wave_9_per_point5=x = cx + rr*cos(an)*q31; -wave_9_per_point6=y = cy + rr*sin(an)*q32; -wave_9_per_point7=r = 1*t4; -wave_9_per_point8=g = 0.6*t4; -wave_9_per_point9=b = 0.9*t4; -wavecode_10_enabled=1 -wavecode_10_samples=96 -wavecode_10_sep=0 -wavecode_10_bSpectrum=0 -wavecode_10_bUseDots=0 -wavecode_10_bDrawThick=0 -wavecode_10_bAdditive=1 -wavecode_10_scaling=1 -wavecode_10_smoothing=0.6 -wavecode_10_r=1 -wavecode_10_g=1 -wavecode_10_b=1 -wavecode_10_a=0.9 -wave_10_per_frame1=t1 = q39; -wave_10_per_frame2=a = 0.9*min(1, q30); -wave_10_per_frame3=t2 = 0.390; -wave_10_per_frame4=t3 = 0.018; -wave_10_per_frame5=t4 = 0.55 + 0.45*sin(t1); -wave_10_per_point1=an = sample*6.28318; -wave_10_per_point2=cx = 0.5 + t2*cos(t1)*q31; -wave_10_per_point3=cy = 0.5 - t2*sin(t1)*0.32*q32; -wave_10_per_point4=rr = t3*(1 + value1*2.2)*(0.75 + 0.35*t4); -wave_10_per_point5=x = cx + rr*cos(an)*q31; -wave_10_per_point6=y = cy + rr*sin(an)*q32; -wave_10_per_point7=r = 0.7*t4; -wave_10_per_point8=g = 0.85*t4; -wave_10_per_point9=b = 1*t4; -wavecode_11_enabled=1 -wavecode_11_samples=96 -wavecode_11_sep=0 -wavecode_11_bSpectrum=0 -wavecode_11_bUseDots=0 -wavecode_11_bDrawThick=0 -wavecode_11_bAdditive=1 -wavecode_11_scaling=1 -wavecode_11_smoothing=0.6 -wavecode_11_r=1 -wavecode_11_g=1 -wavecode_11_b=1 -wavecode_11_a=0.9 -wave_11_per_frame1=t1 = q40; -wave_11_per_frame2=a = 0.9*min(1, q30); -wave_11_per_frame3=t2 = 0.412; -wave_11_per_frame4=t3 = 0.022; -wave_11_per_frame5=t4 = 0.55 + 0.45*sin(t1); -wave_11_per_point1=an = sample*6.28318; -wave_11_per_point2=cx = 0.5 + t2*cos(t1)*q31; -wave_11_per_point3=cy = 0.5 - t2*sin(t1)*0.32*q32; -wave_11_per_point4=rr = t3*(1 + value1*2.2)*(0.75 + 0.35*t4); -wave_11_per_point5=x = cx + rr*cos(an)*q31; -wave_11_per_point6=y = cy + rr*sin(an)*q32; -wave_11_per_point7=r = 1*t4; -wave_11_per_point8=g = 0.75*t4; -wave_11_per_point9=b = 0.5*t4; -per_frame_init_1=ph0 = 0; -per_frame_init_2=ph1 = 0; -per_frame_init_3=ph2 = 0; -per_frame_init_4=ph3 = 0; -per_frame_init_5=ph4 = 0; -per_frame_init_6=ph5 = 0; -per_frame_init_7=ph6 = 0; -per_frame_init_8=ph7 = 0; -per_frame_init_9=ph8 = 0; -per_frame_init_10=ph9 = 0; -per_frame_init_11=ph10 = 0; -per_frame_init_12=ph11 = 0; -per_frame_1=q30 = 60/max(fps, 15); -per_frame_2=q31 = aspectx; -per_frame_3=q32 = aspecty; -per_frame_4=q1 = time*0.03; -per_frame_5=q2 = 0.6 + 0.5*bass_att; -per_frame_6=q3 = treb_att; -per_frame_7=q4 = time*0.004; -per_frame_8=ph0 = ph0 + 0.9000*(0.6 + 0.4*mid_att)/fps; -per_frame_9=q5 = ph0 + 0.0000; -per_frame_10=ph1 = ph1 + 0.6278*(0.6 + 0.4*mid_att)/fps; -per_frame_11=q6 = ph1 + 2.4000; -per_frame_12=ph2 = ph2 + 0.4761*(0.6 + 0.4*mid_att)/fps; -per_frame_13=q7 = ph2 + 4.7999; -per_frame_14=ph3 = ph3 + 0.3803*(0.6 + 0.4*mid_att)/fps; -per_frame_15=q8 = ph3 + 7.1999; -per_frame_16=ph4 = ph4 + 0.3148*(0.6 + 0.4*mid_att)/fps; -per_frame_17=q33 = ph4 + 9.5998; -per_frame_18=ph5 = ph5 + 0.2673*(0.6 + 0.4*mid_att)/fps; -per_frame_19=q34 = ph5 + 11.9998; -per_frame_20=ph6 = ph6 + 0.2315*(0.6 + 0.4*mid_att)/fps; -per_frame_21=q35 = ph6 + 14.3998; -per_frame_22=ph7 = ph7 + 0.2036*(0.6 + 0.4*mid_att)/fps; -per_frame_23=q36 = ph7 + 16.7997; -per_frame_24=ph8 = ph8 + 0.1813*(0.6 + 0.4*mid_att)/fps; -per_frame_25=q37 = ph8 + 19.1997; -per_frame_26=ph9 = ph9 + 0.1631*(0.6 + 0.4*mid_att)/fps; -per_frame_27=q38 = ph9 + 21.5996; -per_frame_28=ph10 = ph10 + 0.1480*(0.6 + 0.4*mid_att)/fps; -per_frame_29=q39 = ph10 + 23.9996; -per_frame_30=ph11 = ph11 + 0.1353*(0.6 + 0.4*mid_att)/fps; -per_frame_31=q40 = ph11 + 26.3996; -warp_1=`shader_body -warp_2=`{ -warp_3=` float k = pow(0.94, q30); -warp_4=` ret = lerp(tex2D(sampler_main, uv).xyz, GetBlur1(uv), 0.36 * min(1.0, q30)) * k; -warp_5=` ret = ret - 0.002 * q30; -warp_6=`} -comp_1=`sampler sampler_pw_noise_lq; -comp_2=`shader_body -comp_3=`{ -comp_4=` float2 p = (uv - 0.5) * aspect.xy; -comp_5=` float R = 0.12; -comp_6=` float r = length(p); -comp_7=` float3 trails = tex2D(sampler_main, uv).xyz; -comp_8=` float3 tglow = GetBlur1(uv) * 0.8 + GetBlur2(uv) * 0.6; -comp_9=` float2 sp = uv * texsize.xy / 512.0; -comp_10=` float4 st = tex2D(sampler_pw_noise_lq, sp); -comp_11=` float tw = 0.55 + 0.45 * sin(time * (1.3 + st.z * 4.0) + st.w * 30.0); -comp_12=` float star = saturate((st.x * st.y - 0.975) * 45.0) * tw * (0.5 + 0.5 * q3); -comp_13=` float3 bg = lerp(float3(0.01, 0.01, 0.03), float3(0.04, 0.02, 0.06), saturate(1.0 - r * 1.5)); -comp_14=` bg += tex2D(sampler_noise_hq, uv * 0.6 + q4).x * float3(0.03, 0.015, 0.05); -comp_15=` float3 col = bg + star * float3(0.85, 0.9, 1.0); -comp_16=` float2 e = p / float2(1.0, 0.32); -comp_17=` float er = length(e); -comp_18=` float band = saturate((er - 0.16) * 200.0) * saturate((0.28 - er) * 200.0); -comp_19=` float gaps = tex2D(sampler_noise_hq, float2(er * 2.2, 0.5)).x; -comp_20=` float3 ringc = lerp(float3(0.75, 0.62, 0.45), float3(0.95, 0.88, 0.75), gaps) * (0.35 + 0.65 * smoothstep(0.3, 0.7, gaps)); -comp_21=` float ringa = band * 0.85; -comp_22=` float behind = step(p.y, 0.0); -comp_23=` col = lerp(col, ringc * 0.8, ringa * behind); -comp_24=` float pm = saturate((R - r) * 400.0); -comp_25=` float z = sqrt(saturate(1.0 - (r * r) / (R * R))); -comp_26=` float3 n = float3(p / R, z); -comp_27=` float lat = n.y; -comp_28=` float lon = atan2(n.x, z) * 0.3 + q1; -comp_29=` float bands = tex2D(sampler_noise_hq, float2(lon * 0.5, lat * 0.6 + 0.3)).x; -comp_30=` float bands2 = tex2D(sampler_noise_hq, float2(lon * 1.5, lat * 2.0 + 0.7)).x; -comp_31=` float stripe = sin(lat * 11.0 + bands * 2.5 + bands2 * 0.8) * 0.5 + 0.5; -comp_32=` float3 gas = lerp(float3(0.7, 0.38, 0.2), float3(0.98, 0.88, 0.7), stripe); -comp_33=` gas = lerp(gas, float3(0.85, 0.55, 0.35), saturate(sin(lat * 3.0 + 1.0)) * 0.4); -comp_34=` float storm = exp(-dot(n.xy - float2(0.35, 0.25), n.xy - float2(0.35, 0.25)) * 60.0); -comp_35=` gas = lerp(gas, float3(0.8, 0.35, 0.25), storm * 0.7); -comp_36=` float3 L = normalize(float3(-0.6, -0.35, 0.7)); -comp_37=` float diff = saturate(dot(n, L)); -comp_38=` float3 planet = gas * (0.05 + 1.05 * pow(diff, 0.8)); -comp_39=` planet += float3(0.3, 0.55, 1.0) * pow(1.0 - z, 3.0) * 0.6 * q2; -comp_40=` col = lerp(col, planet, pm); -comp_41=` col = lerp(col, ringc, ringa * (1.0 - behind)); -comp_42=` float atm = exp(-pow((r - R) * 60.0, 2.0)) * (1.0 - pm); -comp_43=` col += float3(0.35, 0.6, 1.0) * atm * 0.5 * q2; -comp_44=` float hide = 1.0 - pm * behind; -comp_45=` col += (trails * 1.2 + tglow) * hide; -comp_46=` ret = 1.0 - exp(-col * 1.5); -comp_47=`} +MILKDROP_PRESET_VERSION=201 +PSVERSION=3 +PSVERSION_WARP=3 +PSVERSION_COMP=3 +[preset00] +fRating=5 +fGammaAdj=1 +fDecay=1 +fVideoEchoZoom=1 +fVideoEchoAlpha=0 +nVideoEchoOrientation=0 +nWaveMode=0 +bAdditiveWaves=0 +bWaveDots=0 +bWaveThick=0 +bModWaveAlphaByVolume=0 +bMaximizeWaveColor=0 +bTexWrap=0 +bDarkenCenter=0 +bRedBlueStereo=0 +bBrighten=0 +bDarken=0 +bSolarize=0 +bInvert=0 +fWaveAlpha=0 +fWaveScale=1 +fWaveSmoothing=0.75 +fWaveParam=0 +fModWaveAlphaStart=0.75 +fModWaveAlphaEnd=0.95 +fWarpAnimSpeed=1 +fWarpScale=1 +fZoomExponent=1 +fShader=0 +zoom=1 +rot=0 +cx=0.5 +cy=0.5 +dx=0 +dy=0 +warp=0 +sx=1 +sy=1 +wave_r=1 +wave_g=1 +wave_b=1 +wave_x=0.5 +wave_y=0.5 +ob_size=0 +ob_r=0 +ob_g=0 +ob_b=0 +ob_a=0 +ib_size=0 +ib_r=0 +ib_g=0 +ib_b=0 +ib_a=0 +nMotionVectorsX=12 +nMotionVectorsY=9 +mv_dx=0 +mv_dy=0 +mv_l=0.9 +mv_r=1 +mv_g=1 +mv_b=1 +mv_a=0 +b1n=0 +b2n=0 +b3n=0 +b1x=1 +b2x=1 +b3x=1 +b1ed=0 +wavecode_0_enabled=1 +wavecode_0_samples=96 +wavecode_0_sep=0 +wavecode_0_bSpectrum=0 +wavecode_0_bUseDots=0 +wavecode_0_bDrawThick=0 +wavecode_0_bAdditive=1 +wavecode_0_scaling=1 +wavecode_0_smoothing=0.6 +wavecode_0_r=1 +wavecode_0_g=1 +wavecode_0_b=1 +wavecode_0_a=0.9 +wave_0_per_frame1=t1 = q5; +wave_0_per_frame2=a = 0.9*min(1, q30); +wave_0_per_frame3=t2 = 0.170; +wave_0_per_frame4=t3 = 0.010; +wave_0_per_frame5=t4 = 0.55 + 0.45*sin(t1); +wave_0_per_point1=an = sample*6.28318; +wave_0_per_point2=cx = 0.5 + t2*cos(t1)*q31; +wave_0_per_point3=cy = 0.5 - t2*sin(t1)*0.32*q32; +wave_0_per_point4=rr = t3*(1 + value1*2.2)*(0.75 + 0.35*t4); +wave_0_per_point5=x = cx + rr*cos(an)*q31; +wave_0_per_point6=y = cy + rr*sin(an)*q32; +wave_0_per_point7=r = 1*t4; +wave_0_per_point8=g = 0.55*t4; +wave_0_per_point9=b = 0.2*t4; +wavecode_1_enabled=1 +wavecode_1_samples=96 +wavecode_1_sep=0 +wavecode_1_bSpectrum=0 +wavecode_1_bUseDots=0 +wavecode_1_bDrawThick=0 +wavecode_1_bAdditive=1 +wavecode_1_scaling=1 +wavecode_1_smoothing=0.6 +wavecode_1_r=1 +wavecode_1_g=1 +wavecode_1_b=1 +wavecode_1_a=0.9 +wave_1_per_frame1=t1 = q6; +wave_1_per_frame2=a = 0.9*min(1, q30); +wave_1_per_frame3=t2 = 0.192; +wave_1_per_frame4=t3 = 0.014; +wave_1_per_frame5=t4 = 0.55 + 0.45*sin(t1); +wave_1_per_point1=an = sample*6.28318; +wave_1_per_point2=cx = 0.5 + t2*cos(t1)*q31; +wave_1_per_point3=cy = 0.5 - t2*sin(t1)*0.32*q32; +wave_1_per_point4=rr = t3*(1 + value1*2.2)*(0.75 + 0.35*t4); +wave_1_per_point5=x = cx + rr*cos(an)*q31; +wave_1_per_point6=y = cy + rr*sin(an)*q32; +wave_1_per_point7=r = 0.3*t4; +wave_1_per_point8=g = 0.8*t4; +wave_1_per_point9=b = 1*t4; +wavecode_2_enabled=1 +wavecode_2_samples=96 +wavecode_2_sep=0 +wavecode_2_bSpectrum=0 +wavecode_2_bUseDots=0 +wavecode_2_bDrawThick=0 +wavecode_2_bAdditive=1 +wavecode_2_scaling=1 +wavecode_2_smoothing=0.6 +wavecode_2_r=1 +wavecode_2_g=1 +wavecode_2_b=1 +wavecode_2_a=0.9 +wave_2_per_frame1=t1 = q7; +wave_2_per_frame2=a = 0.9*min(1, q30); +wave_2_per_frame3=t2 = 0.214; +wave_2_per_frame4=t3 = 0.018; +wave_2_per_frame5=t4 = 0.55 + 0.45*sin(t1); +wave_2_per_point1=an = sample*6.28318; +wave_2_per_point2=cx = 0.5 + t2*cos(t1)*q31; +wave_2_per_point3=cy = 0.5 - t2*sin(t1)*0.32*q32; +wave_2_per_point4=rr = t3*(1 + value1*2.2)*(0.75 + 0.35*t4); +wave_2_per_point5=x = cx + rr*cos(an)*q31; +wave_2_per_point6=y = cy + rr*sin(an)*q32; +wave_2_per_point7=r = 1*t4; +wave_2_per_point8=g = 0.3*t4; +wave_2_per_point9=b = 0.55*t4; +wavecode_3_enabled=1 +wavecode_3_samples=96 +wavecode_3_sep=0 +wavecode_3_bSpectrum=0 +wavecode_3_bUseDots=0 +wavecode_3_bDrawThick=0 +wavecode_3_bAdditive=1 +wavecode_3_scaling=1 +wavecode_3_smoothing=0.6 +wavecode_3_r=1 +wavecode_3_g=1 +wavecode_3_b=1 +wavecode_3_a=0.9 +wave_3_per_frame1=t1 = q8; +wave_3_per_frame2=a = 0.9*min(1, q30); +wave_3_per_frame3=t2 = 0.236; +wave_3_per_frame4=t3 = 0.022; +wave_3_per_frame5=t4 = 0.55 + 0.45*sin(t1); +wave_3_per_point1=an = sample*6.28318; +wave_3_per_point2=cx = 0.5 + t2*cos(t1)*q31; +wave_3_per_point3=cy = 0.5 - t2*sin(t1)*0.32*q32; +wave_3_per_point4=rr = t3*(1 + value1*2.2)*(0.75 + 0.35*t4); +wave_3_per_point5=x = cx + rr*cos(an)*q31; +wave_3_per_point6=y = cy + rr*sin(an)*q32; +wave_3_per_point7=r = 0.55*t4; +wave_3_per_point8=g = 1*t4; +wave_3_per_point9=b = 0.5*t4; +wavecode_4_enabled=1 +wavecode_4_samples=96 +wavecode_4_sep=0 +wavecode_4_bSpectrum=0 +wavecode_4_bUseDots=0 +wavecode_4_bDrawThick=0 +wavecode_4_bAdditive=1 +wavecode_4_scaling=1 +wavecode_4_smoothing=0.6 +wavecode_4_r=1 +wavecode_4_g=1 +wavecode_4_b=1 +wavecode_4_a=0.9 +wave_4_per_frame1=t1 = q33; +wave_4_per_frame2=a = 0.9*min(1, q30); +wave_4_per_frame3=t2 = 0.258; +wave_4_per_frame4=t3 = 0.010; +wave_4_per_frame5=t4 = 0.55 + 0.45*sin(t1); +wave_4_per_point1=an = sample*6.28318; +wave_4_per_point2=cx = 0.5 + t2*cos(t1)*q31; +wave_4_per_point3=cy = 0.5 - t2*sin(t1)*0.32*q32; +wave_4_per_point4=rr = t3*(1 + value1*2.2)*(0.75 + 0.35*t4); +wave_4_per_point5=x = cx + rr*cos(an)*q31; +wave_4_per_point6=y = cy + rr*sin(an)*q32; +wave_4_per_point7=r = 0.8*t4; +wave_4_per_point8=g = 0.5*t4; +wave_4_per_point9=b = 1*t4; +wavecode_5_enabled=1 +wavecode_5_samples=96 +wavecode_5_sep=0 +wavecode_5_bSpectrum=0 +wavecode_5_bUseDots=0 +wavecode_5_bDrawThick=0 +wavecode_5_bAdditive=1 +wavecode_5_scaling=1 +wavecode_5_smoothing=0.6 +wavecode_5_r=1 +wavecode_5_g=1 +wavecode_5_b=1 +wavecode_5_a=0.9 +wave_5_per_frame1=t1 = q34; +wave_5_per_frame2=a = 0.9*min(1, q30); +wave_5_per_frame3=t2 = 0.280; +wave_5_per_frame4=t3 = 0.014; +wave_5_per_frame5=t4 = 0.55 + 0.45*sin(t1); +wave_5_per_point1=an = sample*6.28318; +wave_5_per_point2=cx = 0.5 + t2*cos(t1)*q31; +wave_5_per_point3=cy = 0.5 - t2*sin(t1)*0.32*q32; +wave_5_per_point4=rr = t3*(1 + value1*2.2)*(0.75 + 0.35*t4); +wave_5_per_point5=x = cx + rr*cos(an)*q31; +wave_5_per_point6=y = cy + rr*sin(an)*q32; +wave_5_per_point7=r = 1*t4; +wave_5_per_point8=g = 0.85*t4; +wave_5_per_point9=b = 0.35*t4; +wavecode_6_enabled=1 +wavecode_6_samples=96 +wavecode_6_sep=0 +wavecode_6_bSpectrum=0 +wavecode_6_bUseDots=0 +wavecode_6_bDrawThick=0 +wavecode_6_bAdditive=1 +wavecode_6_scaling=1 +wavecode_6_smoothing=0.6 +wavecode_6_r=1 +wavecode_6_g=1 +wavecode_6_b=1 +wavecode_6_a=0.9 +wave_6_per_frame1=t1 = q35; +wave_6_per_frame2=a = 0.9*min(1, q30); +wave_6_per_frame3=t2 = 0.302; +wave_6_per_frame4=t3 = 0.018; +wave_6_per_frame5=t4 = 0.55 + 0.45*sin(t1); +wave_6_per_point1=an = sample*6.28318; +wave_6_per_point2=cx = 0.5 + t2*cos(t1)*q31; +wave_6_per_point3=cy = 0.5 - t2*sin(t1)*0.32*q32; +wave_6_per_point4=rr = t3*(1 + value1*2.2)*(0.75 + 0.35*t4); +wave_6_per_point5=x = cx + rr*cos(an)*q31; +wave_6_per_point6=y = cy + rr*sin(an)*q32; +wave_6_per_point7=r = 0.25*t4; +wave_6_per_point8=g = 0.55*t4; +wave_6_per_point9=b = 1*t4; +wavecode_7_enabled=1 +wavecode_7_samples=96 +wavecode_7_sep=0 +wavecode_7_bSpectrum=0 +wavecode_7_bUseDots=0 +wavecode_7_bDrawThick=0 +wavecode_7_bAdditive=1 +wavecode_7_scaling=1 +wavecode_7_smoothing=0.6 +wavecode_7_r=1 +wavecode_7_g=1 +wavecode_7_b=1 +wavecode_7_a=0.9 +wave_7_per_frame1=t1 = q36; +wave_7_per_frame2=a = 0.9*min(1, q30); +wave_7_per_frame3=t2 = 0.324; +wave_7_per_frame4=t3 = 0.022; +wave_7_per_frame5=t4 = 0.55 + 0.45*sin(t1); +wave_7_per_point1=an = sample*6.28318; +wave_7_per_point2=cx = 0.5 + t2*cos(t1)*q31; +wave_7_per_point3=cy = 0.5 - t2*sin(t1)*0.32*q32; +wave_7_per_point4=rr = t3*(1 + value1*2.2)*(0.75 + 0.35*t4); +wave_7_per_point5=x = cx + rr*cos(an)*q31; +wave_7_per_point6=y = cy + rr*sin(an)*q32; +wave_7_per_point7=r = 1*t4; +wave_7_per_point8=g = 0.45*t4; +wave_7_per_point9=b = 0.35*t4; +wavecode_8_enabled=1 +wavecode_8_samples=96 +wavecode_8_sep=0 +wavecode_8_bSpectrum=0 +wavecode_8_bUseDots=0 +wavecode_8_bDrawThick=0 +wavecode_8_bAdditive=1 +wavecode_8_scaling=1 +wavecode_8_smoothing=0.6 +wavecode_8_r=1 +wavecode_8_g=1 +wavecode_8_b=1 +wavecode_8_a=0.9 +wave_8_per_frame1=t1 = q37; +wave_8_per_frame2=a = 0.9*min(1, q30); +wave_8_per_frame3=t2 = 0.346; +wave_8_per_frame4=t3 = 0.010; +wave_8_per_frame5=t4 = 0.55 + 0.45*sin(t1); +wave_8_per_point1=an = sample*6.28318; +wave_8_per_point2=cx = 0.5 + t2*cos(t1)*q31; +wave_8_per_point3=cy = 0.5 - t2*sin(t1)*0.32*q32; +wave_8_per_point4=rr = t3*(1 + value1*2.2)*(0.75 + 0.35*t4); +wave_8_per_point5=x = cx + rr*cos(an)*q31; +wave_8_per_point6=y = cy + rr*sin(an)*q32; +wave_8_per_point7=r = 0.4*t4; +wave_8_per_point8=g = 1*t4; +wave_8_per_point9=b = 0.85*t4; +wavecode_9_enabled=1 +wavecode_9_samples=96 +wavecode_9_sep=0 +wavecode_9_bSpectrum=0 +wavecode_9_bUseDots=0 +wavecode_9_bDrawThick=0 +wavecode_9_bAdditive=1 +wavecode_9_scaling=1 +wavecode_9_smoothing=0.6 +wavecode_9_r=1 +wavecode_9_g=1 +wavecode_9_b=1 +wavecode_9_a=0.9 +wave_9_per_frame1=t1 = q38; +wave_9_per_frame2=a = 0.9*min(1, q30); +wave_9_per_frame3=t2 = 0.368; +wave_9_per_frame4=t3 = 0.014; +wave_9_per_frame5=t4 = 0.55 + 0.45*sin(t1); +wave_9_per_point1=an = sample*6.28318; +wave_9_per_point2=cx = 0.5 + t2*cos(t1)*q31; +wave_9_per_point3=cy = 0.5 - t2*sin(t1)*0.32*q32; +wave_9_per_point4=rr = t3*(1 + value1*2.2)*(0.75 + 0.35*t4); +wave_9_per_point5=x = cx + rr*cos(an)*q31; +wave_9_per_point6=y = cy + rr*sin(an)*q32; +wave_9_per_point7=r = 1*t4; +wave_9_per_point8=g = 0.6*t4; +wave_9_per_point9=b = 0.9*t4; +wavecode_10_enabled=1 +wavecode_10_samples=96 +wavecode_10_sep=0 +wavecode_10_bSpectrum=0 +wavecode_10_bUseDots=0 +wavecode_10_bDrawThick=0 +wavecode_10_bAdditive=1 +wavecode_10_scaling=1 +wavecode_10_smoothing=0.6 +wavecode_10_r=1 +wavecode_10_g=1 +wavecode_10_b=1 +wavecode_10_a=0.9 +wave_10_per_frame1=t1 = q39; +wave_10_per_frame2=a = 0.9*min(1, q30); +wave_10_per_frame3=t2 = 0.390; +wave_10_per_frame4=t3 = 0.018; +wave_10_per_frame5=t4 = 0.55 + 0.45*sin(t1); +wave_10_per_point1=an = sample*6.28318; +wave_10_per_point2=cx = 0.5 + t2*cos(t1)*q31; +wave_10_per_point3=cy = 0.5 - t2*sin(t1)*0.32*q32; +wave_10_per_point4=rr = t3*(1 + value1*2.2)*(0.75 + 0.35*t4); +wave_10_per_point5=x = cx + rr*cos(an)*q31; +wave_10_per_point6=y = cy + rr*sin(an)*q32; +wave_10_per_point7=r = 0.7*t4; +wave_10_per_point8=g = 0.85*t4; +wave_10_per_point9=b = 1*t4; +wavecode_11_enabled=1 +wavecode_11_samples=96 +wavecode_11_sep=0 +wavecode_11_bSpectrum=0 +wavecode_11_bUseDots=0 +wavecode_11_bDrawThick=0 +wavecode_11_bAdditive=1 +wavecode_11_scaling=1 +wavecode_11_smoothing=0.6 +wavecode_11_r=1 +wavecode_11_g=1 +wavecode_11_b=1 +wavecode_11_a=0.9 +wave_11_per_frame1=t1 = q40; +wave_11_per_frame2=a = 0.9*min(1, q30); +wave_11_per_frame3=t2 = 0.412; +wave_11_per_frame4=t3 = 0.022; +wave_11_per_frame5=t4 = 0.55 + 0.45*sin(t1); +wave_11_per_point1=an = sample*6.28318; +wave_11_per_point2=cx = 0.5 + t2*cos(t1)*q31; +wave_11_per_point3=cy = 0.5 - t2*sin(t1)*0.32*q32; +wave_11_per_point4=rr = t3*(1 + value1*2.2)*(0.75 + 0.35*t4); +wave_11_per_point5=x = cx + rr*cos(an)*q31; +wave_11_per_point6=y = cy + rr*sin(an)*q32; +wave_11_per_point7=r = 1*t4; +wave_11_per_point8=g = 0.75*t4; +wave_11_per_point9=b = 0.5*t4; +per_frame_init_1=ph0 = 0; +per_frame_init_2=ph1 = 0; +per_frame_init_3=ph2 = 0; +per_frame_init_4=ph3 = 0; +per_frame_init_5=ph4 = 0; +per_frame_init_6=ph5 = 0; +per_frame_init_7=ph6 = 0; +per_frame_init_8=ph7 = 0; +per_frame_init_9=ph8 = 0; +per_frame_init_10=ph9 = 0; +per_frame_init_11=ph10 = 0; +per_frame_init_12=ph11 = 0; +per_frame_1=q30 = 60/max(fps, 15); +per_frame_2=q31 = aspectx; +per_frame_3=q32 = aspecty; +per_frame_4=q1 = time*0.03; +per_frame_5=q2 = 0.6 + 0.5*bass_att; +per_frame_6=q3 = treb_att; +per_frame_7=q4 = time*0.004; +per_frame_8=ph0 = ph0 + 0.9000*(0.6 + 0.4*mid_att)/fps; +per_frame_9=q5 = ph0 + 0.0000; +per_frame_10=ph1 = ph1 + 0.6278*(0.6 + 0.4*mid_att)/fps; +per_frame_11=q6 = ph1 + 2.4000; +per_frame_12=ph2 = ph2 + 0.4761*(0.6 + 0.4*mid_att)/fps; +per_frame_13=q7 = ph2 + 4.7999; +per_frame_14=ph3 = ph3 + 0.3803*(0.6 + 0.4*mid_att)/fps; +per_frame_15=q8 = ph3 + 7.1999; +per_frame_16=ph4 = ph4 + 0.3148*(0.6 + 0.4*mid_att)/fps; +per_frame_17=q33 = ph4 + 9.5998; +per_frame_18=ph5 = ph5 + 0.2673*(0.6 + 0.4*mid_att)/fps; +per_frame_19=q34 = ph5 + 11.9998; +per_frame_20=ph6 = ph6 + 0.2315*(0.6 + 0.4*mid_att)/fps; +per_frame_21=q35 = ph6 + 14.3998; +per_frame_22=ph7 = ph7 + 0.2036*(0.6 + 0.4*mid_att)/fps; +per_frame_23=q36 = ph7 + 16.7997; +per_frame_24=ph8 = ph8 + 0.1813*(0.6 + 0.4*mid_att)/fps; +per_frame_25=q37 = ph8 + 19.1997; +per_frame_26=ph9 = ph9 + 0.1631*(0.6 + 0.4*mid_att)/fps; +per_frame_27=q38 = ph9 + 21.5996; +per_frame_28=ph10 = ph10 + 0.1480*(0.6 + 0.4*mid_att)/fps; +per_frame_29=q39 = ph10 + 23.9996; +per_frame_30=ph11 = ph11 + 0.1353*(0.6 + 0.4*mid_att)/fps; +per_frame_31=q40 = ph11 + 26.3996; +warp_1=`shader_body +warp_2=`{ +warp_3=` float k = pow(0.94, q30); +warp_4=` ret = lerp(tex2D(sampler_main, uv).xyz, GetBlur1(uv), 0.36 * min(1.0, q30)) * k; +warp_5=` ret = ret - 0.002 * q30; +warp_6=`} +comp_1=`sampler sampler_pw_noise_lq; +comp_2=`shader_body +comp_3=`{ +comp_4=` float2 p = (uv - 0.5) * aspect.xy; +comp_5=` float R = 0.12; +comp_6=` float r = length(p); +comp_7=` float3 trails = tex2D(sampler_main, uv).xyz; +comp_8=` float3 tglow = GetBlur1(uv) * 0.8 + GetBlur2(uv) * 0.6; +comp_9=` float2 sp = uv * texsize.xy / 512.0; +comp_10=` float4 st = tex2D(sampler_pw_noise_lq, sp); +comp_11=` float tw = 0.55 + 0.45 * sin(time * (1.3 + st.z * 4.0) + st.w * 30.0); +comp_12=` float star = saturate((st.x * st.y - 0.975) * 45.0) * tw * (0.5 + 0.5 * q3); +comp_13=` float3 bg = lerp(float3(0.01, 0.01, 0.03), float3(0.04, 0.02, 0.06), saturate(1.0 - r * 1.5)); +comp_14=` bg += tex2D(sampler_noise_hq, uv * 0.6 + q4).x * float3(0.03, 0.015, 0.05); +comp_15=` float3 col = bg + star * float3(0.85, 0.9, 1.0); +comp_16=` float2 e = p / float2(1.0, 0.32); +comp_17=` float er = length(e); +comp_18=` float band = saturate((er - 0.16) * 200.0) * saturate((0.28 - er) * 200.0); +comp_19=` float gaps = tex2D(sampler_noise_hq, float2(er * 2.2, 0.5)).x; +comp_20=` float3 ringc = lerp(float3(0.75, 0.62, 0.45), float3(0.95, 0.88, 0.75), gaps) * (0.35 + 0.65 * smoothstep(0.3, 0.7, gaps)); +comp_21=` float ringa = band * 0.85; +comp_22=` float behind = step(p.y, 0.0); +comp_23=` col = lerp(col, ringc * 0.8, ringa * behind); +comp_24=` float pm = saturate((R - r) * 400.0); +comp_25=` float z = sqrt(saturate(1.0 - (r * r) / (R * R))); +comp_26=` float3 n = float3(p / R, z); +comp_27=` float lat = n.y; +comp_28=` float lon = atan2(n.x, z) * 0.3 + q1; +comp_29=` float bands = tex2D(sampler_noise_hq, float2(lon * 0.5, lat * 0.6 + 0.3)).x; +comp_30=` float bands2 = tex2D(sampler_noise_hq, float2(lon * 1.5, lat * 2.0 + 0.7)).x; +comp_31=` float stripe = sin(lat * 11.0 + bands * 2.5 + bands2 * 0.8) * 0.5 + 0.5; +comp_32=` float3 gas = lerp(float3(0.7, 0.38, 0.2), float3(0.98, 0.88, 0.7), stripe); +comp_33=` gas = lerp(gas, float3(0.85, 0.55, 0.35), saturate(sin(lat * 3.0 + 1.0)) * 0.4); +comp_34=` float storm = exp(-dot(n.xy - float2(0.35, 0.25), n.xy - float2(0.35, 0.25)) * 60.0); +comp_35=` gas = lerp(gas, float3(0.8, 0.35, 0.25), storm * 0.7); +comp_36=` float3 L = normalize(float3(-0.6, -0.35, 0.7)); +comp_37=` float diff = saturate(dot(n, L)); +comp_38=` float3 planet = gas * (0.05 + 1.05 * pow(diff, 0.8)); +comp_39=` planet += float3(0.3, 0.55, 1.0) * pow(1.0 - z, 3.0) * 0.6 * q2; +comp_40=` col = lerp(col, planet, pm); +comp_41=` col = lerp(col, ringc, ringa * (1.0 - behind)); +comp_42=` float atm = exp(-pow((r - R) * 60.0, 2.0)) * (1.0 - pm); +comp_43=` col += float3(0.35, 0.6, 1.0) * atm * 0.5 * q2; +comp_44=` float hide = 1.0 - pm * behind; +comp_45=` col += (trails * 1.2 + tglow) * hide; +comp_46=` ret = 1.0 - exp(-col * 1.5); +comp_47=`} From c6d1fd10f482396efd01e537b554e899d5719041 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=87A=C4=9EAN=20TURGUT?= Date: Thu, 22 Oct 2026 00:00:05 +0300 Subject: [PATCH 3/3] Pack tests: MilkDrop 2 shader rules, CC BY header, CRLF-safe check (#825) MilkDrop 2 #defines its inputs (time, bass, q1..q32, and per stage rad, ang, uv, uv_orig, hue_shader), so a variable with one of those names fails to compile there; PSVERSION 3 means ps_2_x, which has no dynamic break. Both were caught by compiling the presets the way MilkDrop does. The generated pack file carries the pack's CC BY 4.0 header instead of the MIT one, and the embedded-copy check ignores CRLF from Windows checkouts. Co-authored-by: caganturgut <271973834+caganturgut@users.noreply.github.com> --- README.md | 4 ++-- README.tr.md | 4 ++-- ROADMAP.md | 2 +- scripts/preset-pack.js | 2 +- tests/copyright-headers.test.js | 6 +++++- tests/preset-pack.test.js | 31 ++++++++++++++++++++++++++++++- 6 files changed, 41 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index a721398e..0175dfba 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ layers and **40 GPU effects**, an **OBS overlay**, **Spout / Syphon**, **project [![Downloads](https://img.shields.io/github/downloads/CaYatur/SoundVisualizer/total?label=downloads)](https://github.com/CaYatur/SoundVisualizer/releases) [![License: MIT](https://img.shields.io/badge/License-MIT-e11d2a.svg)](LICENSE) [![Platform](https://img.shields.io/badge/platform-Windows%20%7C%20macOS%20%7C%20Linux-111997.svg)](#download) -[![Tests](https://img.shields.io/badge/tests-3507%20passing-2ea043.svg)](#tests) +[![Tests](https://img.shields.io/badge/tests-3508%20passing-2ea043.svg)](#tests) [![Electron](https://img.shields.io/badge/Electron-43-47848F.svg)](https://www.electronjs.org/) Download for Windows @@ -1788,7 +1788,7 @@ npm test npm start -- --smoke ``` -**3507 unit tests, all passing.** They are written to check answers, not to exercise lines: +**3508 unit tests, all passing.** They are written to check answers, not to exercise lines: _The count is the runner's total (`# tests`). A few tests depend on the environment (a git checkout, Node 22's built-in WebSocket, the electron-builder schema); where that is missing they are reported as skipped, not passed, so `pass + skipped` always equals this number and the skipped count may be 0 on one machine and 1–4 on another._ diff --git a/README.tr.md b/README.tr.md index 5f461177..f033ac64 100644 --- a/README.tr.md +++ b/README.tr.md @@ -18,7 +18,7 @@ destesi**, ve **MCP üzerinden yapay zekâ kontrolü**. [![İndirme](https://img.shields.io/github/downloads/CaYatur/SoundVisualizer/total?label=indirme)](https://github.com/CaYatur/SoundVisualizer/releases) [![Lisans: MIT](https://img.shields.io/badge/Lisans-MIT-e11d2a.svg)](LICENSE) [![Platform](https://img.shields.io/badge/platform-Windows%20%7C%20macOS%20%7C%20Linux-111997.svg)](#hızlı-başlangıç) -[![Test](https://img.shields.io/badge/test-3507%20geçiyor-2ea043.svg)](#testler) +[![Test](https://img.shields.io/badge/test-3508%20geçiyor-2ea043.svg)](#testler) [![Electron](https://img.shields.io/badge/Electron-43-47848F.svg)](https://www.electronjs.org/) Windows için indir @@ -1793,7 +1793,7 @@ npm test npm start -- --smoke ``` -**3507 birim testi, hepsi geçiyor.** Satır çalıştırmak için değil, cevap denetlemek için yazıldılar: +**3508 birim testi, hepsi geçiyor.** Satır çalıştırmak için değil, cevap denetlemek için yazıldılar: _Sayı koşunun toplamıdır (`# tests`). Birkaç test ortama bağlı (git çalışma kopyası, Node 22'nin yerleşik WebSocket'i, electron-builder şeması); bunlar eksikse geçti değil atlandı sayılır. Yani `geçen + atlanan` hep bu sayıya eşittir; atlanan sayısı bir makinede 0, başka birinde 1–4 olabilir._ diff --git a/ROADMAP.md b/ROADMAP.md index 2ee3b049..487631a4 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -136,7 +136,7 @@ npm test npm start -- --smoke ``` -- **3507 unit tests, all passing** on `main`. 703 of those shipped in v3.1.0; +- **3508 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 — 1597 at that tag — 1402 more with v3.1.5 — 2999 at that tag — and 27 diff --git a/scripts/preset-pack.js b/scripts/preset-pack.js index fa24f551..e7db164c 100644 --- a/scripts/preset-pack.js +++ b/scripts/preset-pack.js @@ -118,7 +118,7 @@ if (require.main === module) { const text = render(list); const zipArg = args.find((a) => a === '--zip' || a.startsWith('--zip=')); if (args.includes('--check')) { - const cur = fs.existsSync(OUT) ? fs.readFileSync(OUT, 'utf-8') : ''; + const cur = fs.existsSync(OUT) ? fs.readFileSync(OUT, 'utf-8').replace(/\r\n/g, '\n') : ''; if (cur !== text) { console.error('src/shared/presets-milkdrop-pack.js güncel değil: node scripts/preset-pack.js'); process.exit(1); diff --git a/tests/copyright-headers.test.js b/tests/copyright-headers.test.js index 2f63d21a..b1a54185 100644 --- a/tests/copyright-headers.test.js +++ b/tests/copyright-headers.test.js @@ -14,6 +14,9 @@ const { execFileSync } = require('child_process'); const root = path.join(__dirname, '..'); const HOLDER = 'Copyright (c) 2026 Çağan Turgut (CaYatur) — CaYaDev, https://cayadev.com'; const EXTS = ['.js', '.css', '.html', '.cs', '.cpp', '.sh', '.nsh', '.swift']; +/* İçeriği ayrı lisanslı, üretilen dosyalar: CaYaDev preset paketi (#825) CC BY 4.0. Bunlar + kendi lisans satırını taşır; MIT başlığı yanlış olurdu. */ +const CONTENT = { 'src/shared/presets-milkdrop-pack.js': ['CaYaDev MilkDrop Presets', 'SPDX-License-Identifier: CC-BY-4.0'] }; function sources() { let out; @@ -32,7 +35,8 @@ test('her kaynak dosyanın başında telif bildirimi var', (t) => { const missing = []; for (const rel of files) { const head = fs.readFileSync(path.join(root, rel), 'utf8').split(/\r?\n/).slice(0, 8).join('\n'); - if (!head.includes(HOLDER) || !head.includes('SPDX-License-Identifier: MIT')) missing.push(rel); + const need = CONTENT[rel] || [HOLDER, 'SPDX-License-Identifier: MIT']; + if (!need.every((s) => head.includes(s))) missing.push(rel); } assert.deepStrictEqual(missing, [], 'başlığı olmayan dosyalar'); }); diff --git a/tests/preset-pack.test.js b/tests/preset-pack.test.js index 141456f1..59447453 100644 --- a/tests/preset-pack.test.js +++ b/tests/preset-pack.test.js @@ -29,7 +29,8 @@ const LIST = require('../src/shared/presets-milkdrop.js'); const PACK = PP.load(); test('gömülü paket dosyası presets/cayadev ile aynı', () => { - assert.strictEqual(fs.readFileSync(PP.OUT, 'utf-8'), PP.render(PACK), + // Windows'ta autocrlf dosyayı CRLF açabilir; karşılaştırma satır sonundan bağımsız + assert.strictEqual(fs.readFileSync(PP.OUT, 'utf-8').replace(/\r\n/g, '\n'), PP.render(PACK), 'node scripts/preset-pack.js ile yeniden üretin'); // Yerleşik listeye ekleniyor, elle yazılmış beşin ardından const own = LIST.filter((p) => !p.pack); @@ -148,3 +149,31 @@ test('her sayfa paketi presets-milkdrop.js\'ten ÖNCE yüklüyor; çeviri pakett assert.match(i18n, /window\.SVMilkdropPack/); assert.match(i18n, /hit\.description\.en/); }); + +/* MilkDrop 2 shader metnini kendi başlığıyla (include.fx) derliyor ve şu adları #define + ediyor: ses ve zaman girdileri, q1..q32, aspect/texsize ve aşama başına rad, ang, uv, + uv_orig (comp'ta hue_shader). Bu adla bir değişken ya da parametre tanımlamak orada + derlemeyi düşürüyor ("unexpected token '.'"); bizim motorda ise sıradan bir küresel. + PSVERSION 3, MilkDrop'ta ps_3_0 değil ps_2_x demek: dinamik `break` yok ve döngüler + açılarak 512 komuta sığmalı. İkisi de BeatDrop'ta ve SDK derleyicisinde ölçüldü. */ +test('shader\'lar MilkDrop 2 derleyicisinin kurallarına uyuyor', () => { + const macros = ['time', 'fps', 'frame', 'progress', 'bass', 'mid', 'treb', 'vol', 'bass_att', 'mid_att', + 'treb_att', 'vol_att', 'aspect', 'texsize', 'roam_cos', 'roam_sin', 'slow_roam_cos', 'slow_roam_sin', + 'mip_x', 'mip_y', 'mip_xy', 'mip_avg', 'blur1_min', 'blur1_max', 'blur2_min', 'blur2_max', 'blur3_min', + 'blur3_max', 'rad', 'ang', 'uv', 'uv_orig', 'hue_shader']; + for (let i = 1; i <= 32; i++) macros.push('q' + i); + const decl = new RegExp('\\b(?:float|half|int|bool)[1-4]?(?:x[1-4])?\\s+(' + macros.join('|') + ')\\b'); + for (const p of PACK) { + assert.match(p.source, /\r\nPSVERSION_WARP=3\r\nPSVERSION_COMP=3\r\n/, p.name); + const f = MD.parseMilk(p.source); + for (const [stage, text] of [['warp', f.warpShader], ['comp', f.compShader]]) { + const code = text.replace(/\/\/[^\n]*/g, ''); + const m = decl.exec(code); + assert.ok(!m, p.name + ' ' + stage + ': MilkDrop makrosu ad olarak kullanılmış: ' + (m && m[0])); + assert.doesNotMatch(code, /\bbreak\b|\bwhile\b/, p.name + ' ' + stage + ': ps_2_x döngüden çıkamaz'); + // Yardımcı işlevler PS gövdesinin dışında: aşama makroları orada tanımsız bir parametreye açılır + const helpers = code.slice(0, code.indexOf('shader_body')); + assert.doesNotMatch(helpers, /\b(uv|uv_orig|rad|ang|hue_shader|ret)\b/, p.name + ' ' + stage + ': yardımcı işlev aşama girdisi okuyor'); + } + } +});