diff --git a/db/custom.db b/db/custom.db index 76317ff..ef73d91 100755 Binary files a/db/custom.db and b/db/custom.db differ diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 47a9cdd..a1d82af 100755 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -10,6 +10,9 @@ datasource db { // A preset script file living somewhere in the folder tree. // folderPath is the full path from the virtual root, e.g. "root/embedded/Synth-C". // Names are unique per folder (files in a directory). +// approx = true marks embedded presets that are generated stand-ins rather +// than ports of the original's code (the original relies on effects the +// script engine cannot run). model Preset { id String @id @default(cuid()) name String @@ -17,6 +20,7 @@ model Preset { description String @default("") content String isBuiltIn Boolean @default(false) + approx Boolean @default(false) folderPath String @default("root/user created") // Path to the original Winamp .avs binary in /public (downloadable), if any. originalFile String? @@ -40,5 +44,8 @@ model Settings { defaultScript String? bandConfig String? beatConfig String? + // Version stamp of the embedded preset library; when it changes, the + // root/embedded subtree is re-seeded from BUILTIN + EMBEDDED_LIBRARY. + embeddedSeed String? updatedAt DateTime @updatedAt } diff --git a/src/app/api/presets/route.ts b/src/app/api/presets/route.ts index 0cfd7b1..9087309 100755 --- a/src/app/api/presets/route.ts +++ b/src/app/api/presets/route.ts @@ -1,7 +1,7 @@ import { NextRequest, NextResponse } from 'next/server' import { db } from '@/lib/db' import { BUILTIN_PRESETS } from '@/lib/ava/presets' -import { EMBEDDED_LIBRARY } from '@/lib/ava/embedded-presets' +import { EMBEDDED_LIBRARY, EMBEDDED_SEED_VERSION } from '@/lib/ava/embedded-presets' import { ensureFolderRows, isValidName, normalizeFolderPath } from '@/lib/server/preset-tree' export const dynamic = 'force-dynamic' @@ -18,18 +18,32 @@ const BASE_FOLDERS = [ ] /** - * One-time seed: folder backbone + the full embedded library - * (5 hand-ported classics + 90 auto-ported Winamp AVS presets from the - * user's Google Drive collection, organized exactly as the drive folders - * were: Synth-C / Amp Picks / Dynamics / Envision). + * Version-gated seed: folder backbone + the full embedded library + * (5 hand-ported classics + 90 Winamp AVS presets from the user's Google + * Drive collection, organized as Synth-C / Amp Picks / Dynamics / Envision). + * + * The embedded subtree (root/embedded/**) refreshes automatically whenever + * EMBEDDED_SEED_VERSION changes (i.e. the library was regenerated) — user + * presets outside root/embedded are never touched. */ async function ensureSeeded(): Promise { - const folderCount = await db.folder.count() - if (folderCount > 0) return + const settings = await db.settings.findUnique({ + where: { id: 'main' }, + select: { embeddedSeed: true }, + }) + if (settings?.embeddedSeed === EMBEDDED_SEED_VERSION) return try { - await db.folder.createMany({ data: BASE_FOLDERS.map((path) => ({ path })) }) - // Migrate legacy pre-folder databases: old built-ins sat at the top level. - await db.preset.deleteMany({ where: { isBuiltIn: true } }) + await ensureFolderRows(BASE_FOLDERS) + // refresh the embedded library subtree (+ legacy stray built-ins) + await db.preset.deleteMany({ + where: { + OR: [ + { folderPath: 'root/embedded' }, + { folderPath: { startsWith: 'root/embedded/' } }, + { isBuiltIn: true }, + ], + }, + }) await db.preset.createMany({ data: [ ...BUILTIN_PRESETS.map((p) => ({ @@ -39,6 +53,7 @@ async function ensureSeeded(): Promise { content: p.content, originalFile: p.originalFile ?? null, isBuiltIn: true, + approx: false, folderPath: 'root/embedded/Synth-C', })), ...EMBEDDED_LIBRARY.map((p) => ({ @@ -48,12 +63,17 @@ async function ensureSeeded(): Promise { content: p.content, originalFile: p.originalFile ?? null, isBuiltIn: true, - // the converter recorded the download nesting — normalize to the - // clean tree ("root/embedded/root/embedded/Amp Picks" → "root/embedded/Amp Picks") + approx: p.approx ?? false, + // tolerate old converter output that recorded the download nesting folderPath: p.folder.replace('root/embedded/root/embedded/', 'root/embedded/'), })), ], }) + await db.settings.upsert({ + where: { id: 'main' }, + update: { embeddedSeed: EMBEDDED_SEED_VERSION }, + create: { id: 'main', embeddedSeed: EMBEDDED_SEED_VERSION }, + }) } catch (err) { // Two first requests racing → unique violation: the other request seeded. if ((err as { code?: string })?.code !== 'P2002') throw err @@ -73,6 +93,7 @@ export async function GET() { description: true, content: true, isBuiltIn: true, + approx: true, folderPath: true, originalFile: true, updatedAt: true, diff --git a/src/components/ava/presets-tab.tsx b/src/components/ava/presets-tab.tsx index a794aad..281af91 100755 --- a/src/components/ava/presets-tab.tsx +++ b/src/components/ava/presets-tab.tsx @@ -278,6 +278,14 @@ function TreePreset({ preset, depth }: { preset: PresetItem; depth: number }) { {preset.name} + {preset.approx && ( + + ≈ + + )} {preset.originalFile && ( =0x4000: 32-byte apeId] [int32 len] [blob] + 16→// id 36 SuperScope: [byte ver==1][point][frame][beat][init][int chsrc] + 17→// [int ncolors][colors...][int drawmode] + 18→// id -2 EffectList: [byte mode0|0x80][byte mode0][byte in][byte out] + 19→// [byte extsize][ext ints while pos= 4) { + 122→ const v = r.int32() + 123→ if (r.pos > ext - 4) break + 124→ void v + 125→ } + 126→ const children: Effect[] = [] + 127→ while (r.remaining > 8) { + 128→ const id = r.int32() + 129→ let apeId: string | null = null + 130→ if (id >= 0x4000) apeId = latin1(r.bytes(32)).split('\0')[0] + 131→ const len = r.int32() + 132→ if (len < 0 || len > r.remaining) break + 133→ const childBlob = r.bytes(len) + 134→ // special case: the v2.81+ codeable EffectList's own init/frame code + 135→ // section, stored as a child entry with the Effect List APE id. + 136→ if (id >= 0x4000 && apeId === 'AVS 2.8+ Effect List Config') { + 137→ const cr = new Reader(childBlob) + 138→ if (cr.remaining >= 4) cr.int32() // use_code + 139→ const gv = { init: cr.lpString(), frame: cr.lpString(), beat: '' } + 140→ if (gv.init.trim() || gv.frame.trim()) { + 141→ children.push({ id, apeId, kind: 'globalvars', enabled: true, gv }) + 142→ } + 143→ continue + 144→ } + 145→ children.push(parseEffect(id, apeId, childBlob)) + 146→ } + 147→ return { enabled, children } + 148→} + 149→ + 150→function parseEffect(id: number, apeId: string | null, blob: Uint8Array): Effect { + 151→ const base = { id, apeId, enabled: true } as Effect + 152→ if (id === ID_SUPERSCOPE) { + 153→ const r = new Reader(blob) + 154→ const code = { init: '', frame: '', beat: '', point: '' } + 155→ let spectrumSource = false + 156→ let drawMode = 1 + 157→ const colors: number[] = [] + 158→ const ver = r.byte() + 159→ if (ver === 1) { + 160→ code.point = r.lpString() + 161→ code.frame = r.lpString() + 162→ code.beat = r.lpString() + 163→ code.init = r.lpString() + 164→ } else { + 165→ // ancient fixed 1024-byte block + 166→ if (blob.length >= 1025) { + 167→ const buf = latin1(blob.subarray(1, 1025)) + 168→ code.point = buf.slice(0, 256).split('\0')[0] + 169→ code.frame = buf.slice(256, 512).split('\0')[0] + 170→ code.beat = buf.slice(512, 768).split('\0')[0] + 171→ code.init = buf.slice(768, 1024).split('\0')[0] + 172→ } + 173→ } + 174→ if (r.remaining >= 4) { + 175→ const chsrc = r.int32() + 176→ spectrumSource = (chsrc & 0b100) !== 0 + 177→ if (r.remaining >= 4) { + 178→ const ncolors = r.int32() + 179→ if (ncolors <= 16) { + 180→ for (let i = 0; i < ncolors && r.remaining >= 4; i++) colors.push(r.int32() >>> 0) + 181→ } + 182→ if (r.remaining >= 4) drawMode = r.int32() + 183→ } + 184→ } + 185→ return { ...base, kind: 'superscope', code, spectrumSource, drawMode, colors } + 186→ } + 187→ if (id >= 0x4000 && apeId === APE_TEXER2) { + 188→ const r = new Reader(blob) + 189→ r.int32() // version + 190→ r.bytes(260) // image path + 191→ r.int32() // resize + 192→ r.int32() // wrap + 193→ r.int32() // colorize + 194→ r.int32() // unused + 195→ const code = { init: r.lpString(), frame: r.lpString(), beat: r.lpString(), point: r.lpString() } + 196→ return { ...base, kind: 'texer2', code, spectrumSource: false, drawMode: 0, colors: [] } + 197→ } + 198→ if (id === ID_EFFECTLIST || (id >= 0x4000 && apeId === 'AVS 2.8+ Effect List Config')) { + 199→ const { enabled, children } = parseEffectListBody(blob) + 200→ return { ...base, kind: 'effectlist', enabled, children } + 201→ } + 202→ if (id >= 0x4000 && apeId === APE_EELTRANS) { + 203→ const r = new Reader(blob) + 204→ if (r.remaining >= 16) { + 205→ r.int32(); r.int32(); r.int32(); r.int32() + 206→ return { ...base, kind: 'eeltrans', transCode: r.ntRest() } + 207→ } + 208→ return { ...base, kind: 'other' } + 209→ } + 210→ if (id >= 0x4000 && apeId === APE_GLOBALVARS) { + 211→ const r = new Reader(blob) + 212→ if (r.remaining >= 28) { + 213→ r.int32() // load time + 214→ r.bytes(24) // unused + 215→ const gv = { init: ntAt(r), frame: ntAt(r), beat: ntAt(r) } + 216→ return { ...base, kind: 'globalvars', gv } + 217→ } + 218→ return { ...base, kind: 'other' } + 219→ } + 220→ if (id === ID_COMMENT) { + 221→ const r = new Reader(blob) + 222→ return { ...base, kind: 'comment', comment: r.lpString() } + 223→ } + 224→ return { ...base, kind: 'other' } + 225→} + 226→ + 227→function ntAt(r: Reader): string { + 228→ // null-terminated string starting at reader position (within the blob) + 229→ const start = r.pos + 230→ const d = r.data + 231→ let end = start + 232→ while (end < d.length && d[end] !== 0) end++ + 233→ r.pos = Math.min(end + 1, d.length) + 234→ return latin1(d.subarray(start, end)) + 235→} + 236→ + 237→function parseAvsFile(path: string): Effect[] { + 238→ const data = new Uint8Array(readFileSync(path)) + 239→ const magic = 'Nullsoft AVS Preset 0.2\x1a' + 240→ const head = latin1(data.subarray(0, magic.length)) + 241→ if (head !== magic) throw new Error(`bad magic: ${JSON.stringify(head.slice(0, 30))}`) + 242→ const r = new Reader(data.subarray(magic.length)) + 243→ r.byte() // clear flag + 244→ const effects: Effect[] = [] + 245→ while (r.remaining > 8) { + 246→ const id = r.int32() + 247→ let apeId: string | null = null + 248→ if (id >= 0x4000) apeId = latin1(r.bytes(32)).split('\0')[0] + 249→ const len = r.int32() + 250→ if (len < 0 || len > r.remaining) break + 251→ effects.push(parseEffect(id, apeId, r.bytes(len))) + 252→ } + 253→ return effects + 254→} + 255→ + 256→// --------------------------------------------------------------------------- + 257→// AVSTrans #define macro preprocessor + 258→// --------------------------------------------------------------------------- + 259→ + 260→interface Macro { + 261→ name: string + 262→ params: string[] | null // null = object-like + 263→ body: string + 264→} + 265→ + 266→/** AVSTrans built-in constants (available even without an AVSTrans module). */ + 267→const AVSTRANS_BUILTINS: Macro[] = [ + 268→ { name: '$pi', params: null, body: '3.14159265358979' }, + 269→ { name: '$twopi', params: null, body: '6.28318530717959' }, + 270→ { name: '$e', params: null, body: '2.71828182845905' }, + 271→ { name: '$phi', params: null, body: '1.61803398874989' }, + 272→] + 273→ + 274→function extractDefines(sources: string[]): { macros: Macro[]; failNote: string | null } { + 275→ const macros: Macro[] = [] + 276→ let failNote: string | null = null + 277→ const defineRe = /^[ \t]*#define\s+(.+)$/gm + 278→ for (const src of sources) { + 279→ if (!src.includes('#define')) continue + 280→ // join backslash line-continuations first + 281→ const joined = src.replace(/\\\r?\n/g, ' ') + 282→ const matches = joined.match(defineRe) ?? [] + 283→ for (const m of matches) { + 284→ const rest = m.replace(/^[ \t]*#define\s+/, '').trim() + 285→ const fn = rest.match(/^([A-Za-z0-9_$]+)\s*\(([^)]*)\)\s*([\s\S]*)$/) + 286→ if (fn) { + 287→ const params = fn[2].split(',').map((p) => p.trim()).filter(Boolean) + 288→ macros.push({ name: fn[1], params, body: fn[3] }) + 289→ } else { + 290→ const obj = rest.match(/^([A-Za-z0-9_$]+)\s+([\s\S]*)$/) + 291→ if (obj) macros.push({ name: obj[1], params: null, body: obj[2] }) + 292→ else failNote = 'unparsed #define' + 293→ } + 294→ } + 295→ } + 296→ // user defines override the AVSTrans built-ins + 297→ const byName = new Map(macros.map((m) => [m.name, m])) + 298→ for (const b of AVSTRANS_BUILTINS) if (!byName.has(b.name)) macros.push(b) + 299→ return { macros, failNote } + 300→} + 301→ + 302→/** Split a macro CALL starting at `openPos` (must be '('). */ + 303→function readCallArgs(src: string, openPos: number): { args: string[]; end: number } | null { + 304→ if (src[openPos] !== '(') return null + 305→ let depth = 0 + 306→ let start = openPos + 1 + 307→ const args: string[] = [] + 308→ for (let i = openPos; i < src.length; i++) { + 309→ const c = src[i] + 310→ if (c === '(') depth++ + 311→ else if (c === ')') { + 312→ depth-- + 313→ if (depth === 0) { + 314→ args.push(src.slice(start, i)) + 315→ return { args, end: i + 1 } + 316→ } + 317→ } else if (c === ',' && depth === 1) { + 318→ args.push(src.slice(start, i)) + 319→ start = i + 1 + 320→ } + 321→ } + 322→ return null + 323→} + 324→ + 325→function applyMacros(code: string, macros: Macro[], depth = 0): string { + 326→ if (depth > 24 || !macros.length) return code + 327→ let out = code + 328→ let changed = false + 329→ for (const macro of macros) { + 330→ const re = new RegExp(`(^|[^A-Za-z0-9_$])${escapeRe(macro.name)}($|[^A-Za-z0-9_(]|\\()`, 'g') + 331→ let result = '' + 332→ let last = 0 + 333→ let m: RegExpExecArray | null + 334→ let macroChanged = false + 335→ while ((m = re.exec(out))) { + 336→ const at = m.index + m[1].length + 337→ // skip #define lines themselves + 338→ const lineStart = out.lastIndexOf('\n', at) + 1 + 339→ const lineHead = out.slice(lineStart, at).trimStart() + 340→ if (lineHead.startsWith('#')) continue + 341→ if (macro.params) { + 342→ const call = readCallArgs(out, at + macro.name.length) + 343→ if (!call || call.args.length !== macro.params.length) continue + 344→ let body = macro.body + 345→ // token-concat ##param## first, then plain params + 346→ for (let i = 0; i < macro.params.length; i++) { + 347→ body = body.split(`##${macro.params[i]}##`).join(call.args[i].trim()) + 348→ } + 349→ for (let i = 0; i < macro.params.length; i++) { + 350→ body = body.replace(new RegExp(`(^|[^A-Za-z0-9_$])${escapeRe(macro.params[i])}($|[^A-Za-z0-9_])`, 'g'), + 351→ (_s, pre, post) => `${pre}(${call.args[i].trim()})${post}`) + 352→ } + 353→ result += out.slice(last, at) + `(${body})` + 354→ last = call.end + 355→ } else { + 356→ result += out.slice(last, at) + `(${macro.body})` + 357→ last = at + macro.name.length + 358→ } + 359→ macroChanged = true + 360→ re.lastIndex = last + 361→ } + 362→ if (macroChanged) { + 363→ result += out.slice(last) + 364→ out = result + 365→ changed = true + 366→ } + 367→ } + 368→ if (changed) return applyMacros(out, macros, depth + 1) + 369→ return out + 370→} + 371→ + 372→function escapeRe(s: string): string { + 373→ return s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&') + 374→} + 375→ + 376→function stripDirectives(code: string): string { + 377→ return code + 378→ .split('\n') + 379→ .filter((l) => !/^\s*#/.test(l)) + 380→ .join('\n') + 381→} + 382→ + 383→// --------------------------------------------------------------------------- + 384→// code translation + 385→// --------------------------------------------------------------------------- + 386→ + 387→function translateCode(code: string, spectrumSource: boolean): string { + 388→ let out = code + 389→ // linesize -> size (AVS per-point line width) + 390→ out = out.replace(/\blinesize\b/g, 'size') + 391→ // AVS rand(n) returns an integer 0..n-1 — our deterministic rand(seed) differs + 392→ out = out.replace(/\brand\b/g, 'rnd') + 393→ // spectrum-source scopes: v should read the spectrum (AVS: byte/128-1) + 394→ if (spectrumSource) out = out.replace(/\bv\b/g, '(sv*2-1)') + 395→ return out + 396→} + 397→ + 398→function assignsVar(code: string, name: string): boolean { + 399→ return new RegExp(`(^|[^A-Za-z0-9_])${name}\\s*=[^=]`).test(code) + 400→} + 401→ + 402→// --------------------------------------------------------------------------- + 403→// candidate collection + 404→// --------------------------------------------------------------------------- + 405→ + 406→interface Candidates { + 407→ scopes: Array + 408→ eeltrans: string[] + 409→ gv: Array<{ init: string; frame: string; beat: string }> + 410→ comment: string | null + 411→ otherKinds: Set + 412→} + 413→ + 414→function collect(effects: Effect[], into: Candidates): void { + 415→ for (const e of effects) { + 416→ if (!e.enabled) continue + 417→ switch (e.kind) { + 418→ case 'superscope': + 419→ case 'texer2': + 420→ into.scopes.push(e as Effect & { kind: 'superscope' | 'texer2' }) + 421→ break + 422→ case 'eeltrans': + 423→ if (e.transCode) into.eeltrans.push(e.transCode) + 424→ break + 425→ case 'globalvars': + 426→ if (e.gv) into.gv.push(e.gv) + 427→ break + 428→ case 'comment': + 429→ if (!into.comment && e.comment) into.comment = e.comment + 430→ break + 431→ case 'effectlist': + 432→ if (e.children) collect(e.children, into) + 433→ break + 434→ default: + 435→ into.otherKinds.add(describeEffect(e)) + 436→ } + 437→ } + 438→} + 439→ + 440→const BUILTIN_NAMES: Record = { + 441→ 0: 'Simple', 1: 'DotPlane', 2: 'OscilloscopeStar', 3: 'Fadeout', 4: 'BlitterFeedback', + 442→ 5: 'OnBeatClear', 6: 'Blur', 7: 'BassSpin', 8: 'MovingParticle', 9: 'RotoBlitter', 10: 'SVP', + 443→ 11: 'Colorfade', 12: 'ColorClip', 13: 'RotStar', 14: 'Ring', 15: 'Movement', 16: 'Scatter', + 444→ 17: 'DotGrid', 18: 'BufferSave', 19: 'DotFountain', 20: 'Water', 22: 'Brightness', 23: 'Interleave', + 445→ 24: 'Grain', 25: 'ClearScreen', 26: 'Mirror', 27: 'Starfield', 29: 'Bump', 30: 'Mosaic', + 446→ 31: 'WaterBump', 32: 'Video', 33: 'CustomBPM', 34: 'Picture', 35: 'DynamicDistanceModifier', + 447→ 37: 'Invert', 38: 'UniqueTone', 39: 'Timescope', 40: 'SetRenderMode', 41: 'Interferences', + 448→ 42: 'DynamicShift', 43: 'DynamicMovement', 44: 'FastBright', 45: 'ColorModifier', + 449→} + 450→ + 451→function describeEffect(e: Effect): string { + 452→ if (e.apeId) return e.apeId + 453→ return BUILTIN_NAMES[e.id] ?? `effect#${e.id}` + 454→} + 455→ + 456→// --------------------------------------------------------------------------- + 457→// fallback templates (for presets whose visuals are movement/APE driven) + 458→// --------------------------------------------------------------------------- + 459→ + 460→function fallbackTemplate(seed: number, name: string): { content: string; style: string } { + 461→ const styles = [ + 462→ { + 463→ style: 'pulse rings', + 464→ mode: 'lines', + 465→ content: `name: ${JSON.stringify(name)} + 466→mode: lines + 467→blend: additive + 468→persist: 0.88 + 469→linewidth: 2 + 470→ + 471→[init] + 472→n = 720 + 473→ + 474→[frame] + 475→hue = hue + dt * (0.06 + mid * 0.2) + 476→travel = travel + dt * (0.3 + bass_att * 1.4) + 477→ + 478→[beat] + 479→flash = 1 + 480→ + 481→[point] + 482→g = floor(i * 9) + 483→gi = frac(i * 9) + 484→ph = frac(rand(g * 5.1 + 1) + travel * (0.6 + rand(g + 17) * 0.8)) + 485→a = gi * 6.28318 + 486→rad = ph * (0.25 + bass * 0.6 + flash * 0.08) + 487→x = sin(a) * rad / aspect + 488→y = cos(a) * rad + 489→fade = sin(ph * 3.14159) + 490→red = fade * (0.3 + 0.7 * sin(hue * 6.28318 + g * 0.7)) + 491→green = fade * (0.3 + 0.7 * sin(hue * 6.28318 + g * 0.7 + 2.09)) + 492→blue = fade * (0.3 + 0.7 * sin(hue * 6.28318 + g * 0.7 + 4.19)) + 493→skip = if(above(ph, 0.95), 1, 0) + 494→`, + 495→ }, + 496→ { + 497→ style: 'tunnel', + 498→ mode: 'lines', + 499→ content: `name: ${JSON.stringify(name)} + 500→mode: lines + 501→blend: additive + 502→persist: 0.9 + 503→linewidth: 1.6 + 504→ + 505→[init] + 506→n = 900 + 507→ + 508→[frame] + 509→t = t + dt * (0.25 + bass_att * 1.5) + 510→hue = hue + dt * 0.1 + 511→ + 512→[point] + 513→ring = floor(i * 24) + 514→ri = frac(i * 24) + 515→z = frac(ring / 24 + t) + 516→rad = 0.06 + z * 0.9 + 517→a = ri * 6.28318 + ring * 0.35 + sin(t * 0.7) * 2 + 518→x = sin(a) * rad * (0.55 + sv * 0.9) / aspect + 519→y = cos(a) * rad * (0.55 + sv * 0.9) + 520→f = (1 - z) * (0.35 + bass * 0.65) + 521→red = f * (0.45 + 0.55 * sin(hue * 6.28318 + z * 4)) + 522→green = f * (0.45 + 0.55 * sin(hue * 6.28318 + z * 4 + 2.09)) + 523→blue = f * (0.45 + 0.55 * sin(hue * 6.28318 + z * 4 + 4.19)) + 524→`, + 525→ }, + 526→ { + 527→ style: 'starfield', + 528→ mode: 'dots', + 529→ content: `name: ${JSON.stringify(name)} + 530→mode: dots + 531→blend: additive + 532→persist: 0.82 + 533→linewidth: 2.5 + 534→ + 535→[init] + 536→n = 850 + 537→ + 538→[frame] + 539→travel = travel + dt * (0.2 + vol_att * 1.6) + 540→hue = hue + dt * 0.05 + 541→ + 542→[point] + 543→a = rand(i * 7.3) * 6.28318 + 544→z = frac(rand(i * 3.1 + 5) + travel * (0.5 + rand(i + 9) * 0.7)) + 545→rad = z * z * 1.1 + 546→x = sin(a) * rad / aspect + 547→y = cos(a) * rad + 548→tw = 0.4 + 0.6 * sin(z * 40 + time * 3) * (0.5 + treb) + 549→red = tw * (0.5 + 0.5 * sin(hue * 6.28318 + i * 3)) + 550→green = tw * (0.5 + 0.5 * sin(hue * 6.28318 + i * 3 + 2.09)) + 551→blue = tw * (0.5 + 0.5 * sin(hue * 6.28318 + i * 3 + 4.19)) + 552→size = 1 + z * 3 * (0.5 + bass) + 553→skip = if(above(z, 0.97), 1, 0) + 554→`, + 555→ }, + 556→ { + 557→ style: 'lattice', + 558→ mode: 'dots', + 559→ content: `name: ${JSON.stringify(name)} + 560→mode: dots + 561→blend: additive + 562→persist: 0.78 + 563→linewidth: 2.5 + 564→ + 565→[init] + 566→cols = 36 + 567→n = cols * cols + 568→ + 569→[frame] + 570→rot = rot + dt * (0.05 + mid * 0.4) + 571→hue = hue + dt * (0.04 + treb * 0.1) + 572→ + 573→[point] + 574→cx = floor(i * cols) / (cols - 1) + 575→cy = frac(i * cols) + 576→h = sv * 0.35 + 577→ux = (cx - 0.5) * 1.6 + 578→uy = (cy - 0.5) * 1.6 + 579→rx = ux * cos(rot) - uy * sin(rot) + 580→ry = ux * sin(rot) + uy * cos(rot) + 581→x = (rx / aspect) * (1 - h * 0.7) + 582→y = ry * (1 - h * 0.7) + 583→lum = 0.25 + h * 2.2 + 584→red = lum * (0.6 + 0.4 * sin(hue * 6.28318 + cx * 3)) + 585→green = lum * (0.6 + 0.4 * sin(hue * 6.28318 + cx * 3 + 2.09)) + 586→blue = lum * (0.6 + 0.4 * sin(hue * 6.28318 + cx * 3 + 4.19)) + 587→size = 1.2 + h * 5 + 588→`, + 589→ }, + 590→ { + 591→ style: 'swirl', + 592→ mode: 'lines', + 593→ content: `name: ${JSON.stringify(name)} + 594→mode: lines + 595→blend: additive + 596→persist: 0.9 + 597→linewidth: 1.6 + 598→ + 599→[init] + 600→n = 1100 + 601→ + 602→[frame] + 603→t = t + dt * (0.3 + bass_att * 1.8) + 604→hue = hue + dt * 0.08 + beat * 0.01 + 605→ + 606→[point] + 607→arm = floor(i * 5) + 608→fa = frac(i * 5) + 609→d = fa + 610→ang = arm * 1.2566 + d * (1.4 + mid * 3) * 3.14159 + t + 611→rad = (0.05 + d * d * 1.15) * (0.7 + bass * 0.5) + 612→x = sin(ang) * rad / aspect + 613→y = cos(ang) * rad + 614→red = (0.3 + 0.7 * d) * (0.3 + bass) + 615→green = (0.3 + 0.7 * d) * (0.25 + mid) + 616→blue = (0.3 + 0.7 * d) * (0.2 + treb + hue * 0.2) + 617→skip = if(below(fa, 0.04), 1, 0) + 618→`, + 619→ }, + 620→ { + 621→ style: 'kaleido', + 622→ mode: 'lines', + 623→ content: `name: ${JSON.stringify(name)} + 624→mode: lines + 625→blend: additive + 626→persist: 0.86 + 627→linewidth: 1.8 + 628→ + 629→[init] + 630→n = 560 + 631→segs = 8 + 632→ + 633→[frame] + 634→rot = rot + dt * (0.08 + mid_att * 0.5) + 635→hue = hue + dt * (0.07 + treb * 0.08) + 636→ + 637→[beat] + 638→flash = 1 + 639→ + 640→[point] + 641→seg = floor(i * segs) + 642→si = frac(i * segs) + 643→a0 = si * 6.28318 / segs + rot + 644→amp = 0.12 + sv * 0.55 + bass * 0.25 + flash * 0.05 + 645→rad = 0.15 + amp * (0.4 + 0.6 * sin(a0 * 6 + time * 2)) + 646→a = seg * 6.28318 / segs + a0 * if(below(seg % 2, 1), 1, -1) + 647→x = sin(a) * rad / aspect + 648→y = cos(a) * rad + 649→lum = 0.35 + amp * 1.2 + 650→red = lum * (0.6 + 0.4 * sin(hue * 6.28318 + seg)) + 651→green = lum * (0.6 + 0.4 * sin(hue * 6.28318 + seg + 2.09)) + 652→blue = lum * (0.6 + 0.4 * sin(hue * 6.28318 + seg + 4.19)) + 653→skip = if(above(si, 0.96), 1, 0) + 654→`, + 655→ }, + 656→ ] + 657→ return styles[seed % styles.length] + 658→} + 659→ + 660→// --------------------------------------------------------------------------- + 661→// smoke test — runs the generated script headlessly through the real engine env + 662→// --------------------------------------------------------------------------- + 663→ + 664→function smokeTest(content: string): { ok: boolean; error?: string; n: number; ms: number } { + 665→ const t0 = Date.now() + 666→ const v = validateScript(content) + 667→ if (!v.ok || !v.script) return { ok: false, error: v.error ? `${v.error.section} line ${v.error.line}: ${v.error.message}` : 'parse failed', n: 0, ms: 0 } + 668→ resetEelBuffers() + 669→ AVA_HOOKS.spectrumAt = (p) => 0.25 + 0.25 * Math.sin(p * 18 + 1) + 670→ AVA_HOOKS.waveAt = (p) => Math.sin(p * 12.56) * 0.8 + 671→ const env: Record = { n: 400, t: 0, time: 0, frame: 0 } + 672→ const script = v.script + 673→ try { + 674→ script.initProg?.exec(env) + 675→ } catch (err) { + 676→ return { ok: false, error: `init: ${String(err)}`, n: 0, ms: Date.now() - t0 } + 677→ } + 678→ const n = Math.min(512, Math.max(4, Math.round(env.n ?? 400))) + 679→ let nan = 0 + 680→ try { + 681→ for (let f = 0; f < 36; f++) { + 682→ env.dt = 1 / 60 + 683→ env.time = (f + 1) / 60 + 684→ env.frame = f + 1 + 685→ AVA_HOOKS.now = () => env.time ?? 0 + 686→ env.beat = f % 15 === 0 ? 1 : 0 + 687→ env.bass = 0.3 + 0.3 * Math.sin(f * 0.4) + 688→ env.mid = 0.3 + 689→ env.treb = 0.25 + 690→ env.bass_att = env.bass + 691→ env.mid_att = 0.3 + 692→ env.treb_att = 0.25 + 693→ env.vol = 0.4 + 694→ env.vol_att = 0.4 + 695→ env.w = 1280 + 696→ env.h = 720 + 697→ env.aspect = 1280 / 720 + 698→ script.frameProg?.exec(env) + 699→ if (env.beat) script.beatProg?.exec(env) + 700→ for (let k = 0; k < n; k++) { + 701→ env.i = k / (n - 1 || 1) + 702→ env.v = AVA_HOOKS.waveAt(env.i) + 703→ env.sv = AVA_HOOKS.spectrumAt(env.i) + 704→ env.x = 0; env.y = 0; env.red = 1; env.green = 1; env.blue = 1; env.skip = 0; env.size = 2; env.alpha = 1 + 705→ script.pointProg?.exec(env) + 706→ if (!Number.isFinite(env.x) || !Number.isFinite(env.y)) nan++ + 707→ } + 708→ } + 709→ } catch (err) { + 710→ return { ok: false, error: `runtime: ${String(err)}`, n, ms: Date.now() - t0 } + 711→ } + 712→ const ms = Date.now() - t0 + 713→ // some presets deliberately NaN points (skip via NaN) — allow up to 40% + 714→ if (nan > n * 36 * 0.4) return { ok: false, error: `${nan} NaN points of ${n * 36}`, n, ms } + 715→ return { ok: true, n, ms } + 716→} + 717→ + 718→// --------------------------------------------------------------------------- + 719→// name / author extraction + 720→// --------------------------------------------------------------------------- + 721→ + 722→function extractNameAuthor(filename: string): { name: string; author: string } { + 723→ let base = filename.replace(/\.avs$/i, '') + 724→ base = base.replace(/^\d{1,2}\s+/, '') // "01 dynamic duo - ..." numbering + 725→ // "Author - Name" (spaces around dash) + 726→ const spaced = base.match(/^(.+?)\s+-\s+(.+)$/) + 727→ if (spaced) return { author: spaced[1].trim(), name: spaced[2].trim() } + 728→ // "Author-Name" (no spaces — e.g. "zxe-Urantia", "Degnic-Adrealine rush") + 729→ const tight = base.match(/^([A-Za-z0-9_&']+)-([A-Za-z].+)$/) + 730→ if (tight) return { author: tight[1].trim(), name: tight[2].trim() } + 731→ return { author: '', name: base } + 732→} + 733→ + 734→function hashStr(s: string): number { + 735→ let h = 2166136261 + 736→ for (let i = 0; i < s.length; i++) { + 737→ h ^= s.charCodeAt(i) + 738→ h = Math.imul(h, 16777619) + 739→ } + 740→ return Math.abs(h) + 741→} + 742→ + 743→// --------------------------------------------------------------------------- + 744→// the converter + 745→// --------------------------------------------------------------------------- + 746→ + 747→export { parseAvsFile, collect, applyMacros, extractDefines, translateCode, smokeTest, extractNameAuthor, fallbackTemplate, convertOne } + 748→export type { Effect, Candidates, OutputPreset, Macro } + 749→ + 750→interface OutputPreset { + 751→ folder: string + 752→ name: string + 753→ author: string + 754→ description: string + 755→ originalFile: string + 756→ content: string + 757→} + 758→ + 759→function convertOne(file: string, relDir: string, absPath: string): { preset: OutputPreset; status: 'ported' | 'fallback'; note: string } { + 760→ const { name, author } = extractNameAuthor(file) + 761→ const effects = parseAvsFile(absPath) + 762→ const cands: Candidates = { scopes: [], eeltrans: [], gv: [], comment: null, otherKinds: new Set() } + 763→ collect(effects, cands) + 764→ + 765→ const folder = 'root/embedded/' + relDir + 766→ const originalFile = `/avs-originals/embedded/${relDir}/${file}` + 767→ const desc = (extra: string): string => { + 768→ const by = author ? ` by ${author}` : '' + 769→ const src = `Auto-ported from the Winamp AVS preset "${file}"${by}.` + 770→ return extra ? `${src} ${extra}` : src + 771→ } + 772→ + 773→ const makeFallback = (reason: string) => { + 774→ const tpl = fallbackTemplate(hashStr(name), name) + 775→ return { + 776→ preset: { + 777→ folder, + 778→ name, + 779→ author, + 780→ description: desc(`The original's visuals are driven by ${reason}, which the AVA script engine does not support — this is a generated stand-in that keeps the beat & band reactivity.`), + 781→ originalFile, + 782→ content: tpl.content, + 783→ }, + 784→ status: 'fallback' as const, + 785→ note: `${reason} → ${tpl.style} stand-in`, + 786→ } + 787→ } + 788→ + 789→ // pick the richest point program + 790→ const scored = cands.scopes + 791→ .map((s) => ({ s, score: (s.code?.point.length ?? 0) + (s.code?.frame.length ?? 0) * 0.3 })) + 792→ .sort((a, b) => b.score - a.score) + 793→ if (!scored.length || (scored[0].s.code?.point.length ?? 0) < 12) { + 794→ const reason = cands.otherKinds.size + 795→ ? Array.from(cands.otherKinds).slice(0, 3).join(', ') + 796→ : 'no codeable scope' + 797→ return makeFallback(reason) + 798→ } + 799→ const scope = scored[0].s + 800→ const code = scope.code! + 801→ + 802→ // reject trivial scopes (e.g. a 2-point checker) — they are not the real + 803→ // visual. If init pins a tiny literal n and the frame code never sets n, + 804→ // the preset's meat is elsewhere (movements / APEs). + 805→ const initNLit = code.init.match(/(^|[^A-Za-z0-9_])n\s*=\s*([0-9.]+)\s*;/) + 806→ const frameSetsN = assignsVar(code.frame, 'n') + 807→ if (initNLit && !frameSetsN && parseFloat(initNLit[2]) < 8) { + 808→ return makeFallback('a trivial scope (the real work is movement/APE driven)') + 809→ } + 810→ + 811→ // macro preprocessing (AVSTrans defines + local defines) + 812→ const macroSources = [...cands.eeltrans, code.init, code.frame, code.beat, code.point] + 813→ const { macros } = extractDefines(macroSources) + 814→ let init = code.init + 815→ let frame = code.frame + 816→ let beat = code.beat + 817→ let point = code.point + 818→ let gvNote = '' + 819→ if (macros.length) { + 820→ init = applyMacros(init, macros) + 821→ frame = applyMacros(frame, macros) + 822→ beat = applyMacros(beat, macros) + 823→ point = applyMacros(point, macros) + 824→ } + 825→ // merge Jheriko Global register-setters as a preamble (sets reg00=dt etc.) + 826→ if (cands.gv.length) { + 827→ const gv = cands.gv[0] + 828→ const gvi = stripDirectives(applyMacros(gv.init, macros)) + 829→ const gvf = stripDirectives(applyMacros(gv.frame, macros)) + 830→ const gvb = stripDirectives(applyMacros(gv.beat, macros)) + 831→ if (gvi.trim()) init = `${gvi}\n${init}` + 832→ if (gvf.trim()) frame = `${gvf}\n${frame}` + 833→ if (gvb.trim()) beat = `${gvb}\n${beat}` + 834→ gvNote = ' + global register code' + 835→ } + 836→ init = stripDirectives(init) + 837→ frame = stripDirectives(frame) + 838→ beat = stripDirectives(beat) + 839→ point = stripDirectives(point) + 840→ + 841→ // token rewrites + 842→ const spectrum = scope.spectrumSource === true + 843→ init = translateCode(init, spectrum) + 844→ frame = translateCode(frame, spectrum) + 845→ beat = translateCode(beat, spectrum) + 846→ point = translateCode(point, spectrum) + 847→ + 848→ // AVS `t` is auto-advancing time — if the code never assigns t, map reads to `time` + 849→ const allCode = `${init}\n${frame}\n${beat}\n${point}` + 850→ if (!assignsVar(allCode, 't')) { + 851→ init = init.replace(/\bt\b/g, 'time') + 852→ frame = frame.replace(/\bt\b/g, 'time') + 853→ beat = beat.replace(/\bt\b/g, 'time') + 854→ point = point.replace(/\bt\b/g, 'time') + 855→ } + 856→ + 857→ // default n if never set + 858→ if (!assignsVar(allCode, 'n')) init = `n = 400\n${init}` + 859→ + 860→ // color cycling fallback when the point code never sets colors + 861→ const setsColors = assignsVar(point, 'red') || assignsVar(point, 'green') || assignsVar(point, 'blue') + 862→ let colorFrame = '' + 863→ let colorPoint = '' + 864→ if (!setsColors && scope.colors && scope.colors.length) { + 865→ const cols = scope.colors.map((c) => ({ + 866→ r: ((c >> 16) & 255) / 255, + 867→ g: ((c >> 8) & 255) / 255, + 868→ b: (c & 255) / 255, + 869→ })) + 870→ const gen = cols + 871→ .map((c, i) => `if(avsi==${i}, avsr=${c.r.toFixed(3)}; avsg=${c.g.toFixed(3)}; avsb=${c.b.toFixed(3)};)`) + 872→ .join('\n') + 873→ colorFrame = `avsc = avsc + 1;\navsp = avsc % ${cols.length * 64};\navsi = floor(avsp / 64);\navsf = (avsp % 64) / 64;\n${gen}` + 874→ const c1 = cols[0] + 875→ colorFrame += `\nif(avsi == ${cols.length - 1}, avsr2=${c1.r.toFixed(3)}; avsg2=${c1.g.toFixed(3)}; avsb2=${c1.b.toFixed(3)};)` + 876→ for (let i = 0; i < cols.length - 1; i++) { + 877→ colorFrame += `\nif(avsi == ${i}, avsr2=${cols[i + 1].r.toFixed(3)}; avsg2=${cols[i + 1].g.toFixed(3)}; avsb2=${cols[i + 1].b.toFixed(3)};)` + 878→ } + 879→ colorFrame += `\navsr = avsr * (1 - avsf) + avsr2 * avsf;\navsg = avsg * (1 - avsf) + avsg2 * avsf;\navsb = avsb * (1 - avsf) + avsb2 * avsf;` + 880→ colorPoint = 'red = avsr;\ngreen = avsg;\nblue = avsb;' + 881→ } else if (!setsColors) { + 882→ colorFrame = 'avsh = avsh + dt * 0.15;' + 883→ colorPoint = 'red = 0.55 + 0.45 * sin(avsh * 6.28318);\ngreen = 0.55 + 0.45 * sin(avsh * 6.28318 + 2.09);\nblue = 0.55 + 0.45 * sin(avsh * 6.28318 + 4.19);' + 884→ } + 885→ + 886→ const mode = scope.kind === 'texer2' ? 'dots' : scope.drawMode === 0 ? 'dots' : 'lines' + 887→ const linewidth = mode === 'dots' ? 3 : 2 + 888→ + 889→ const content = `# Auto-ported from "${file}" (Winamp AVS${author ? ` / ${author}` : ''}) + 890→# ${scope.kind === 'texer2' ? 'Texer II' : 'SuperScope'} point program${gvNote}${spectrum ? ', spectrum source' : ''}${macros.length ? `, ${macros.length} AVSTrans macros expanded` : ''}. + 891→name: ${JSON.stringify(name)} + 892→author: ${JSON.stringify(author)} + 893→mode: ${mode} + 894→blend: additive + 895→persist: ${mode === 'dots' ? 0.78 : 0.88} + 896→linewidth: ${linewidth} + 897→ysign: -1 + 898→ + 899→[init] + 900→${init.trim() || 'n = 400'} + 901→ + 902→[frame] + 903→${[frame.trim(), colorFrame].filter(Boolean).join('\n')} + 904→ + 905→[beat] + 906→${beat.trim() || 'flash = 1'} + 907→ + 908→[point] + 909→${[point.trim(), colorPoint].filter(Boolean).join('\n')} + 910→` + 911→ + 912→ const smoke = smokeTest(content) + 913→ if (!smoke.ok) { + 914→ return makeFallback(`unportable scope code (${smoke.error})`) + 915→ } + 916→ const perf = smoke.ms > 900 ? ' (heavy script — point count clamped)' : '' + 917→ if (smoke.ms > 900) { + 918→ // clamp n for heavy scripts so the browser keeps 60fps + 919→ const patched = content.replace(/\[init\]\n/, `[init]\nn = if(above(n, 2048), 2048, n)\n`) + 920→ const recheck = smokeTest(patched) + 921→ if (recheck.ok) { + 922→ return { + 923→ preset: { folder, name, author, description: desc(`Original ${scope.kind} code, machine-translated to the AVA script dialect.${perf}`), originalFile, content: patched }, + 924→ status: 'ported', + 925→ note: `ok (n clamped, ${smoke.ms}ms → ${recheck.ms}ms)`, + 926→ } + 927→ } + 928→ } + 929→ return { + 930→ preset: { folder, name, author, description: desc(`Original ${scope.kind} code, machine-translated to the AVA script dialect.`), originalFile, content }, + 931→ status: 'ported', + 932→ note: `ok (${smoke.ms}ms, n=${smoke.n})`, + 933→ } + 934→} + 935→ + 936→// --------------------------------------------------------------------------- + 937→// main + 938→// --------------------------------------------------------------------------- + 939→ + 940→const inputRoot = process.argv[2] ?? '/tmp/avsdrive/raw' + 941→const outDir = 'tools/converted' + 942→const originalsDir = 'public/avs-originals/embedded' + 943→ + 944→const SKIP_FOLDERS = new Set(['Synth-C']) // hand-adapted versions ship in BUILTIN_PRESETS + 945→ + 946→function walk(dir: string): string[] { + 947→ const out: string[] = [] + 948→ for (const entry of readdirSync(dir)) { + 949→ const p = join(dir, entry) + 950→ if (statSync(p).isDirectory()) { + 951→ if (SKIP_FOLDERS.has(entry)) continue + 952→ out.push(...walk(p)) + 953→ } else if (entry.toLowerCase().endsWith('.avs')) out.push(p) + 954→ } + 955→ return out + 956→} + 957→ + 958→const isMain = typeof process !== 'undefined' && process.argv[1] && process.argv[1].includes('convert-avs') + 959→if (!isMain) { + 960→ // imported as a library — skip main + 961→} else { + 962→main() + 963→} + 964→ + 965→function main() { + 966→ + 967→const files = walk(inputRoot).sort() + 968→console.log(`converting ${files.length} .avs files from ${inputRoot}`) + 969→const results: OutputPreset[] = [] + 970→const report: Array<{ file: string; status: string; note: string }> = [] + 971→let ported = 0 + 972→let fallback = 0 + 973→ + 974→for (const abs of files) { + 975→ const rel = relative(inputRoot, abs) + 976→ const relDir = dirname(rel) === '.' ? '' : dirname(rel) + 977→ const file = basename(rel) + 978→ try { + 979→ const r = convertOne(file, relDir, abs) + 980→ results.push(r.preset) + 981→ report.push({ file: rel, status: r.status, note: r.note }) + 982→ if (r.status === 'ported') ported++ + 983→ else fallback++ + 984→ console.log(`${r.status === 'ported' ? '✔' : '○'} ${rel} — ${r.note}`) + 985→ // keep a copy of the generated .ava for reference + 986→ const destAva = join(outDir, relDir, file.replace(/\.avs$/i, '.ava')) + 987→ mkdirSync(dirname(destAva), { recursive: true }) + 988→ writeFileSync(destAva, r.preset.content) + 989→ // copy the original binary + 990→ const destOrig = join(originalsDir, relDir, file) + 991→ mkdirSync(dirname(destOrig), { recursive: true }) + 992→ copyFileSync(abs, destOrig) + 993→ } catch (err) { + 994→ report.push({ file: rel, status: 'error', note: String(err) }) + 995→ fallback++ + 996→ console.log(`✘ ${rel} — ${String(err)}`) + 997→ } + 998→} + 999→ + 1000→// emit the TS module + 1001→const seen = new Set() + 1002→for (const p of results) { + 1003→ const key = `${p.folder}//${p.name}` + 1004→ if (seen.has(key)) console.log(`!! duplicate name in folder: ${key}`) + 1005→ seen.add(key) + 1006→} + 1007→ + 1008→const tsHeader = `// AVA — embedded preset library (AUTO-GENERATED by tools/convert-avs.ts — do not edit) + 1009→// + 1010→// ${results.length} Winamp AVS presets from the user's Google Drive collection, + 1011→// auto-ported to the AVA script dialect by the converter. Ported presets run + 1012→// the original SuperScope / Texer II code (machine-translated); stand-in + 1013→// presets are generated visuals for originals that rely on effects the script + 1014→// engine does not support (movements, APEs). + 1015→ + 1016→export interface EmbeddedPreset { + 1017→ folder: string + 1018→ name: string + 1019→ author: string + 1020→ description: string + 1021→ originalFile?: string + 1022→ content: string + 1023→} + 1024→ + 1025→` + 1026→ + 1027→const lines: string[] = [] + 1028→for (const p of results) { + 1029→ lines.push(` {\n folder: ${JSON.stringify(p.folder)},\n name: ${JSON.stringify(p.name)},\n author: ${JSON.stringify(p.author)},\n description: ${JSON.stringify(p.description)},\n originalFile: ${JSON.stringify(p.originalFile)},\n content: ${JSON.stringify(p.content)},\n },`) + 1030→} + 1031→const ts = tsHeader + `export const EMBEDDED_LIBRARY: EmbeddedPreset[] = [\n${lines.join('\n')}\n]\n` + 1032→writeFileSync('src/lib/ava/embedded-presets.ts', ts) + 1033→ + 1034→console.log(`\nDone: ${ported} ported, ${fallback} fallback, ${results.length} total`) + 1035→console.log(`→ src/lib/ava/embedded-presets.ts (${(ts.length / 1024).toFixed(0)} KB)`) + 1036→console.log(`→ ${originalsDir}/ (${results.length} .avs originals)`) + 1037→writeFileSync('tools/convert-report.json', JSON.stringify(report, null, 1)) + 1038→} + 1039→ \ No newline at end of file diff --git a/tools/convert-avs.ts b/tools/convert-avs.ts index c21572a..0009c8f 100755 --- a/tools/convert-avs.ts +++ b/tools/convert-avs.ts @@ -28,7 +28,7 @@ // empty string = length 0) import { readFileSync, writeFileSync, mkdirSync, readdirSync, statSync, copyFileSync } from 'node:fs' -import { join, basename, dirname, relative } from 'node:path' +import { join, basename, dirname, relative, resolve } from 'node:path' import { validateScript } from '../src/lib/ava/script' import { AVA_HOOKS, resetEelBuffers } from '../src/lib/ava/expression' @@ -454,185 +454,241 @@ function describeEffect(e: Effect): string { } // --------------------------------------------------------------------------- -// fallback templates (for presets whose visuals are movement/APE driven) +// fallback stand-in generator (for presets whose visuals are movement/APE +// driven). +// +// The original converter squeezed every unportable preset into one of 6 fixed +// templates, so a third of the library looked identical. This generator +// instead builds a UNIQUE visual per preset: +// * 16 distinct geometric families (rings, tunnel, starfield, lattice, +// swirl, kaleido, lissajous, spectrum bars, moire, fountain, rose, +// orbits, ribbon, web, rain, helix) +// * 6 color palettes (rainbow / fire / ice / neon-band / mono / duotone) +// * every numeric parameter (counts, speeds, twists, couplings, widths, +// persistence) drawn from a deterministic PRNG seeded by the preset NAME +// — same name always regenerates the same visual, different names always +// differ +// * the family is chosen from the original's unportable components so the +// vibe roughly matches (BlitterFeedback → tunnels, Mirror → kaleido, +// Starfield → starfield, DotFountain → fountain, …) // --------------------------------------------------------------------------- -function fallbackTemplate(seed: number, name: string): { content: string; style: string } { - const styles = [ - { - style: 'pulse rings', - mode: 'lines', - content: `name: ${JSON.stringify(name)} -mode: lines -blend: additive -persist: 0.88 -linewidth: 2 +/** Deterministic PRNG (mulberry32) — stable across runs/machines. */ +function mulberry32(seed: number): () => number { + let a = seed >>> 0 + return () => { + a |= 0 + a = (a + 0x6d2b79f5) | 0 + let t = Math.imul(a ^ (a >>> 15), 1 | a) + t = (t + Math.imul(t ^ (t >>> 7), 61 | t)) ^ t + return ((t ^ (t >>> 14)) >>> 0) / 4294967296 + } +} + +/** float in [lo, hi], formatted for generated code */ +const rr = (rng: () => number, lo: number, hi: number): string => + String(Math.round((lo + rng() * (hi - lo)) * 1000) / 1000) +/** int in [lo, hi] */ +const ri = (rng: () => number, lo: number, hi: number): number => + Math.floor(lo + rng() * (hi - lo + 1)) +const pick = (rng: () => number, arr: readonly T[]): T => arr[Math.floor(rng() * arr.length)] + +// --- palettes --------------------------------------------------------------- + +type PaletteName = 'rainbow' | 'fire' | 'ice' | 'neon' | 'mono' | 'duotone' +const PALETTE_NAMES: readonly PaletteName[] = ['rainbow', 'fire', 'ice', 'neon', 'mono', 'duotone'] + +/** red/green/blue lines for a luminance + phase expression pair. */ +function colorLines(palette: PaletteName, lum: string, phase: string): string { + switch (palette) { + case 'fire': + return `red = min(1, ${lum} * 1.3)\ngreen = ${lum} * 0.5\nblue = ${lum} * 0.12` + case 'ice': + return `red = ${lum} * 0.3\ngreen = ${lum} * 0.65\nblue = min(1, ${lum} * 1.3)` + case 'neon': + return `red = ${lum} * (0.25 + bass * 0.95)\ngreen = ${lum} * (0.25 + mid * 0.95)\nblue = ${lum} * (0.25 + treb * 0.95)` + case 'mono': + return `red = ${lum} * 0.85\ngreen = ${lum} * 0.92\nblue = ${lum}` + case 'duotone': + return `red = ${lum} * abs(sin(${phase}))\ngreen = ${lum} * 0.22\nblue = ${lum} * abs(cos(${phase}))` + default: + return `red = ${lum} * (0.45 + 0.55 * sin(hue * 6.28318 + ${phase}))\ngreen = ${lum} * (0.45 + 0.55 * sin(hue * 6.28318 + ${phase} + 2.09))\nblue = ${lum} * (0.45 + 0.55 * sin(hue * 6.28318 + ${phase} + 4.19))` + } +} + +function scriptHeader(name: string, mode: string, persist: string, linewidth: string): string { + return `name: ${JSON.stringify(name)}\nmode: ${mode}\nblend: additive\npersist: ${persist}\nlinewidth: ${linewidth}` +} + +interface FamilyCtx { + rng: () => number + name: string + palette: PaletteName + hueSpeed: string +} + +type FamilyFn = (ctx: FamilyCtx) => { style: string; content: string } + +// --- the 16 families -------------------------------------------------------- + +function famPulseRings({ rng, name, palette, hueSpeed }: FamilyCtx) { + const rings = ri(rng, 5, 13) + const mode = pick(rng, ['lines', 'dots'] as const) + const speed = rr(rng, 0.18, 0.5) + const radBase = rr(rng, 0.16, 0.34) + const radBass = rr(rng, 0.35, 0.85) + const content = `${scriptHeader(name, mode, rr(rng, 0.78, 0.9), rr(rng, 1.4, 2.6))} [init] -n = 720 +n = ${rings * ri(rng, 40, 72)} [frame] -hue = hue + dt * (0.06 + mid * 0.2) -travel = travel + dt * (0.3 + bass_att * 1.4) +hue = hue + dt * ${hueSpeed} + beat * 0.01 +travel = travel + dt * (${speed} + bass_att * 1.4) +flash = flash * 0.86 [beat] flash = 1 [point] -g = floor(i * 9) -gi = frac(i * 9) -ph = frac(rand(g * 5.1 + 1) + travel * (0.6 + rand(g + 17) * 0.8)) +g = floor(i * ${rings}) +gi = frac(i * ${rings}) +ph = frac(rand(g * 5.1 + 1) + travel * (0.55 + rand(g + 17) * 0.85)) a = gi * 6.28318 -rad = ph * (0.25 + bass * 0.6 + flash * 0.08) +rad = ph * (${radBase} + bass * ${radBass} + flash * 0.08) x = sin(a) * rad / aspect y = cos(a) * rad fade = sin(ph * 3.14159) -red = fade * (0.3 + 0.7 * sin(hue * 6.28318 + g * 0.7)) -green = fade * (0.3 + 0.7 * sin(hue * 6.28318 + g * 0.7 + 2.09)) -blue = fade * (0.3 + 0.7 * sin(hue * 6.28318 + g * 0.7 + 4.19)) -skip = if(above(ph, 0.95), 1, 0) -`, - }, - { - style: 'tunnel', - mode: 'lines', - content: `name: ${JSON.stringify(name)} -mode: lines -blend: additive -persist: 0.9 -linewidth: 1.6 +${colorLines(palette, 'fade * (0.35 + flash * 0.4)', 'g * 0.7')} +skip = if(above(ph, 0.96), 1, 0) +` + return { style: 'pulse rings', content } +} + +function famTunnel({ rng, name, palette, hueSpeed }: FamilyCtx) { + const rings = ri(rng, 16, 30) + const twist = rr(rng, 0.1, 0.6) + const speed = rr(rng, 0.15, 0.4) + const svC = rr(rng, 0.5, 1.3) + const mode = pick(rng, ['lines', 'dots'] as const) + const content = `${scriptHeader(name, mode, rr(rng, 0.84, 0.92), rr(rng, 1.3, 2.2))} [init] -n = 900 +n = ${rings * ri(rng, 28, 48)} [frame] -t = t + dt * (0.25 + bass_att * 1.5) -hue = hue + dt * 0.1 +t = t + dt * (${speed} + bass_att * 1.5) +hue = hue + dt * ${hueSpeed} [point] -ring = floor(i * 24) -ri = frac(i * 24) -z = frac(ring / 24 + t) -rad = 0.06 + z * 0.9 -a = ri * 6.28318 + ring * 0.35 + sin(t * 0.7) * 2 -x = sin(a) * rad * (0.55 + sv * 0.9) / aspect -y = cos(a) * rad * (0.55 + sv * 0.9) -f = (1 - z) * (0.35 + bass * 0.65) -red = f * (0.45 + 0.55 * sin(hue * 6.28318 + z * 4)) -green = f * (0.45 + 0.55 * sin(hue * 6.28318 + z * 4 + 2.09)) -blue = f * (0.45 + 0.55 * sin(hue * 6.28318 + z * 4 + 4.19)) -`, - }, - { - style: 'starfield', - mode: 'dots', - content: `name: ${JSON.stringify(name)} -mode: dots -blend: additive -persist: 0.82 -linewidth: 2.5 +ring = floor(i * ${rings}) +ri2 = frac(i * ${rings}) +z = frac(ring / ${rings} + t) +rad = 0.05 + z * ${rr(rng, 0.75, 1.05)} +a = ri2 * 6.28318 + ring * ${twist} + sin(t * 0.7) * 2 +x = sin(a) * rad * (0.55 + sv * ${svC}) / aspect +y = cos(a) * rad * (0.55 + sv * ${svC}) +${colorLines(palette, '(1 - z) * (0.3 + bass * 0.7)', `z * ${rr(rng, 2, 6)}`)} +` + return { style: 'tunnel', content } +} + +function famStarfield({ rng, name, palette, hueSpeed }: FamilyCtx) { + const content = `${scriptHeader(name, 'dots', rr(rng, 0.76, 0.86), rr(rng, 2, 3))} [init] -n = 850 +n = ${ri(rng, 650, 1100)} [frame] -travel = travel + dt * (0.2 + vol_att * 1.6) -hue = hue + dt * 0.05 +travel = travel + dt * (${rr(rng, 0.15, 0.35)} + vol_att * ${rr(rng, 1.2, 2)}) +hue = hue + dt * ${hueSpeed} [point] a = rand(i * 7.3) * 6.28318 z = frac(rand(i * 3.1 + 5) + travel * (0.5 + rand(i + 9) * 0.7)) -rad = z * z * 1.1 +rad = z * z * ${rr(rng, 0.95, 1.25)} x = sin(a) * rad / aspect y = cos(a) * rad tw = 0.4 + 0.6 * sin(z * 40 + time * 3) * (0.5 + treb) -red = tw * (0.5 + 0.5 * sin(hue * 6.28318 + i * 3)) -green = tw * (0.5 + 0.5 * sin(hue * 6.28318 + i * 3 + 2.09)) -blue = tw * (0.5 + 0.5 * sin(hue * 6.28318 + i * 3 + 4.19)) +${colorLines(palette, 'tw', `i * ${rr(rng, 2, 8)}`)} size = 1 + z * 3 * (0.5 + bass) skip = if(above(z, 0.97), 1, 0) -`, - }, - { - style: 'lattice', - mode: 'dots', - content: `name: ${JSON.stringify(name)} -mode: dots -blend: additive -persist: 0.78 -linewidth: 2.5 +` + return { style: 'starfield', content } +} + +function famLattice({ rng, name, palette, hueSpeed }: FamilyCtx) { + const cols = ri(rng, 22, 44) + const rotSpeed = rr(rng, 0.03, 0.12) + const hCoup = rr(rng, 0.2, 0.55) + const span = rr(rng, 1.4, 1.9) + const content = `${scriptHeader(name, 'dots', rr(rng, 0.74, 0.84), rr(rng, 2, 3))} [init] -cols = 36 +cols = ${cols} n = cols * cols [frame] -rot = rot + dt * (0.05 + mid * 0.4) -hue = hue + dt * (0.04 + treb * 0.1) +rot = rot + dt * (${rotSpeed} + mid * 0.4) +hue = hue + dt * ${hueSpeed} [point] cx = floor(i * cols) / (cols - 1) cy = frac(i * cols) -h = sv * 0.35 -ux = (cx - 0.5) * 1.6 -uy = (cy - 0.5) * 1.6 +h = sv * ${hCoup} +ux = (cx - 0.5) * ${span} +uy = (cy - 0.5) * ${span} rx = ux * cos(rot) - uy * sin(rot) ry = ux * sin(rot) + uy * cos(rot) x = (rx / aspect) * (1 - h * 0.7) y = ry * (1 - h * 0.7) -lum = 0.25 + h * 2.2 -red = lum * (0.6 + 0.4 * sin(hue * 6.28318 + cx * 3)) -green = lum * (0.6 + 0.4 * sin(hue * 6.28318 + cx * 3 + 2.09)) -blue = lum * (0.6 + 0.4 * sin(hue * 6.28318 + cx * 3 + 4.19)) +${colorLines(palette, '0.22 + h * 2.2', `cx * ${rr(rng, 2, 5)}`)} size = 1.2 + h * 5 -`, - }, - { - style: 'swirl', - mode: 'lines', - content: `name: ${JSON.stringify(name)} -mode: lines -blend: additive -persist: 0.9 -linewidth: 1.6 +` + return { style: 'lattice', content } +} + +function famSwirl({ rng, name, palette, hueSpeed }: FamilyCtx) { + const arms = ri(rng, 3, 9) + const twist = rr(rng, 0.8, 2.2) + const dExp = rr(rng, 1.6, 2.6) + const speed = rr(rng, 0.2, 0.45) + const content = `${scriptHeader(name, 'lines', rr(rng, 0.86, 0.92), rr(rng, 1.3, 2))} [init] -n = 1100 +n = ${ri(rng, 900, 1300)} [frame] -t = t + dt * (0.3 + bass_att * 1.8) -hue = hue + dt * 0.08 + beat * 0.01 +t = t + dt * (${speed} + bass_att * 1.8) +hue = hue + dt * ${hueSpeed} + beat * 0.012 [point] -arm = floor(i * 5) -fa = frac(i * 5) +arm = floor(i * ${arms}) +fa = frac(i * ${arms}) d = fa -ang = arm * 1.2566 + d * (1.4 + mid * 3) * 3.14159 + t -rad = (0.05 + d * d * 1.15) * (0.7 + bass * 0.5) +ang = arm * ${rr(rng, 1.2, 1.6)} + d * ${twist} * 3.14159 + t +rad = (0.04 + pow(d, ${dExp}) * 1.15) * (0.7 + bass * 0.5) x = sin(ang) * rad / aspect y = cos(ang) * rad -red = (0.3 + 0.7 * d) * (0.3 + bass) -green = (0.3 + 0.7 * d) * (0.25 + mid) -blue = (0.3 + 0.7 * d) * (0.2 + treb + hue * 0.2) +${colorLines(palette, '(0.3 + 0.7 * d) * (0.3 + mid)', `d * ${rr(rng, 2, 5)}`)} skip = if(below(fa, 0.04), 1, 0) -`, - }, - { - style: 'kaleido', - mode: 'lines', - content: `name: ${JSON.stringify(name)} -mode: lines -blend: additive -persist: 0.86 -linewidth: 1.8 +` + return { style: 'swirl', content } +} + +function famKaleido({ rng, name, palette, hueSpeed }: FamilyCtx) { + const segs = ri(rng, 6, 14) + const lFreq = ri(rng, 4, 9) + const content = `${scriptHeader(name, 'lines', rr(rng, 0.82, 0.9), rr(rng, 1.5, 2.4))} [init] -n = 560 -segs = 8 +segs = ${segs} +n = ${ri(rng, 460, 660)} [frame] -rot = rot + dt * (0.08 + mid_att * 0.5) -hue = hue + dt * (0.07 + treb * 0.08) +rot = rot + dt * (${rr(rng, 0.05, 0.15)} + mid_att * 0.5) +hue = hue + dt * ${hueSpeed} +flash = flash * 0.85 [beat] flash = 1 @@ -641,22 +697,405 @@ flash = 1 seg = floor(i * segs) si = frac(i * segs) a0 = si * 6.28318 / segs + rot -amp = 0.12 + sv * 0.55 + bass * 0.25 + flash * 0.05 -rad = 0.15 + amp * (0.4 + 0.6 * sin(a0 * 6 + time * 2)) +amp = 0.1 + sv * 0.55 + bass * 0.25 + flash * 0.06 +rad = 0.15 + amp * (0.4 + 0.6 * sin(a0 * ${lFreq} + time * 2)) a = seg * 6.28318 / segs + a0 * if(below(seg % 2, 1), 1, -1) x = sin(a) * rad / aspect y = cos(a) * rad -lum = 0.35 + amp * 1.2 -red = lum * (0.6 + 0.4 * sin(hue * 6.28318 + seg)) -green = lum * (0.6 + 0.4 * sin(hue * 6.28318 + seg + 2.09)) -blue = lum * (0.6 + 0.4 * sin(hue * 6.28318 + seg + 4.19)) +${colorLines(palette, '0.3 + amp * 1.3', 'seg * 0.8')} skip = if(above(si, 0.96), 1, 0) -`, - }, - ] - return styles[seed % styles.length] +` + return { style: 'kaleido', content } } +function famLissajous({ rng, name, palette, hueSpeed }: FamilyCtx) { + const fa0 = ri(rng, 2, 6) + const fb0 = ri(rng, 2, 7) + const phase = rr(rng, 0.5, 3) + const content = `${scriptHeader(name, 'lines', rr(rng, 0.86, 0.93), rr(rng, 1.4, 2.4))} + +[init] +n = ${ri(rng, 600, 950)} + +[frame] +t = t + dt * ${rr(rng, 0.2, 0.6)} +hue = hue + dt * ${hueSpeed} + +[point] +ph = i * 6.28318 * ${rr(rng, 1, 3)} +fa = ${fa0} + mid * 0.35 +fb = ${fb0} + bass * 0.45 +x = sin(ph * fa + t) * (0.5 + bass * 0.3) / aspect +y = sin(ph * fb + t * 1.3 + ${phase}) * (0.5 + treb * 0.35) +${colorLines(palette, '0.3 + 0.45 * sin(ph * 2 + t) + abs(v) * 0.6', 'ph * 0.5')} +` + return { style: 'lissajous', content } +} + +function famSpectrum({ rng, name, palette, hueSpeed }: FamilyCtx) { + const bars = ri(rng, 28, 64) + const inner = rr(rng, 0.1, 0.28) + const height = rr(rng, 0.5, 0.9) + const content = `${scriptHeader(name, pick(rng, ['lines', 'dots'] as const), rr(rng, 0.8, 0.9), rr(rng, 1.4, 2.6))} + +[init] +bars = ${bars} +n = bars * ${ri(rng, 8, 14)} + +[frame] +rot = rot + dt * (${rr(rng, 0.04, 0.12)} + mid * 0.3) +hue = hue + dt * ${hueSpeed} + +[point] +bar = floor(i * bars) +bi = frac(i * bars) +lvl = getspec(bar / bars, 0, 0) +h = lvl * ${height} +a = bar * 6.28318 / bars + rot +rad = ${inner} + bi * h +x = sin(a) * rad / aspect +y = cos(a) * rad +${colorLines(palette, '0.25 + bi * 0.75', 'bar * 6.28318 / bars')} +skip = if(above(bi, 0.97), 1, 0) +` + return { style: 'spectrum bars', content } +} + +function famMoire({ rng, name, palette, hueSpeed }: FamilyCtx) { + const f = (): string => rr(rng, 2, 7) + const content = `${scriptHeader(name, 'dots', rr(rng, 0.72, 0.84), rr(rng, 1.8, 2.8))} + +[init] +n = ${ri(rng, 1100, 1600)} + +[frame] +t = t + dt * ${rr(rng, 0.3, 0.8)} +hue = hue + dt * ${hueSpeed} + +[point] +u = rand(i * 1.7) * 2 - 1 +w = rand(i * 3.3 + 11) * 2 - 1 +m = sin((u * ${f()} + w * ${f()} + t) * 3.14159) * sin((u * ${f()} - w * ${f()} - t * 0.7) * 3.14159) +x = u * ${rr(rng, 0.85, 1.0)} / aspect +y = w * ${rr(rng, 0.85, 1.0)} +lum = max(0, m) * (0.3 + bass * 0.9) + 0.06 +${colorLines(palette, 'lum', `u * ${rr(rng, 2, 6)}`)} +size = 1 + abs(m) * ${rr(rng, 2, 4)} +` + return { style: 'moire', content } +} + +function famFountain({ rng, name, palette, hueSpeed }: FamilyCtx) { + const jets = ri(rng, 2, 5) + const grav = rr(rng, 0.7, 1.4) + const spread = rr(rng, 0.5, 1.2) + const content = `${scriptHeader(name, 'dots', rr(rng, 0.74, 0.86), rr(rng, 1.8, 2.8))} + +[init] +n = ${ri(rng, 750, 1200)} + +[frame] +tt = tt + dt * (0.5 + bass_att * 1.1) +hue = hue + dt * ${hueSpeed} +burst = burst * 0.9 + +[beat] +burst = 1 + +[point] +jet = floor(i * ${jets}) +life = frac(rand(i * 7.7 + jet) + tt * (0.35 + rand(i + 3) * 0.65)) +a = jet * 6.28318 / ${jets} + rand(i * 5.1 + jet) * ${spread} +spd = 0.4 + rand(i * 9.2 + jet) * 0.8 +px = cos(a) * spd * life +py = sin(a) * spd * life - ${grav} * life * life +x = px * (0.85 + bass * 0.35) / aspect +y = py +${colorLines(palette, 'max(0, 1 - life) * (0.35 + burst * 0.55)', 'life * 4')} +skip = if(above(life, 0.94), 1, 0) +` + return { style: 'fountain', content } +} + +function famRose({ rng, name, palette, hueSpeed }: FamilyCtx) { + const k = ri(rng, 2, 7) + const loops = ri(rng, 1, 2) + const content = `${scriptHeader(name, 'lines', rr(rng, 0.84, 0.92), rr(rng, 1.5, 2.6))} + +[init] +n = ${ri(rng, 700, 1000)} + +[frame] +t = t + dt * (${rr(rng, 0.1, 0.3)} + mid * 0.5) +hue = hue + dt * ${hueSpeed} +flash = flash * 0.87 + +[beat] +flash = 1 + +[point] +th = i * 6.28318 * ${loops} + t +r = abs(cos(${k} * th + bass * ${rr(rng, 0.3, 0.9)})) +rad = r * (0.5 + bass * 0.3 + sv * 0.2 + flash * 0.08) +x = sin(th) * rad / aspect +y = cos(th) * rad +${colorLines(palette, '0.25 + 0.65 * r + v * 0.25', 'th * 0.5')} +` + return { style: 'rose', content } +} + +function famOrbits({ rng, name, palette, hueSpeed }: FamilyCtx) { + const rings = ri(rng, 3, 7) + const sats = ri(rng, 2, 5) + const squashBase = rr(rng, 0.3, 0.6) + const content = `${scriptHeader(name, 'dots', rr(rng, 0.78, 0.88), rr(rng, 1.8, 3))} + +[init] +rings = ${rings} +n = rings * ${ri(rng, 70, 110)} + +[frame] +t = t + dt * (${rr(rng, 0.15, 0.4)} + bass_att * 0.6) +hue = hue + dt * ${hueSpeed} +squash = ${squashBase} + 0.25 * sin(t * ${rr(rng, 0.2, 0.5)}) + +[point] +ring = floor(i * rings) +ri3 = frac(i * rings) +r0 = 0.16 + ring * ${rr(rng, 0.1, 0.16)} +a = ri3 * 6.28318 + t * (1.2 - ring * 0.18) + ring * 2.4 +x = sin(a) * r0 * (1 + bass * 0.18) / aspect +y = cos(a) * r0 * squash +sat = frac(ri3 * ${sats}) +size = if(below(sat, 0.14), 3 + bass * 3, 1) +${colorLines(palette, '0.25 + bass * 0.5 + ring * 0.07', 'ring * 1.3')} +` + return { style: 'orbits', content } +} + +function famRibbon({ rng, name, palette, hueSpeed }: FamilyCtx) { + const loops = ri(rng, 1, 3) + const wFreq = ri(rng, 2, 6) + const content = `${scriptHeader(name, 'lines', rr(rng, 0.88, 0.94), rr(rng, 1.4, 2.4))} + +[init] +n = ${ri(rng, 800, 1200)} + +[frame] +t = t + dt * (${rr(rng, 0.3, 0.7)} + bass_att * 0.8) +sway = sway + dt * (0.5 + treb) +hue = hue + dt * ${hueSpeed} + +[point] +a = i * 6.28318 * ${loops} +wob = sin(a * ${wFreq} + t * 2) * (0.08 + treb * 0.3) +rad = (0.42 + mid * 0.25) * (0.85 + 0.15 * sin(a * 3 + sway)) + v * ${rr(rng, 0.15, 0.45)} - wob +x = sin(a) * rad / aspect +y = cos(a) * rad +${colorLines(palette, '0.3 + abs(v) * 1.2', 'a * 0.5')} +` + return { style: 'ribbon', content } +} + +function famWeb({ rng, name, palette, hueSpeed }: FamilyCtx) { + const spokes = ri(rng, 14, 32) + const wFreq = ri(rng, 2, 5) + const content = `${scriptHeader(name, pick(rng, ['lines', 'dots'] as const), rr(rng, 0.8, 0.9), rr(rng, 1.3, 2.2))} + +[init] +spokes = ${spokes} +n = spokes * ${ri(rng, 22, 40)} + +[frame] +rot = rot + dt * (${rr(rng, 0.06, 0.16)} + mid * 0.4) +t = t + dt * ${rr(rng, 1.5, 3)} +hue = hue + dt * ${hueSpeed} + +[point] +sp = floor(i * spokes) +si = frac(i * spokes) +a = sp * 6.28318 / spokes + rot +wave = sin(si * ${wFreq} * 3.14159 - t) * (0.03 + bass * 0.28) +rad = 0.12 + si * ${rr(rng, 0.75, 0.95)} + wave +x = sin(a) * rad / aspect +y = cos(a) * rad +${colorLines(palette, '(1 - si) * 0.45 + 0.15 + sv * 0.55', 'sp * 0.4')} +skip = if(above(si, 0.985), 1, 0) +` + return { style: 'web', content } +} + +function famRain({ rng, name, palette, hueSpeed }: FamilyCtx) { + const cols = ri(rng, 40, 70) + const content = `${scriptHeader(name, 'dots', rr(rng, 0.7, 0.82), rr(rng, 1.6, 2.6))} + +[init] +cols = ${cols} +n = ${ri(rng, 900, 1400)} + +[frame] +fall = fall + dt * (${rr(rng, 0.4, 0.9)} + vol_att * ${rr(rng, 0.8, 1.5)}) +hue = hue + dt * ${hueSpeed} + +[point] +col = floor(i * cols) +ci = frac(i * cols) +xx = (col / cols - 0.5) * 1.9 +yf = frac(rand(col * 3.7 + 1) + fall * (0.55 + rand(col + 5) * 0.5)) +tail = rand(col * 1.3 + 9) * ${rr(rng, 0.25, 0.5)} + 0.04 +yy = (yf * 2 - 1) * 1.05 + ci * tail +x = xx / aspect +y = yy +${colorLines(palette, '(1 - ci) * (0.2 + treb * 0.85) + 0.04', 'col * 0.3')} +skip = if(above(abs(yy), 1.02), 1, 0) +` + return { style: 'rain', content } +} + +function famHelix({ rng, name, palette, hueSpeed }: FamilyCtx) { + const turns = ri(rng, 2, 6) + const content = `${scriptHeader(name, 'lines', rr(rng, 0.84, 0.92), rr(rng, 1.4, 2.4))} + +[init] +n = ${ri(rng, 900, 1300)} + +[frame] +t = t + dt * (${rr(rng, 0.15, 0.45)} + bass_att * 0.9) +hue = hue + dt * ${hueSpeed} +flash = flash * 0.86 + +[beat] +flash = 1 + +[point] +st = floor(i * 2) +si = frac(i * 2) +s = si * ${turns} * 6.28318 + t +ph = st * 3.14159 +rad = (0.28 + bass * 0.32 + flash * 0.06) * (0.55 + 0.45 * (cos(s + ph) * 0.5 + 0.5)) +x = sin(s + ph) * rad / aspect +y = (si - 0.5) * 1.8 +${colorLines(palette, '0.25 + 0.55 * (cos(s + ph) * 0.5 + 0.5) + treb * 0.25', 's * 0.3')} +` + return { style: 'helix', content } +} + +const FAMILIES: Record = { + 'pulse rings': famPulseRings, + tunnel: famTunnel, + starfield: famStarfield, + lattice: famLattice, + swirl: famSwirl, + kaleido: famKaleido, + lissajous: famLissajous, + 'spectrum bars': famSpectrum, + moire: famMoire, + fountain: famFountain, + rose: famRose, + orbits: famOrbits, + ribbon: famRibbon, + web: famWeb, + rain: famRain, + helix: famHelix, +} +const FAMILY_NAMES = Object.keys(FAMILIES) + +/** + * Component → family affinity. The family is picked among the families hinted + * by the original's unportable components (union of all matches), so the + * stand-in's vibe roughly matches the original while same-component presets + * still spread across different families via the name-seeded RNG. + */ +const COMPONENT_FAMILY_HINTS: Array<[RegExp, string[]]> = [ + [/blitterfeedback|rotoblitter|buffersave/i, ['tunnel', 'kaleido', 'moire']], + [/dynamicmovement|movement|dynamicshift/i, ['swirl', 'ribbon', 'web', 'moire']], + [/colormap|uniquetone|colorfade|colorclip|fastbright|colormodifier/i, ['spectrum bars', 'moire', 'orbits', 'lissajous']], + [/starfield/i, ['starfield', 'rain', 'helix']], + [/movingparticle|dotfountain/i, ['fountain', 'rain', 'starfield']], + [/water|bump|mosaic/i, ['pulse rings', 'web', 'moire', 'lattice']], + [/dotgrid|grain|scatter/i, ['lattice', 'rain', 'starfield', 'moire']], + [/mirror/i, ['kaleido', 'lissajous', 'rose']], + [/ring|rotstar/i, ['pulse rings', 'orbits', 'rose', 'tunnel']], + [/interference/i, ['moire', 'lissajous']], + [/bassspin/i, ['orbits', 'rose', 'swirl']], + [/oscilloscope|simple|svp/i, ['ribbon', 'lissajous', 'spectrum bars']], +] + +function chooseFamilies(components: string[]): string[] { + const hits: string[] = [] + for (const [re, fams] of COMPONENT_FAMILY_HINTS) { + if (components.some((c) => re.test(c))) { + for (const f of fams) if (!hits.includes(f)) hits.push(f) + } + } + return hits.length ? hits : FAMILY_NAMES +} + +/** Known-good template used if a generated family somehow fails the smoke test. */ +function safeFallback(name: string): string { + return `name: ${JSON.stringify(name)} +mode: lines +blend: additive +persist: 0.86 +linewidth: 2 + +[init] +n = 640 + +[frame] +hue = hue + dt * 0.06 + beat * 0.01 +travel = travel + dt * (0.3 + bass_att * 1.4) +flash = flash * 0.86 + +[beat] +flash = 1 + +[point] +g = floor(i * 8) +gi = frac(i * 8) +ph = frac(rand(g * 5.1 + 1) + travel * (0.55 + rand(g + 17) * 0.85)) +a = gi * 6.28318 +rad = ph * (0.24 + bass * 0.6 + flash * 0.08) +x = sin(a) * rad / aspect +y = cos(a) * rad +fade = sin(ph * 3.14159) +red = fade * (0.45 + 0.55 * sin(hue * 6.28318 + g * 0.7)) +green = fade * (0.45 + 0.55 * sin(hue * 6.28318 + g * 0.7 + 2.09)) +blue = fade * (0.45 + 0.55 * sin(hue * 6.28318 + g * 0.7 + 4.19)) +skip = if(above(ph, 0.96), 1, 0) +` +} + +/** + * Build the stand-in for one preset. Every parameter is drawn from a PRNG + * seeded by the preset name — the same name always regenerates the same + * visual; different names (even in the same family) look clearly different. + */ +/** Families already used by a stand-in in this converter run (full-coverage rotation). */ +const usedStyles = new Set() + +function fallbackTemplate( + seed: number, + name: string, + components: string[] = [], +): { content: string; style: string } { + const rng = mulberry32(seed) + // 1) guarantee every family gets used at least once across a run (first + // fallbacks cycle through the unused ones — deterministic, files sorted) + // 2) otherwise mostly honor the component hints (vibe matches the original) + // 3) ~25% wild card so the archetype mix keeps rotating in large libraries + const hinted = chooseFamilies(components) + const unused = FAMILY_NAMES.filter((f) => !usedStyles.has(f)) + const pool = unused.length ? unused : rng() < 0.25 ? FAMILY_NAMES : hinted + const style = pick(rng, pool) + usedStyles.add(style) + const palette = pick(rng, PALETTE_NAMES) + const hueSpeed = rr(rng, 0.03, 0.14) + const out = FAMILIES[style]({ rng, name, palette, hueSpeed }) + return { content: out.content, style: out.style } +} + + // --------------------------------------------------------------------------- // smoke test — runs the generated script headlessly through the real engine env // --------------------------------------------------------------------------- @@ -754,6 +1193,8 @@ interface OutputPreset { description: string originalFile: string content: string + /** true = generated stand-in (original relies on unportable effects). */ + approx?: boolean } function convertOne(file: string, relDir: string, absPath: string): { preset: OutputPreset; status: 'ported' | 'fallback'; note: string } { @@ -762,7 +1203,9 @@ function convertOne(file: string, relDir: string, absPath: string): { preset: Ou const cands: Candidates = { scopes: [], eeltrans: [], gv: [], comment: null, otherKinds: new Set() } collect(effects, cands) - const folder = 'root/embedded/' + relDir + // relDir already carries the clean tree ("root/embedded/Amp Picks") when the + // input mirrors the drive layout — only prefix when it does not. + const folder = relDir.startsWith('root/') ? relDir : 'root/embedded/' + relDir const originalFile = `/avs-originals/embedded/${relDir}/${file}` const desc = (extra: string): string => { const by = author ? ` by ${author}` : '' @@ -771,15 +1214,34 @@ function convertOne(file: string, relDir: string, absPath: string): { preset: Ou } const makeFallback = (reason: string) => { - const tpl = fallbackTemplate(hashStr(name), name) + const tpl = fallbackTemplate(hashStr(name), name, Array.from(cands.otherKinds)) + const smoke = smokeTest(tpl.content) + if (!smoke.ok) { + // should never happen — every family is smoke-tested code; still, never + // emit a broken script. + return { + preset: { + folder, + name, + author, + description: desc(`The original is driven by ${reason}, which the script engine cannot run — replaced with a generated stand-in (beat & band reactive).`), + originalFile, + content: safeFallback(name), + approx: true, + }, + status: 'fallback' as const, + note: `${reason} → safe stand-in (family "${tpl.style}" failed smoke: ${smoke.error})`, + } + } return { preset: { folder, name, author, - description: desc(`The original's visuals are driven by ${reason}, which the AVA script engine does not support — this is a generated stand-in that keeps the beat & band reactivity.`), + description: desc(`The original is driven by ${reason}, which the script engine cannot run — replaced with a generated "${tpl.style}"-style visual, uniquely parameterized for this preset (beat & band reactive).`), originalFile, content: tpl.content, + approx: true, }, status: 'fallback' as const, note: `${reason} → ${tpl.style} stand-in`, @@ -913,6 +1375,11 @@ ${[point.trim(), colorPoint].filter(Boolean).join('\n')} if (!smoke.ok) { return makeFallback(`unportable scope code (${smoke.error})`) } + // a "ported" scope that renders a handful of points is not the real visual + // (the meat is in movements/APEs) — those presets get stand-ins too. + if (smoke.n < 16) { + return makeFallback(`a trivial scope (n=${smoke.n}; the real work is movement/APE driven)`) + } const perf = smoke.ms > 900 ? ' (heavy script — point count clamped)' : '' if (smoke.ms > 900) { // clamp n for heavy scripts so the browser keeps 60fps @@ -920,14 +1387,14 @@ ${[point.trim(), colorPoint].filter(Boolean).join('\n')} const recheck = smokeTest(patched) if (recheck.ok) { return { - preset: { folder, name, author, description: desc(`Original ${scope.kind} code, machine-translated to the AVA script dialect.${perf}`), originalFile, content: patched }, + preset: { folder, name, author, description: desc(`Original ${scope.kind} code, machine-translated to the AVA script dialect.${perf}`), originalFile, content: patched, approx: false }, status: 'ported', note: `ok (n clamped, ${smoke.ms}ms → ${recheck.ms}ms)`, } } } return { - preset: { folder, name, author, description: desc(`Original ${scope.kind} code, machine-translated to the AVA script dialect.`), originalFile, content }, + preset: { folder, name, author, description: desc(`Original ${scope.kind} code, machine-translated to the AVA script dialect.`), originalFile, content, approx: false }, status: 'ported', note: `ok (${smoke.ms}ms, n=${smoke.n})`, } @@ -940,6 +1407,8 @@ ${[point.trim(), colorPoint].filter(Boolean).join('\n')} const inputRoot = process.argv[2] ?? '/tmp/avsdrive/raw' const outDir = 'tools/converted' const originalsDir = 'public/avs-originals/embedded' +/** Bump when regenerating — written into embedded-presets.ts for the seed check. */ +const SEED_VERSION = '6.1' const SKIP_FOLDERS = new Set(['Synth-C']) // hand-adapted versions ship in BUILTIN_PRESETS @@ -986,10 +1455,10 @@ for (const abs of files) { const destAva = join(outDir, relDir, file.replace(/\.avs$/i, '.ava')) mkdirSync(dirname(destAva), { recursive: true }) writeFileSync(destAva, r.preset.content) - // copy the original binary + // copy the original binary (skip when re-running in-place — src IS the dest) const destOrig = join(originalsDir, relDir, file) mkdirSync(dirname(destOrig), { recursive: true }) - copyFileSync(abs, destOrig) + if (resolve(abs) !== resolve(destOrig)) copyFileSync(abs, destOrig) } catch (err) { report.push({ file: rel, status: 'error', note: String(err) }) fallback++ @@ -1009,9 +1478,14 @@ const tsHeader = `// AVA — embedded preset library (AUTO-GENERATED by tools/co // // ${results.length} Winamp AVS presets from the user's Google Drive collection, // auto-ported to the AVA script dialect by the converter. Ported presets run -// the original SuperScope / Texer II code (machine-translated); stand-in -// presets are generated visuals for originals that rely on effects the script -// engine does not support (movements, APEs). +// the original SuperScope / Texer II code (machine-translated); approx +// presets are UNIQUE generated stand-ins (16 families × seeded parameters) +// for originals that rely on effects the script engine cannot run. +// +// EMBEDDED_SEED_VERSION: bump whenever this library is regenerated — the +// GET /api/presets route re-seeds the root/embedded subtree when it changes. + +export const EMBEDDED_SEED_VERSION = '${SEED_VERSION}' export interface EmbeddedPreset { folder: string @@ -1020,13 +1494,15 @@ export interface EmbeddedPreset { description: string originalFile?: string content: string + /** true = generated stand-in (original relies on unportable effects). */ + approx?: boolean } ` const lines: string[] = [] for (const p of results) { - lines.push(` {\n folder: ${JSON.stringify(p.folder)},\n name: ${JSON.stringify(p.name)},\n author: ${JSON.stringify(p.author)},\n description: ${JSON.stringify(p.description)},\n originalFile: ${JSON.stringify(p.originalFile)},\n content: ${JSON.stringify(p.content)},\n },`) + lines.push(` {\n folder: ${JSON.stringify(p.folder)},\n name: ${JSON.stringify(p.name)},\n author: ${JSON.stringify(p.author)},\n description: ${JSON.stringify(p.description)},\n originalFile: ${JSON.stringify(p.originalFile)},\n approx: ${p.approx === true},\n content: ${JSON.stringify(p.content)},\n },`) } const ts = tsHeader + `export const EMBEDDED_LIBRARY: EmbeddedPreset[] = [\n${lines.join('\n')}\n]\n` writeFileSync('src/lib/ava/embedded-presets.ts', ts) diff --git a/tools/convert-report.json b/tools/convert-report.json index 7ff475e..ca9d2d7 100755 --- a/tools/convert-report.json +++ b/tools/convert-report.json @@ -2,97 +2,87 @@ { "file": "root/embedded/Amp Picks/D&L - Life Is Violated.avs", "status": "ported", - "note": "ok (25ms, n=512)" + "note": "ok (21ms, n=512)" }, { "file": "root/embedded/Amp Picks/Degnic - Retrowall (Yathosho's Supermicrocosm).avs", "status": "fallback", - "note": "DynamicMovement, Movement, Invert → swirl stand-in" + "note": "DynamicMovement, Movement, Invert → orbits stand-in" }, { "file": "root/embedded/Amp Picks/Degnic-Adrealine rush.avs", "status": "fallback", - "note": "en03: Convolution Filter, Simple, Color Map → starfield stand-in" + "note": "en03: Convolution Filter, Simple, Color Map → moire stand-in" }, { "file": "root/embedded/Amp Picks/Duo - Alien Heart.avs", "status": "fallback", - "note": "Fadeout, ClearScreen, MovingParticle → pulse rings stand-in" + "note": "Fadeout, ClearScreen, MovingParticle → tunnel stand-in" }, { "file": "root/embedded/Amp Picks/Duo - Brainstorm.avs", "status": "fallback", - "note": "Invert, UniqueTone, Brightness → swirl stand-in" + "note": "Invert, UniqueTone, Brightness → kaleido stand-in" }, { "file": "root/embedded/Amp Picks/EL-VIS - Molecules (S_KuPeRS Remix).avs", "status": "fallback", - "note": "DynamicMovement, Color Map, Invert → starfield stand-in" + "note": "DynamicMovement, Color Map, Invert → swirl stand-in" }, { "file": "root/embedded/Amp Picks/L1quid - Take the Veil.avs", "status": "fallback", - "note": "unportable scope code (frame line 15: Unexpected character '$') → lattice stand-in" + "note": "unportable scope code (frame line 15: Unexpected character '$') → lissajous stand-in" }, { "file": "root/embedded/Amp Picks/Nic01 - Rototronik.avs", "status": "ported", - "note": "ok (54ms, n=512)" + "note": "ok (45ms, n=512)" }, { "file": "root/embedded/Amp Picks/S_KuPeRS - ...hidden track....avs", "status": "fallback", - "note": "DynamicMovement, Color Map → starfield stand-in" - }, - { - "file": "root/embedded/Amp Picks/S_KuPeRS - A Tribute To Degnic.avs", - "status": "error", - "note": "Error: out of bytes" + "note": "DynamicMovement, Color Map → pulse rings stand-in" }, { "file": "root/embedded/Amp Picks/S_KuPeRS - Arctic Rainbow.avs", "status": "fallback", - "note": "BlitterFeedback, DynamicMovement, Movement → lattice stand-in" + "note": "BlitterFeedback, DynamicMovement, Movement → rain stand-in" }, { "file": "root/embedded/Amp Picks/S_KuPeRS - Chinook.avs", "status": "fallback", - "note": "ColorClip, ClearScreen, DynamicMovement → pulse rings stand-in" + "note": "ColorClip, ClearScreen, DynamicMovement → spectrum bars stand-in" }, { "file": "root/embedded/Amp Picks/S_KuPeRS - Hexual Healing.avs", "status": "fallback", - "note": "Color Map → starfield stand-in" + "note": "Color Map → lattice stand-in" }, { "file": "root/embedded/Amp Picks/S_KuPeRS - Inverse Kinetics.avs", "status": "fallback", - "note": "effect#2176, DynamicMovement → kaleido stand-in" + "note": "effect#2176, DynamicMovement → fountain stand-in" }, { "file": "root/embedded/Amp Picks/S_KuPeRS - Kingish.avs", "status": "fallback", - "note": "BlitterFeedback → starfield stand-in" + "note": "BlitterFeedback → web stand-in" }, { "file": "root/embedded/Amp Picks/S_KuPeRS - Spirit Realm (Degnic's Plasmoid RMX).avs", "status": "fallback", - "note": "BlitterFeedback, \u0005, DotPlane → swirl stand-in" + "note": "BlitterFeedback, \u0005, DotPlane → ribbon stand-in" }, { "file": "root/embedded/Amp Picks/S_KuPeRS - Texering 002.avs", "status": "ported", - "note": "ok (45ms, n=100)" + "note": "ok (10ms, n=100)" }, { "file": "root/embedded/Amp Picks/S_KuPeRS - Upward Current.avs", "status": "fallback", - "note": "CustomBPM, DynamicMovement, Water → tunnel stand-in" - }, - { - "file": "root/embedded/Amp Picks/S_KuPeRS - female demands.avs", - "status": "error", - "note": "Error: out of bytes" + "note": "CustomBPM, DynamicMovement, Water → rose stand-in" }, { "file": "root/embedded/Amp Picks/Tuggummi - Aqua-fumes.avs", @@ -102,82 +92,72 @@ { "file": "root/embedded/Amp Picks/Tuggummi - Club Seizure (color enhanced mix).avs", "status": "fallback", - "note": "Movement, DynamicMovement, Multiplier → swirl stand-in" - }, - { - "file": "root/embedded/Amp Picks/Tuggummi - Different Load.avs", - "status": "error", - "note": "Error: out of bytes" + "note": "Movement, DynamicMovement, Multiplier → helix stand-in" }, { "file": "root/embedded/Amp Picks/Tuggummi - Electro blobs.avs", "status": "fallback", - "note": "MovingParticle, Color Map, BlitterFeedback → lattice stand-in" + "note": "MovingParticle, Color Map, BlitterFeedback → kaleido stand-in" }, { "file": "root/embedded/Amp Picks/Tuggummi - Kaleidofied.avs", "status": "fallback", - "note": "Invert, Movement, Bump → pulse rings stand-in" + "note": "Invert, Movement, Bump → ribbon stand-in" }, { "file": "root/embedded/Amp Picks/Tuggummi - Magma Flow II.avs", "status": "fallback", - "note": "Color Map, BufferSave, ClearScreen → swirl stand-in" + "note": "Color Map, BufferSave, ClearScreen → orbits stand-in" }, { "file": "root/embedded/Amp Picks/Tuggummi - Multiple Orgasms.avs", "status": "fallback", - "note": "Movement, Color Map, BufferSave → kaleido stand-in" - }, - { - "file": "root/embedded/Amp Picks/Tuggummi - Odour Control.avs", - "status": "error", - "note": "Error: out of bytes" + "note": "Movement, Color Map, BufferSave → web stand-in" }, { "file": "root/embedded/Amp Picks/Tuggummi - Pina Colada.avs", "status": "fallback", - "note": "Color Map → kaleido stand-in" + "note": "Color Map → swirl stand-in" }, { "file": "root/embedded/Amp Picks/Tuggummi - Scope in Spotlight II.avs", "status": "fallback", - "note": "effect#117, Color Map, Invert → pulse rings stand-in" + "note": "effect#117, Color Map, Invert → kaleido stand-in" }, { "file": "root/embedded/Amp Picks/Tuggummi - Solero Shots.avs", "status": "fallback", - "note": "effect#28, FastBright, Movement → starfield stand-in" + "note": "effect#28, FastBright, Movement → spectrum bars stand-in" }, { "file": "root/embedded/Amp Picks/Tuggummi - Square Minded.avs", "status": "fallback", - "note": "FastBright → kaleido stand-in" + "note": "FastBright → moire stand-in" }, { "file": "root/embedded/Amp Picks/Tuggummi - Worm-O-Rama (Raz Remix).avs", "status": "fallback", - "note": "MovingParticle, Filter, Simple → tunnel stand-in" + "note": "MovingParticle, Filter, Simple → ribbon stand-in" }, { "file": "root/embedded/Amp Picks/UnConeD - Zero-G Maze.avs", "status": "ported", - "note": "ok (9ms, n=50)" + "note": "ok (2ms, n=50)" }, { "file": "root/embedded/Amp Picks/UnConeD - Cartoon Trip.avs", "status": "fallback", - "note": "DynamicMovement, FastBright, Color Reduction → starfield stand-in" + "note": "DynamicMovement, FastBright, Color Reduction → spectrum bars stand-in" }, { "file": "root/embedded/Amp Picks/UnConeD - Containment.avs", "status": "fallback", - "note": "unportable scope code (init line 12: Unexpected character '£') → lattice stand-in" + "note": "unportable scope code (init line 12: Unexpected character '£') → ribbon stand-in" }, { "file": "root/embedded/Amp Picks/UnConeD - Cubic Flower.avs", "status": "ported", - "note": "ok (8ms, n=40)" + "note": "ok (6ms, n=40)" }, { "file": "root/embedded/Amp Picks/UnConeD - Jello Cube.avs", @@ -187,311 +167,286 @@ { "file": "root/embedded/Amp Picks/UnConeD - Mercury.avs", "status": "fallback", - "note": "Blur, DynamicMovement, FastBright → pulse rings stand-in" + "note": "Blur, DynamicMovement, FastBright → ribbon stand-in" }, { "file": "root/embedded/Amp Picks/UnConeD - Neon Coaster.avs", "status": "fallback", - "note": "unportable scope code (beat line 18: Unexpected character '¤') → swirl stand-in" + "note": "unportable scope code (beat line 18: Unexpected character '¤') → spectrum bars stand-in" }, { "file": "root/embedded/Amp Picks/UnConeD - Plankton.avs", "status": "fallback", - "note": "DynamicMovement, FastBright → swirl stand-in" + "note": "DynamicMovement, FastBright → pulse rings stand-in" }, { "file": "root/embedded/Amp Picks/UnConeD - Reflectocube.avs", "status": "fallback", - "note": "Movement, DynamicMovement → starfield stand-in" + "note": "Movement, DynamicMovement → swirl stand-in" }, { "file": "root/embedded/Amp Picks/UnConeD - Speeder 3K.avs", "status": "fallback", - "note": "unportable scope code (init line 12: Unexpected character '¤') → tunnel stand-in" + "note": "unportable scope code (init line 12: Unexpected character '¤') → starfield stand-in" }, { "file": "root/embedded/Amp Picks/UnConeD - TC Plasma.avs", "status": "fallback", - "note": "CustomBPM, DynamicMovement, FastBright → starfield stand-in" + "note": "CustomBPM, DynamicMovement, FastBright → ribbon stand-in" }, { "file": "root/embedded/Amp Picks/UnConeD - Tie Tunnel SSC.avs", "status": "fallback", - "note": "unportable scope code (init line 12: Unexpected character '¤') → pulse rings stand-in" + "note": "unportable scope code (init line 12: Unexpected character '¤') → helix stand-in" }, { "file": "root/embedded/Amp Picks/UnConeD - Zero-G Maze II.avs", "status": "fallback", - "note": "DynamicMovement → pulse rings stand-in" - }, - { - "file": "root/embedded/Amp Picks/UnConeD -Retrosquares.avs", - "status": "error", - "note": "Error: out of bytes" + "note": "DynamicMovement → swirl stand-in" }, { "file": "root/embedded/Amp Picks/UnConeD -Zero-G Maze III.avs", "status": "fallback", - "note": "BlitterFeedback, Movement, DynamicMovement → starfield stand-in" - }, - { - "file": "root/embedded/Amp Picks/Yathosho - microcosm 02.avs", - "status": "error", - "note": "Error: out of bytes" + "note": "BlitterFeedback, Movement, DynamicMovement → tunnel stand-in" }, { "file": "root/embedded/Amp Picks/amphirion - nebulous (skupers remix).avs", "status": "fallback", - "note": "Water, UniqueTone, Interleave → kaleido stand-in" + "note": "Water, UniqueTone, Interleave → lattice stand-in" }, { "file": "root/embedded/Amp Picks/el-vis - soundscape III (skupers remix).avs", "status": "fallback", - "note": "a trivial scope (the real work is movement/APE driven) → starfield stand-in" + "note": "a trivial scope (the real work is movement/APE driven) → kaleido stand-in" }, { "file": "root/embedded/Amp Picks/fck - checkers with metaballs (skupers remix).avs", "status": "ported", - "note": "ok (59ms, n=500)" + "note": "ok (16ms, n=500)" }, { "file": "root/embedded/Amp Picks/horse-fly - jinx (skupers remix).avs", "status": "fallback", - "note": "ColorClip, Simple, Mosaic → tunnel stand-in" + "note": "ColorClip, Simple, Mosaic → spectrum bars stand-in" }, { "file": "root/embedded/Amp Picks/jheriko - not quite a bendy tunnel (skupers remix).avs", "status": "fallback", - "note": "Interleave, DynamicMovement, effect#737 → pulse rings stand-in" + "note": "Interleave, DynamicMovement, effect#737 → lissajous stand-in" }, { "file": "root/embedded/Amp Picks/justin - newpoop (for wa5).avs", "status": "fallback", - "note": "ColorModifier → swirl stand-in" + "note": "ColorModifier → orbits stand-in" }, { "file": "root/embedded/Amp Picks/justin - the landscape is killing me (wa5remix).avs", "status": "fallback", - "note": "DynamicDistanceModifier, ColorModifier → swirl stand-in" + "note": "DynamicDistanceModifier, ColorModifier → rain stand-in" }, { "file": "root/embedded/Amp Picks/mig - Dragonscales.avs", "status": "fallback", - "note": "CustomBPM, BufferSave, MovingParticle → lattice stand-in" + "note": "CustomBPM, BufferSave, MovingParticle → lissajous stand-in" }, { "file": "root/embedded/Amp Picks/mig - Encapsulade.avs", "status": "fallback", - "note": "BufferSave, SetRenderMode, CustomBPM → pulse rings stand-in" + "note": "BufferSave, SetRenderMode, CustomBPM → spectrum bars stand-in" }, { "file": "root/embedded/Amp Picks/mig - Freekwyrms.avs", "status": "fallback", - "note": "BufferSave, SetRenderMode, MovingParticle → swirl stand-in" + "note": "BufferSave, SetRenderMode, MovingParticle → spectrum bars stand-in" }, { "file": "root/embedded/Amp Picks/mig - Lilypod.avs", "status": "fallback", - "note": "BufferSave, MovingParticle, 2.8+ Effect List Config → pulse rings stand-in" + "note": "BufferSave, MovingParticle, 2.8+ Effect List Config → fountain stand-in" }, { "file": "root/embedded/Amp Picks/mig - Mist Wisps.avs", "status": "fallback", - "note": "CustomBPM, BufferSave, MovingParticle → pulse rings stand-in" + "note": "CustomBPM, BufferSave, MovingParticle → moire stand-in" }, { "file": "root/embedded/Amp Picks/mig - Nebulating - Hypercolorspace.avs", "status": "fallback", - "note": "CustomBPM, BufferSave, Fadeout → swirl stand-in" + "note": "CustomBPM, BufferSave, Fadeout → moire stand-in" }, { "file": "root/embedded/Amp Picks/mig - Reverb - Deep Net.avs", "status": "fallback", - "note": "CustomBPM, BufferSave, Fadeout → kaleido stand-in" + "note": "CustomBPM, BufferSave, Fadeout → lattice stand-in" }, { "file": "root/embedded/Amp Picks/mig - Slyde - Tri.avs", "status": "fallback", - "note": "BufferSave, SetRenderMode, MovingParticle → swirl stand-in" + "note": "BufferSave, SetRenderMode, MovingParticle → lissajous stand-in" }, { "file": "root/embedded/Amp Picks/mig - Solar Flaire.avs", "status": "fallback", - "note": "BufferSave, Fadeout, SetRenderMode → lattice stand-in" + "note": "BufferSave, Fadeout, SetRenderMode → spectrum bars stand-in" }, { "file": "root/embedded/Amp Picks/mig - Spintronics - Backspin.avs", "status": "fallback", - "note": "2.8+ Effect List Config, Simple, SetRenderMode → kaleido stand-in" + "note": "2.8+ Effect List Config, Simple, SetRenderMode → fountain stand-in" }, { "file": "root/embedded/Amp Picks/mig - Starslappin.avs", "status": "fallback", - "note": "unportable scope code (frame line 20: Expected ')' but found ';') → swirl stand-in" + "note": "unportable scope code (frame line 20: Expected ')' but found ';') → kaleido stand-in" }, { "file": "root/embedded/Amp Picks/mig - Street Art - Fire Inside.avs", "status": "fallback", - "note": "BufferSave, Colorfade, Movement → swirl stand-in" + "note": "BufferSave, Colorfade, Movement → fountain stand-in" }, { "file": "root/embedded/Amp Picks/mig - Swoo - Slow.avs", "status": "fallback", - "note": "CustomBPM, BufferSave, Movement → kaleido stand-in" + "note": "CustomBPM, BufferSave, Movement → ribbon stand-in" }, { "file": "root/embedded/Amp Picks/nixa - smell of music (skupers remix).avs", "status": "fallback", - "note": "Mirror, DynamicMovement, Movement → lattice stand-in" + "note": "Mirror, DynamicMovement, Movement → web stand-in" }, { "file": "root/embedded/Amp Picks/p-k - bumpy.avs", "status": "fallback", "note": "CustomBPM, Color Map → pulse rings stand-in" }, - { - "file": "root/embedded/Amp Picks/skupers - chinook (exclusive version).avs", - "status": "error", - "note": "Error: out of bytes" - }, { "file": "root/embedded/Amp Picks/splendora.avs", "status": "fallback", - "note": "Grain, Simple, Movement → lattice stand-in" - }, - { - "file": "root/embedded/Amp Picks/yathosho - fabric (skupers remix).avs", - "status": "error", - "note": "Error: out of bytes" + "note": "Grain, Simple, Movement → swirl stand-in" }, { "file": "root/embedded/Amp Picks/zxe-Urantia.avs", "status": "fallback", - "note": "effect#326, \u0001, UniqueTone → kaleido stand-in" + "note": "effect#326, \u0001, UniqueTone → orbits stand-in" }, { "file": "root/embedded/Dynamics/01 dynamic duo - tentaclism (fake hboy rmx).avs", "status": "fallback", - "note": "unportable scope code (frame line 20: Expected ')' but found ';') → swirl stand-in" + "note": "unportable scope code (frame line 20: Expected ')' but found ';') → starfield stand-in" }, { "file": "root/embedded/Dynamics/02 dynamic duo - tentaclism (sky of contempt mix by drew).avs", "status": "fallback", - "note": "unportable scope code (frame line 20: Expected ')' but found ';') → tunnel stand-in" + "note": "unportable scope code (frame line 20: Expected ')' but found ';') → orbits stand-in" }, { "file": "root/embedded/Dynamics/03 dynamic duo - tentaclism (microdee's grandpa was a tentaclist).avs", "status": "ported", - "note": "ok (16ms, n=40)" + "note": "ok (4ms, n=40)" }, { "file": "root/embedded/Dynamics/04 dynamic duo - tentaclism (cathode ray mix by onionring of doom).avs", "status": "fallback", - "note": "unportable scope code (frame line 19: Expected ')' but found ';') → swirl stand-in" + "note": "unportable scope code (frame line 19: Expected ')' but found ';') → web stand-in" }, { "file": "root/embedded/Dynamics/05 dynamic duo - chromatics (glowy mix by meaningless-existance).avs", - "status": "ported", - "note": "ok (2ms, n=4)" + "status": "fallback", + "note": "a trivial scope (n=4; the real work is movement/APE driven) → tunnel stand-in" }, { "file": "root/embedded/Dynamics/06 dynamic duo - tentaclism (midas remix).avs", "status": "fallback", - "note": "unportable scope code (frame line 20: Expected ')' but found ';') → kaleido stand-in" + "note": "unportable scope code (frame line 20: Expected ')' but found ';') → fountain stand-in" }, { "file": "root/embedded/Dynamics/07 dynamic duo - tentaclism (raz remix - ugly edit).avs", "status": "fallback", - "note": "unportable scope code (frame line 20: Expected ')' but found ';') → swirl stand-in" + "note": "unportable scope code (frame line 20: Expected ')' but found ';') → spectrum bars stand-in" }, { "file": "root/embedded/Dynamics/08 dynamic duo - tentaclism (the y.m.o. rework #1).avs", "status": "fallback", - "note": "unportable scope code (frame line 20: Expected ')' but found ';') → pulse rings stand-in" + "note": "unportable scope code (frame line 20: Expected ')' but found ';') → web stand-in" }, { "file": "root/embedded/Dynamics/09 dynamic duo - tentaclism (kans of kansis mix by drew - edit).avs", "status": "fallback", - "note": "unportable scope code (frame line 20: Expected ')' but found ';') → lattice stand-in" + "note": "unportable scope code (frame line 20: Expected ')' but found ';') → moire stand-in" }, { "file": "root/embedded/Envision/01 amphirion - the pacifist (duo's underworld mix).avs", - "status": "ported", - "note": "ok (32ms, n=4)" + "status": "fallback", + "note": "a trivial scope (n=4; the real work is movement/APE driven) → kaleido stand-in" }, { "file": "root/embedded/Envision/02 duo - biofeedback (hboy's organic mix).avs", "status": "ported", - "note": "ok (4ms, n=50)" - }, - { - "file": "root/embedded/Envision/03 zamuz - waterburn (duo's icy hot mix).avs", - "status": "error", - "note": "Error: out of bytes" + "note": "ok (2ms, n=50)" }, { "file": "root/embedded/Envision/04 zamuz - roll-on mojo (duo remix).avs", "status": "fallback", - "note": "a trivial scope (the real work is movement/APE driven) → lattice stand-in" + "note": "a trivial scope (the real work is movement/APE driven) → swirl stand-in" }, { "file": "root/embedded/Envision/05 duo - cafe de duo (vanish's wicked jungle massive remix).avs", "status": "fallback", - "note": "unportable scope code (frame line 19: Expected ')' but found ';') → starfield stand-in" + "note": "unportable scope code (frame line 19: Expected ')' but found ';') → kaleido stand-in" }, { "file": "root/embedded/Envision/06 skupers - incantation (duo remix - edit).avs", - "status": "ported", - "note": "ok (8ms, n=4)" + "status": "fallback", + "note": "a trivial scope (n=4; the real work is movement/APE driven) → kaleido stand-in" }, { "file": "root/embedded/Envision/07 duo - miraculous flow (nemo remix).avs", "status": "fallback", - "note": "UniqueTone, DynamicMovement, FastBright → swirl stand-in" + "note": "UniqueTone, DynamicMovement, FastBright → ribbon stand-in" }, { "file": "root/embedded/Envision/08 duo - warm freeform (mykal remix).avs", "status": "fallback", - "note": "a trivial scope (the real work is movement/APE driven) → starfield stand-in" + "note": "a trivial scope (the real work is movement/APE driven) → web stand-in" }, { "file": "root/embedded/Envision/09 zxe - pleasure point (duo remix).avs", "status": "fallback", - "note": "a trivial scope (the real work is movement/APE driven) → pulse rings stand-in" + "note": "a trivial scope (the real work is movement/APE driven) → lissajous stand-in" }, { "file": "root/embedded/Envision/10 zamuz - heart dynamics (duo's high dose mix).avs", "status": "fallback", - "note": "a trivial scope (the real work is movement/APE driven) → lattice stand-in" + "note": "a trivial scope (the real work is movement/APE driven) → ribbon stand-in" }, { "file": "root/embedded/Envision/11 nemo - we build here (duo's building blocks remix).avs", "status": "fallback", - "note": "DynamicMovement, BufferSave, 2.8+ Effect List Config → lattice stand-in" + "note": "DynamicMovement, BufferSave, 2.8+ Effect List Config → moire stand-in" }, { "file": "root/embedded/Envision/12 duo & vanish - wickedjunglesmassive (yathosho's cartographic re-rub).avs", "status": "fallback", - "note": "unportable scope code (frame line 19: Expected ')' but found ';') → pulse rings stand-in" + "note": "unportable scope code (frame line 19: Expected ')' but found ';') → moire stand-in" }, { "file": "root/embedded/Envision/13 skupers - why i love you (duo's pulsedriver remix).avs", - "status": "ported", - "note": "ok (1ms, n=10)" + "status": "fallback", + "note": "a trivial scope (n=10; the real work is movement/APE driven) → kaleido stand-in" }, { "file": "root/embedded/Envision/14 duo - conjuring sands (skupers remix - edit).avs", - "status": "ported", - "note": "ok (4ms, n=15)" + "status": "fallback", + "note": "a trivial scope (n=15; the real work is movement/APE driven) → lissajous stand-in" }, { "file": "root/embedded/Envision/15 tuggummi - multiple overdose (duo remix).avs", "status": "ported", - "note": "ok (49ms, n=400)" + "note": "ok (28ms, n=400)" }, { "file": "root/embedded/Envision/16 duo - warm freeform (ya-tho-sho treatment).avs", "status": "fallback", - "note": "a trivial scope (the real work is movement/APE driven) → swirl stand-in" + "note": "a trivial scope (the real work is movement/APE driven) → pulse rings stand-in" } ] \ No newline at end of file diff --git a/tools/converted/root/embedded/Amp Picks/Degnic - Retrowall (Yathosho's Supermicrocosm).ava b/tools/converted/root/embedded/Amp Picks/Degnic - Retrowall (Yathosho's Supermicrocosm).ava index 506130c..f8b74dd 100755 --- a/tools/converted/root/embedded/Amp Picks/Degnic - Retrowall (Yathosho's Supermicrocosm).ava +++ b/tools/converted/root/embedded/Amp Picks/Degnic - Retrowall (Yathosho's Supermicrocosm).ava @@ -1,25 +1,27 @@ name: "Retrowall (Yathosho's Supermicrocosm)" -mode: lines +mode: dots blend: additive -persist: 0.9 -linewidth: 1.6 +persist: 0.843 +linewidth: 2.178 [init] -n = 1100 +rings = 7 +n = rings * 103 [frame] -t = t + dt * (0.3 + bass_att * 1.8) -hue = hue + dt * 0.08 + beat * 0.01 +t = t + dt * (0.344 + bass_att * 0.6) +hue = hue + dt * 0.112 +squash = 0.315 + 0.25 * sin(t * 0.205) [point] -arm = floor(i * 5) -fa = frac(i * 5) -d = fa -ang = arm * 1.2566 + d * (1.4 + mid * 3) * 3.14159 + t -rad = (0.05 + d * d * 1.15) * (0.7 + bass * 0.5) -x = sin(ang) * rad / aspect -y = cos(ang) * rad -red = (0.3 + 0.7 * d) * (0.3 + bass) -green = (0.3 + 0.7 * d) * (0.25 + mid) -blue = (0.3 + 0.7 * d) * (0.2 + treb + hue * 0.2) -skip = if(below(fa, 0.04), 1, 0) +ring = floor(i * rings) +ri3 = frac(i * rings) +r0 = 0.16 + ring * 0.142 +a = ri3 * 6.28318 + t * (1.2 - ring * 0.18) + ring * 2.4 +x = sin(a) * r0 * (1 + bass * 0.18) / aspect +y = cos(a) * r0 * squash +sat = frac(ri3 * 5) +size = if(below(sat, 0.14), 3 + bass * 3, 1) +red = 0.25 + bass * 0.5 + ring * 0.07 * (0.45 + 0.55 * sin(hue * 6.28318 + ring * 1.3)) +green = 0.25 + bass * 0.5 + ring * 0.07 * (0.45 + 0.55 * sin(hue * 6.28318 + ring * 1.3 + 2.09)) +blue = 0.25 + bass * 0.5 + ring * 0.07 * (0.45 + 0.55 * sin(hue * 6.28318 + ring * 1.3 + 4.19)) diff --git a/tools/converted/root/embedded/Amp Picks/Degnic-Adrealine rush.ava b/tools/converted/root/embedded/Amp Picks/Degnic-Adrealine rush.ava index 796f723..2673a6f 100755 --- a/tools/converted/root/embedded/Amp Picks/Degnic-Adrealine rush.ava +++ b/tools/converted/root/embedded/Amp Picks/Degnic-Adrealine rush.ava @@ -1,25 +1,24 @@ name: "Adrealine rush" mode: dots blend: additive -persist: 0.82 -linewidth: 2.5 +persist: 0.826 +linewidth: 1.803 [init] -n = 850 +n = 1287 [frame] -travel = travel + dt * (0.2 + vol_att * 1.6) -hue = hue + dt * 0.05 +t = t + dt * 0.304 +hue = hue + dt * 0.11 [point] -a = rand(i * 7.3) * 6.28318 -z = frac(rand(i * 3.1 + 5) + travel * (0.5 + rand(i + 9) * 0.7)) -rad = z * z * 1.1 -x = sin(a) * rad / aspect -y = cos(a) * rad -tw = 0.4 + 0.6 * sin(z * 40 + time * 3) * (0.5 + treb) -red = tw * (0.5 + 0.5 * sin(hue * 6.28318 + i * 3)) -green = tw * (0.5 + 0.5 * sin(hue * 6.28318 + i * 3 + 2.09)) -blue = tw * (0.5 + 0.5 * sin(hue * 6.28318 + i * 3 + 4.19)) -size = 1 + z * 3 * (0.5 + bass) -skip = if(above(z, 0.97), 1, 0) +u = rand(i * 1.7) * 2 - 1 +w = rand(i * 3.3 + 11) * 2 - 1 +m = sin((u * 2.681 + w * 5.047 + t) * 3.14159) * sin((u * 6.682 - w * 2.465 - t * 0.7) * 3.14159) +x = u * 0.907 / aspect +y = w * 0.875 +lum = max(0, m) * (0.3 + bass * 0.9) + 0.06 +red = lum * 0.3 +green = lum * 0.65 +blue = min(1, lum * 1.3) +size = 1 + abs(m) * 3.025 diff --git a/tools/converted/root/embedded/Amp Picks/Duo - Alien Heart.ava b/tools/converted/root/embedded/Amp Picks/Duo - Alien Heart.ava index 61b26e3..6f88c30 100755 --- a/tools/converted/root/embedded/Amp Picks/Duo - Alien Heart.ava +++ b/tools/converted/root/embedded/Amp Picks/Duo - Alien Heart.ava @@ -1,29 +1,24 @@ name: "Alien Heart" mode: lines blend: additive -persist: 0.88 -linewidth: 2 +persist: 0.897 +linewidth: 1.95 [init] -n = 720 +n = 1015 [frame] -hue = hue + dt * (0.06 + mid * 0.2) -travel = travel + dt * (0.3 + bass_att * 1.4) - -[beat] -flash = 1 +t = t + dt * (0.377 + bass_att * 1.5) +hue = hue + dt * 0.038 [point] -g = floor(i * 9) -gi = frac(i * 9) -ph = frac(rand(g * 5.1 + 1) + travel * (0.6 + rand(g + 17) * 0.8)) -a = gi * 6.28318 -rad = ph * (0.25 + bass * 0.6 + flash * 0.08) -x = sin(a) * rad / aspect -y = cos(a) * rad -fade = sin(ph * 3.14159) -red = fade * (0.3 + 0.7 * sin(hue * 6.28318 + g * 0.7)) -green = fade * (0.3 + 0.7 * sin(hue * 6.28318 + g * 0.7 + 2.09)) -blue = fade * (0.3 + 0.7 * sin(hue * 6.28318 + g * 0.7 + 4.19)) -skip = if(above(ph, 0.95), 1, 0) +ring = floor(i * 29) +ri2 = frac(i * 29) +z = frac(ring / 29 + t) +rad = 0.05 + z * 0.917 +a = ri2 * 6.28318 + ring * 0.423 + sin(t * 0.7) * 2 +x = sin(a) * rad * (0.55 + sv * 0.656) / aspect +y = cos(a) * rad * (0.55 + sv * 0.656) +red = (1 - z) * (0.3 + bass * 0.7) * abs(sin(z * 4.256)) +green = (1 - z) * (0.3 + bass * 0.7) * 0.22 +blue = (1 - z) * (0.3 + bass * 0.7) * abs(cos(z * 4.256)) diff --git a/tools/converted/root/embedded/Amp Picks/Duo - Brainstorm.ava b/tools/converted/root/embedded/Amp Picks/Duo - Brainstorm.ava index b0364c1..6630700 100755 --- a/tools/converted/root/embedded/Amp Picks/Duo - Brainstorm.ava +++ b/tools/converted/root/embedded/Amp Picks/Duo - Brainstorm.ava @@ -1,25 +1,31 @@ name: "Brainstorm" mode: lines blend: additive -persist: 0.9 -linewidth: 1.6 +persist: 0.859 +linewidth: 2.309 [init] -n = 1100 +segs = 6 +n = 584 [frame] -t = t + dt * (0.3 + bass_att * 1.8) -hue = hue + dt * 0.08 + beat * 0.01 +rot = rot + dt * (0.093 + mid_att * 0.5) +hue = hue + dt * 0.084 +flash = flash * 0.85 + +[beat] +flash = 1 [point] -arm = floor(i * 5) -fa = frac(i * 5) -d = fa -ang = arm * 1.2566 + d * (1.4 + mid * 3) * 3.14159 + t -rad = (0.05 + d * d * 1.15) * (0.7 + bass * 0.5) -x = sin(ang) * rad / aspect -y = cos(ang) * rad -red = (0.3 + 0.7 * d) * (0.3 + bass) -green = (0.3 + 0.7 * d) * (0.25 + mid) -blue = (0.3 + 0.7 * d) * (0.2 + treb + hue * 0.2) -skip = if(below(fa, 0.04), 1, 0) +seg = floor(i * segs) +si = frac(i * segs) +a0 = si * 6.28318 / segs + rot +amp = 0.1 + sv * 0.55 + bass * 0.25 + flash * 0.06 +rad = 0.15 + amp * (0.4 + 0.6 * sin(a0 * 9 + time * 2)) +a = seg * 6.28318 / segs + a0 * if(below(seg % 2, 1), 1, -1) +x = sin(a) * rad / aspect +y = cos(a) * rad +red = 0.3 + amp * 1.3 * 0.85 +green = 0.3 + amp * 1.3 * 0.92 +blue = 0.3 + amp * 1.3 +skip = if(above(si, 0.96), 1, 0) diff --git a/tools/converted/root/embedded/Amp Picks/EL-VIS - Molecules (S_KuPeRS Remix).ava b/tools/converted/root/embedded/Amp Picks/EL-VIS - Molecules (S_KuPeRS Remix).ava index 4058060..1f791f5 100755 --- a/tools/converted/root/embedded/Amp Picks/EL-VIS - Molecules (S_KuPeRS Remix).ava +++ b/tools/converted/root/embedded/Amp Picks/EL-VIS - Molecules (S_KuPeRS Remix).ava @@ -1,25 +1,25 @@ name: "Molecules (S_KuPeRS Remix)" -mode: dots +mode: lines blend: additive -persist: 0.82 -linewidth: 2.5 +persist: 0.88 +linewidth: 1.388 [init] -n = 850 +n = 1119 [frame] -travel = travel + dt * (0.2 + vol_att * 1.6) -hue = hue + dt * 0.05 +t = t + dt * (0.211 + bass_att * 1.8) +hue = hue + dt * 0.042 + beat * 0.012 [point] -a = rand(i * 7.3) * 6.28318 -z = frac(rand(i * 3.1 + 5) + travel * (0.5 + rand(i + 9) * 0.7)) -rad = z * z * 1.1 -x = sin(a) * rad / aspect -y = cos(a) * rad -tw = 0.4 + 0.6 * sin(z * 40 + time * 3) * (0.5 + treb) -red = tw * (0.5 + 0.5 * sin(hue * 6.28318 + i * 3)) -green = tw * (0.5 + 0.5 * sin(hue * 6.28318 + i * 3 + 2.09)) -blue = tw * (0.5 + 0.5 * sin(hue * 6.28318 + i * 3 + 4.19)) -size = 1 + z * 3 * (0.5 + bass) -skip = if(above(z, 0.97), 1, 0) +arm = floor(i * 3) +fa = frac(i * 3) +d = fa +ang = arm * 1.551 + d * 1.047 * 3.14159 + t +rad = (0.04 + pow(d, 1.714) * 1.15) * (0.7 + bass * 0.5) +x = sin(ang) * rad / aspect +y = cos(ang) * rad +red = (0.3 + 0.7 * d) * (0.3 + mid) * abs(sin(d * 2.325)) +green = (0.3 + 0.7 * d) * (0.3 + mid) * 0.22 +blue = (0.3 + 0.7 * d) * (0.3 + mid) * abs(cos(d * 2.325)) +skip = if(below(fa, 0.04), 1, 0) diff --git a/tools/converted/root/embedded/Amp Picks/L1quid - Take the Veil.ava b/tools/converted/root/embedded/Amp Picks/L1quid - Take the Veil.ava index 0054f09..28e24d5 100755 --- a/tools/converted/root/embedded/Amp Picks/L1quid - Take the Veil.ava +++ b/tools/converted/root/embedded/Amp Picks/L1quid - Take the Veil.ava @@ -1,29 +1,22 @@ name: "Take the Veil" -mode: dots +mode: lines blend: additive -persist: 0.78 -linewidth: 2.5 +persist: 0.895 +linewidth: 1.78 [init] -cols = 36 -n = cols * cols +n = 674 [frame] -rot = rot + dt * (0.05 + mid * 0.4) -hue = hue + dt * (0.04 + treb * 0.1) +t = t + dt * 0.275 +hue = hue + dt * 0.052 [point] -cx = floor(i * cols) / (cols - 1) -cy = frac(i * cols) -h = sv * 0.35 -ux = (cx - 0.5) * 1.6 -uy = (cy - 0.5) * 1.6 -rx = ux * cos(rot) - uy * sin(rot) -ry = ux * sin(rot) + uy * cos(rot) -x = (rx / aspect) * (1 - h * 0.7) -y = ry * (1 - h * 0.7) -lum = 0.25 + h * 2.2 -red = lum * (0.6 + 0.4 * sin(hue * 6.28318 + cx * 3)) -green = lum * (0.6 + 0.4 * sin(hue * 6.28318 + cx * 3 + 2.09)) -blue = lum * (0.6 + 0.4 * sin(hue * 6.28318 + cx * 3 + 4.19)) -size = 1.2 + h * 5 +ph = i * 6.28318 * 1.521 +fa = 3 + mid * 0.35 +fb = 6 + bass * 0.45 +x = sin(ph * fa + t) * (0.5 + bass * 0.3) / aspect +y = sin(ph * fb + t * 1.3 + 0.957) * (0.5 + treb * 0.35) +red = 0.3 + 0.45 * sin(ph * 2 + t) + abs(v) * 0.6 * (0.25 + bass * 0.95) +green = 0.3 + 0.45 * sin(ph * 2 + t) + abs(v) * 0.6 * (0.25 + mid * 0.95) +blue = 0.3 + 0.45 * sin(ph * 2 + t) + abs(v) * 0.6 * (0.25 + treb * 0.95) diff --git a/tools/converted/root/embedded/Amp Picks/S_KuPeRS - ...hidden track....ava b/tools/converted/root/embedded/Amp Picks/S_KuPeRS - ...hidden track....ava index 8fc37e1..a711442 100755 --- a/tools/converted/root/embedded/Amp Picks/S_KuPeRS - ...hidden track....ava +++ b/tools/converted/root/embedded/Amp Picks/S_KuPeRS - ...hidden track....ava @@ -1,25 +1,30 @@ name: "...hidden track..." -mode: dots +mode: lines blend: additive -persist: 0.82 -linewidth: 2.5 +persist: 0.805 +linewidth: 2.555 [init] -n = 850 +n = 205 [frame] -travel = travel + dt * (0.2 + vol_att * 1.6) -hue = hue + dt * 0.05 +hue = hue + dt * 0.045 + beat * 0.01 +travel = travel + dt * (0.253 + bass_att * 1.4) +flash = flash * 0.86 + +[beat] +flash = 1 [point] -a = rand(i * 7.3) * 6.28318 -z = frac(rand(i * 3.1 + 5) + travel * (0.5 + rand(i + 9) * 0.7)) -rad = z * z * 1.1 +g = floor(i * 5) +gi = frac(i * 5) +ph = frac(rand(g * 5.1 + 1) + travel * (0.55 + rand(g + 17) * 0.85)) +a = gi * 6.28318 +rad = ph * (0.232 + bass * 0.659 + flash * 0.08) x = sin(a) * rad / aspect y = cos(a) * rad -tw = 0.4 + 0.6 * sin(z * 40 + time * 3) * (0.5 + treb) -red = tw * (0.5 + 0.5 * sin(hue * 6.28318 + i * 3)) -green = tw * (0.5 + 0.5 * sin(hue * 6.28318 + i * 3 + 2.09)) -blue = tw * (0.5 + 0.5 * sin(hue * 6.28318 + i * 3 + 4.19)) -size = 1 + z * 3 * (0.5 + bass) -skip = if(above(z, 0.97), 1, 0) +fade = sin(ph * 3.14159) +red = min(1, fade * (0.35 + flash * 0.4) * 1.3) +green = fade * (0.35 + flash * 0.4) * 0.5 +blue = fade * (0.35 + flash * 0.4) * 0.12 +skip = if(above(ph, 0.96), 1, 0) diff --git a/tools/converted/root/embedded/Amp Picks/S_KuPeRS - Arctic Rainbow.ava b/tools/converted/root/embedded/Amp Picks/S_KuPeRS - Arctic Rainbow.ava index 88f1aeb..2e40d49 100755 --- a/tools/converted/root/embedded/Amp Picks/S_KuPeRS - Arctic Rainbow.ava +++ b/tools/converted/root/embedded/Amp Picks/S_KuPeRS - Arctic Rainbow.ava @@ -1,29 +1,27 @@ name: "Arctic Rainbow" mode: dots blend: additive -persist: 0.78 -linewidth: 2.5 +persist: 0.789 +linewidth: 1.877 [init] -cols = 36 -n = cols * cols +cols = 48 +n = 918 [frame] -rot = rot + dt * (0.05 + mid * 0.4) -hue = hue + dt * (0.04 + treb * 0.1) +fall = fall + dt * (0.855 + vol_att * 1.119) +hue = hue + dt * 0.034 [point] -cx = floor(i * cols) / (cols - 1) -cy = frac(i * cols) -h = sv * 0.35 -ux = (cx - 0.5) * 1.6 -uy = (cy - 0.5) * 1.6 -rx = ux * cos(rot) - uy * sin(rot) -ry = ux * sin(rot) + uy * cos(rot) -x = (rx / aspect) * (1 - h * 0.7) -y = ry * (1 - h * 0.7) -lum = 0.25 + h * 2.2 -red = lum * (0.6 + 0.4 * sin(hue * 6.28318 + cx * 3)) -green = lum * (0.6 + 0.4 * sin(hue * 6.28318 + cx * 3 + 2.09)) -blue = lum * (0.6 + 0.4 * sin(hue * 6.28318 + cx * 3 + 4.19)) -size = 1.2 + h * 5 +col = floor(i * cols) +ci = frac(i * cols) +xx = (col / cols - 0.5) * 1.9 +yf = frac(rand(col * 3.7 + 1) + fall * (0.55 + rand(col + 5) * 0.5)) +tail = rand(col * 1.3 + 9) * 0.297 + 0.04 +yy = (yf * 2 - 1) * 1.05 + ci * tail +x = xx / aspect +y = yy +red = (1 - ci) * (0.2 + treb * 0.85) + 0.04 * 0.85 +green = (1 - ci) * (0.2 + treb * 0.85) + 0.04 * 0.92 +blue = (1 - ci) * (0.2 + treb * 0.85) + 0.04 +skip = if(above(abs(yy), 1.02), 1, 0) diff --git a/tools/converted/root/embedded/Amp Picks/S_KuPeRS - Chinook.ava b/tools/converted/root/embedded/Amp Picks/S_KuPeRS - Chinook.ava index edeabd6..2c63abc 100755 --- a/tools/converted/root/embedded/Amp Picks/S_KuPeRS - Chinook.ava +++ b/tools/converted/root/embedded/Amp Picks/S_KuPeRS - Chinook.ava @@ -1,29 +1,27 @@ name: "Chinook" -mode: lines +mode: dots blend: additive -persist: 0.88 -linewidth: 2 +persist: 0.831 +linewidth: 2.299 [init] -n = 720 +bars = 30 +n = bars * 9 [frame] -hue = hue + dt * (0.06 + mid * 0.2) -travel = travel + dt * (0.3 + bass_att * 1.4) - -[beat] -flash = 1 +rot = rot + dt * (0.07 + mid * 0.3) +hue = hue + dt * 0.106 [point] -g = floor(i * 9) -gi = frac(i * 9) -ph = frac(rand(g * 5.1 + 1) + travel * (0.6 + rand(g + 17) * 0.8)) -a = gi * 6.28318 -rad = ph * (0.25 + bass * 0.6 + flash * 0.08) +bar = floor(i * bars) +bi = frac(i * bars) +lvl = getspec(bar / bars, 0, 0) +h = lvl * 0.893 +a = bar * 6.28318 / bars + rot +rad = 0.142 + bi * h x = sin(a) * rad / aspect y = cos(a) * rad -fade = sin(ph * 3.14159) -red = fade * (0.3 + 0.7 * sin(hue * 6.28318 + g * 0.7)) -green = fade * (0.3 + 0.7 * sin(hue * 6.28318 + g * 0.7 + 2.09)) -blue = fade * (0.3 + 0.7 * sin(hue * 6.28318 + g * 0.7 + 4.19)) -skip = if(above(ph, 0.95), 1, 0) +red = 0.25 + bi * 0.75 * 0.3 +green = 0.25 + bi * 0.75 * 0.65 +blue = min(1, 0.25 + bi * 0.75 * 1.3) +skip = if(above(bi, 0.97), 1, 0) diff --git a/tools/converted/root/embedded/Amp Picks/S_KuPeRS - Hexual Healing.ava b/tools/converted/root/embedded/Amp Picks/S_KuPeRS - Hexual Healing.ava index 053bacc..f30c2c5 100755 --- a/tools/converted/root/embedded/Amp Picks/S_KuPeRS - Hexual Healing.ava +++ b/tools/converted/root/embedded/Amp Picks/S_KuPeRS - Hexual Healing.ava @@ -1,25 +1,28 @@ name: "Hexual Healing" mode: dots blend: additive -persist: 0.82 -linewidth: 2.5 +persist: 0.785 +linewidth: 2.432 [init] -n = 850 +cols = 34 +n = cols * cols [frame] -travel = travel + dt * (0.2 + vol_att * 1.6) -hue = hue + dt * 0.05 +rot = rot + dt * (0.072 + mid * 0.4) +hue = hue + dt * 0.062 [point] -a = rand(i * 7.3) * 6.28318 -z = frac(rand(i * 3.1 + 5) + travel * (0.5 + rand(i + 9) * 0.7)) -rad = z * z * 1.1 -x = sin(a) * rad / aspect -y = cos(a) * rad -tw = 0.4 + 0.6 * sin(z * 40 + time * 3) * (0.5 + treb) -red = tw * (0.5 + 0.5 * sin(hue * 6.28318 + i * 3)) -green = tw * (0.5 + 0.5 * sin(hue * 6.28318 + i * 3 + 2.09)) -blue = tw * (0.5 + 0.5 * sin(hue * 6.28318 + i * 3 + 4.19)) -size = 1 + z * 3 * (0.5 + bass) -skip = if(above(z, 0.97), 1, 0) +cx = floor(i * cols) / (cols - 1) +cy = frac(i * cols) +h = sv * 0.506 +ux = (cx - 0.5) * 1.674 +uy = (cy - 0.5) * 1.674 +rx = ux * cos(rot) - uy * sin(rot) +ry = ux * sin(rot) + uy * cos(rot) +x = (rx / aspect) * (1 - h * 0.7) +y = ry * (1 - h * 0.7) +red = min(1, 0.22 + h * 2.2 * 1.3) +green = 0.22 + h * 2.2 * 0.5 +blue = 0.22 + h * 2.2 * 0.12 +size = 1.2 + h * 5 diff --git a/tools/converted/root/embedded/Amp Picks/S_KuPeRS - Inverse Kinetics.ava b/tools/converted/root/embedded/Amp Picks/S_KuPeRS - Inverse Kinetics.ava index 4acce55..f78cea0 100755 --- a/tools/converted/root/embedded/Amp Picks/S_KuPeRS - Inverse Kinetics.ava +++ b/tools/converted/root/embedded/Amp Picks/S_KuPeRS - Inverse Kinetics.ava @@ -1,31 +1,30 @@ name: "Inverse Kinetics" -mode: lines +mode: dots blend: additive -persist: 0.86 -linewidth: 1.8 +persist: 0.805 +linewidth: 2.613 [init] -n = 560 -segs = 8 +n = 817 [frame] -rot = rot + dt * (0.08 + mid_att * 0.5) -hue = hue + dt * (0.07 + treb * 0.08) +tt = tt + dt * (0.5 + bass_att * 1.1) +hue = hue + dt * 0.103 +burst = burst * 0.9 [beat] -flash = 1 +burst = 1 [point] -seg = floor(i * segs) -si = frac(i * segs) -a0 = si * 6.28318 / segs + rot -amp = 0.12 + sv * 0.55 + bass * 0.25 + flash * 0.05 -rad = 0.15 + amp * (0.4 + 0.6 * sin(a0 * 6 + time * 2)) -a = seg * 6.28318 / segs + a0 * if(below(seg % 2, 1), 1, -1) -x = sin(a) * rad / aspect -y = cos(a) * rad -lum = 0.35 + amp * 1.2 -red = lum * (0.6 + 0.4 * sin(hue * 6.28318 + seg)) -green = lum * (0.6 + 0.4 * sin(hue * 6.28318 + seg + 2.09)) -blue = lum * (0.6 + 0.4 * sin(hue * 6.28318 + seg + 4.19)) -skip = if(above(si, 0.96), 1, 0) +jet = floor(i * 2) +life = frac(rand(i * 7.7 + jet) + tt * (0.35 + rand(i + 3) * 0.65)) +a = jet * 6.28318 / 2 + rand(i * 5.1 + jet) * 0.736 +spd = 0.4 + rand(i * 9.2 + jet) * 0.8 +px = cos(a) * spd * life +py = sin(a) * spd * life - 1.2 * life * life +x = px * (0.85 + bass * 0.35) / aspect +y = py +red = max(0, 1 - life) * (0.35 + burst * 0.55) * abs(sin(life * 4)) +green = max(0, 1 - life) * (0.35 + burst * 0.55) * 0.22 +blue = max(0, 1 - life) * (0.35 + burst * 0.55) * abs(cos(life * 4)) +skip = if(above(life, 0.94), 1, 0) diff --git a/tools/converted/root/embedded/Amp Picks/S_KuPeRS - Kingish.ava b/tools/converted/root/embedded/Amp Picks/S_KuPeRS - Kingish.ava index a5ced2c..237cccc 100755 --- a/tools/converted/root/embedded/Amp Picks/S_KuPeRS - Kingish.ava +++ b/tools/converted/root/embedded/Amp Picks/S_KuPeRS - Kingish.ava @@ -1,25 +1,27 @@ name: "Kingish" mode: dots blend: additive -persist: 0.82 -linewidth: 2.5 +persist: 0.813 +linewidth: 2.025 [init] -n = 850 +spokes = 27 +n = spokes * 22 [frame] -travel = travel + dt * (0.2 + vol_att * 1.6) -hue = hue + dt * 0.05 +rot = rot + dt * (0.102 + mid * 0.4) +t = t + dt * 2.987 +hue = hue + dt * 0.075 [point] -a = rand(i * 7.3) * 6.28318 -z = frac(rand(i * 3.1 + 5) + travel * (0.5 + rand(i + 9) * 0.7)) -rad = z * z * 1.1 +sp = floor(i * spokes) +si = frac(i * spokes) +a = sp * 6.28318 / spokes + rot +wave = sin(si * 2 * 3.14159 - t) * (0.03 + bass * 0.28) +rad = 0.12 + si * 0.92 + wave x = sin(a) * rad / aspect y = cos(a) * rad -tw = 0.4 + 0.6 * sin(z * 40 + time * 3) * (0.5 + treb) -red = tw * (0.5 + 0.5 * sin(hue * 6.28318 + i * 3)) -green = tw * (0.5 + 0.5 * sin(hue * 6.28318 + i * 3 + 2.09)) -blue = tw * (0.5 + 0.5 * sin(hue * 6.28318 + i * 3 + 4.19)) -size = 1 + z * 3 * (0.5 + bass) -skip = if(above(z, 0.97), 1, 0) +red = (1 - si) * 0.45 + 0.15 + sv * 0.55 * abs(sin(sp * 0.4)) +green = (1 - si) * 0.45 + 0.15 + sv * 0.55 * 0.22 +blue = (1 - si) * 0.45 + 0.15 + sv * 0.55 * abs(cos(sp * 0.4)) +skip = if(above(si, 0.985), 1, 0) diff --git a/tools/converted/root/embedded/Amp Picks/S_KuPeRS - Spirit Realm (Degnic's Plasmoid RMX).ava b/tools/converted/root/embedded/Amp Picks/S_KuPeRS - Spirit Realm (Degnic's Plasmoid RMX).ava index 8f9d0bc..3949461 100755 --- a/tools/converted/root/embedded/Amp Picks/S_KuPeRS - Spirit Realm (Degnic's Plasmoid RMX).ava +++ b/tools/converted/root/embedded/Amp Picks/S_KuPeRS - Spirit Realm (Degnic's Plasmoid RMX).ava @@ -1,25 +1,23 @@ name: "Spirit Realm (Degnic's Plasmoid RMX)" mode: lines blend: additive -persist: 0.9 -linewidth: 1.6 +persist: 0.885 +linewidth: 2.389 [init] -n = 1100 +n = 1199 [frame] -t = t + dt * (0.3 + bass_att * 1.8) -hue = hue + dt * 0.08 + beat * 0.01 +t = t + dt * (0.344 + bass_att * 0.8) +sway = sway + dt * (0.5 + treb) +hue = hue + dt * 0.085 [point] -arm = floor(i * 5) -fa = frac(i * 5) -d = fa -ang = arm * 1.2566 + d * (1.4 + mid * 3) * 3.14159 + t -rad = (0.05 + d * d * 1.15) * (0.7 + bass * 0.5) -x = sin(ang) * rad / aspect -y = cos(ang) * rad -red = (0.3 + 0.7 * d) * (0.3 + bass) -green = (0.3 + 0.7 * d) * (0.25 + mid) -blue = (0.3 + 0.7 * d) * (0.2 + treb + hue * 0.2) -skip = if(below(fa, 0.04), 1, 0) +a = i * 6.28318 * 2 +wob = sin(a * 3 + t * 2) * (0.08 + treb * 0.3) +rad = (0.42 + mid * 0.25) * (0.85 + 0.15 * sin(a * 3 + sway)) + v * 0.422 - wob +x = sin(a) * rad / aspect +y = cos(a) * rad +red = 0.3 + abs(v) * 1.2 * (0.45 + 0.55 * sin(hue * 6.28318 + a * 0.5)) +green = 0.3 + abs(v) * 1.2 * (0.45 + 0.55 * sin(hue * 6.28318 + a * 0.5 + 2.09)) +blue = 0.3 + abs(v) * 1.2 * (0.45 + 0.55 * sin(hue * 6.28318 + a * 0.5 + 4.19)) diff --git a/tools/converted/root/embedded/Amp Picks/S_KuPeRS - Upward Current.ava b/tools/converted/root/embedded/Amp Picks/S_KuPeRS - Upward Current.ava index 181464e..85a12d5 100755 --- a/tools/converted/root/embedded/Amp Picks/S_KuPeRS - Upward Current.ava +++ b/tools/converted/root/embedded/Amp Picks/S_KuPeRS - Upward Current.ava @@ -1,25 +1,26 @@ name: "Upward Current" mode: lines blend: additive -persist: 0.9 -linewidth: 1.6 +persist: 0.914 +linewidth: 1.629 [init] -n = 900 +n = 869 [frame] -t = t + dt * (0.25 + bass_att * 1.5) -hue = hue + dt * 0.1 +t = t + dt * (0.134 + mid * 0.5) +hue = hue + dt * 0.122 +flash = flash * 0.87 + +[beat] +flash = 1 [point] -ring = floor(i * 24) -ri = frac(i * 24) -z = frac(ring / 24 + t) -rad = 0.06 + z * 0.9 -a = ri * 6.28318 + ring * 0.35 + sin(t * 0.7) * 2 -x = sin(a) * rad * (0.55 + sv * 0.9) / aspect -y = cos(a) * rad * (0.55 + sv * 0.9) -f = (1 - z) * (0.35 + bass * 0.65) -red = f * (0.45 + 0.55 * sin(hue * 6.28318 + z * 4)) -green = f * (0.45 + 0.55 * sin(hue * 6.28318 + z * 4 + 2.09)) -blue = f * (0.45 + 0.55 * sin(hue * 6.28318 + z * 4 + 4.19)) +th = i * 6.28318 * 2 + t +r = abs(cos(2 * th + bass * 0.656)) +rad = r * (0.5 + bass * 0.3 + sv * 0.2 + flash * 0.08) +x = sin(th) * rad / aspect +y = cos(th) * rad +red = 0.25 + 0.65 * r + v * 0.25 * abs(sin(th * 0.5)) +green = 0.25 + 0.65 * r + v * 0.25 * 0.22 +blue = 0.25 + 0.65 * r + v * 0.25 * abs(cos(th * 0.5)) diff --git a/tools/converted/root/embedded/Amp Picks/Tuggummi - Aqua-fumes.ava b/tools/converted/root/embedded/Amp Picks/Tuggummi - Aqua-fumes.ava index 97d89b8..bfb77ce 100755 --- a/tools/converted/root/embedded/Amp Picks/Tuggummi - Aqua-fumes.ava +++ b/tools/converted/root/embedded/Amp Picks/Tuggummi - Aqua-fumes.ava @@ -1,25 +1,25 @@ name: "Aqua-fumes" mode: dots blend: additive -persist: 0.82 -linewidth: 2.5 +persist: 0.787 +linewidth: 2.043 [init] -n = 850 +n = 966 [frame] -travel = travel + dt * (0.2 + vol_att * 1.6) -hue = hue + dt * 0.05 +travel = travel + dt * (0.347 + vol_att * 1.816) +hue = hue + dt * 0.076 [point] a = rand(i * 7.3) * 6.28318 z = frac(rand(i * 3.1 + 5) + travel * (0.5 + rand(i + 9) * 0.7)) -rad = z * z * 1.1 +rad = z * z * 1.075 x = sin(a) * rad / aspect y = cos(a) * rad tw = 0.4 + 0.6 * sin(z * 40 + time * 3) * (0.5 + treb) -red = tw * (0.5 + 0.5 * sin(hue * 6.28318 + i * 3)) -green = tw * (0.5 + 0.5 * sin(hue * 6.28318 + i * 3 + 2.09)) -blue = tw * (0.5 + 0.5 * sin(hue * 6.28318 + i * 3 + 4.19)) +red = tw * abs(sin(i * 3.959)) +green = tw * 0.22 +blue = tw * abs(cos(i * 3.959)) size = 1 + z * 3 * (0.5 + bass) skip = if(above(z, 0.97), 1, 0) diff --git a/tools/converted/root/embedded/Amp Picks/Tuggummi - Club Seizure (color enhanced mix).ava b/tools/converted/root/embedded/Amp Picks/Tuggummi - Club Seizure (color enhanced mix).ava index e27f757..a2e03bf 100755 --- a/tools/converted/root/embedded/Amp Picks/Tuggummi - Club Seizure (color enhanced mix).ava +++ b/tools/converted/root/embedded/Amp Picks/Tuggummi - Club Seizure (color enhanced mix).ava @@ -1,25 +1,28 @@ name: "Club Seizure (color enhanced mix)" mode: lines blend: additive -persist: 0.9 -linewidth: 1.6 +persist: 0.864 +linewidth: 2.379 [init] -n = 1100 +n = 946 [frame] -t = t + dt * (0.3 + bass_att * 1.8) -hue = hue + dt * 0.08 + beat * 0.01 +t = t + dt * (0.322 + bass_att * 0.9) +hue = hue + dt * 0.089 +flash = flash * 0.86 + +[beat] +flash = 1 [point] -arm = floor(i * 5) -fa = frac(i * 5) -d = fa -ang = arm * 1.2566 + d * (1.4 + mid * 3) * 3.14159 + t -rad = (0.05 + d * d * 1.15) * (0.7 + bass * 0.5) -x = sin(ang) * rad / aspect -y = cos(ang) * rad -red = (0.3 + 0.7 * d) * (0.3 + bass) -green = (0.3 + 0.7 * d) * (0.25 + mid) -blue = (0.3 + 0.7 * d) * (0.2 + treb + hue * 0.2) -skip = if(below(fa, 0.04), 1, 0) +st = floor(i * 2) +si = frac(i * 2) +s = si * 6 * 6.28318 + t +ph = st * 3.14159 +rad = (0.28 + bass * 0.32 + flash * 0.06) * (0.55 + 0.45 * (cos(s + ph) * 0.5 + 0.5)) +x = sin(s + ph) * rad / aspect +y = (si - 0.5) * 1.8 +red = 0.25 + 0.55 * (cos(s + ph) * 0.5 + 0.5) + treb * 0.25 * (0.45 + 0.55 * sin(hue * 6.28318 + s * 0.3)) +green = 0.25 + 0.55 * (cos(s + ph) * 0.5 + 0.5) + treb * 0.25 * (0.45 + 0.55 * sin(hue * 6.28318 + s * 0.3 + 2.09)) +blue = 0.25 + 0.55 * (cos(s + ph) * 0.5 + 0.5) + treb * 0.25 * (0.45 + 0.55 * sin(hue * 6.28318 + s * 0.3 + 4.19)) diff --git a/tools/converted/root/embedded/Amp Picks/Tuggummi - Electro blobs.ava b/tools/converted/root/embedded/Amp Picks/Tuggummi - Electro blobs.ava index 3564940..1ba4626 100755 --- a/tools/converted/root/embedded/Amp Picks/Tuggummi - Electro blobs.ava +++ b/tools/converted/root/embedded/Amp Picks/Tuggummi - Electro blobs.ava @@ -1,29 +1,31 @@ name: "Electro blobs" -mode: dots +mode: lines blend: additive -persist: 0.78 -linewidth: 2.5 +persist: 0.866 +linewidth: 1.536 [init] -cols = 36 -n = cols * cols +segs = 12 +n = 616 [frame] -rot = rot + dt * (0.05 + mid * 0.4) -hue = hue + dt * (0.04 + treb * 0.1) +rot = rot + dt * (0.085 + mid_att * 0.5) +hue = hue + dt * 0.131 +flash = flash * 0.85 + +[beat] +flash = 1 [point] -cx = floor(i * cols) / (cols - 1) -cy = frac(i * cols) -h = sv * 0.35 -ux = (cx - 0.5) * 1.6 -uy = (cy - 0.5) * 1.6 -rx = ux * cos(rot) - uy * sin(rot) -ry = ux * sin(rot) + uy * cos(rot) -x = (rx / aspect) * (1 - h * 0.7) -y = ry * (1 - h * 0.7) -lum = 0.25 + h * 2.2 -red = lum * (0.6 + 0.4 * sin(hue * 6.28318 + cx * 3)) -green = lum * (0.6 + 0.4 * sin(hue * 6.28318 + cx * 3 + 2.09)) -blue = lum * (0.6 + 0.4 * sin(hue * 6.28318 + cx * 3 + 4.19)) -size = 1.2 + h * 5 +seg = floor(i * segs) +si = frac(i * segs) +a0 = si * 6.28318 / segs + rot +amp = 0.1 + sv * 0.55 + bass * 0.25 + flash * 0.06 +rad = 0.15 + amp * (0.4 + 0.6 * sin(a0 * 5 + time * 2)) +a = seg * 6.28318 / segs + a0 * if(below(seg % 2, 1), 1, -1) +x = sin(a) * rad / aspect +y = cos(a) * rad +red = 0.3 + amp * 1.3 * 0.85 +green = 0.3 + amp * 1.3 * 0.92 +blue = 0.3 + amp * 1.3 +skip = if(above(si, 0.96), 1, 0) diff --git a/tools/converted/root/embedded/Amp Picks/Tuggummi - Kaleidofied.ava b/tools/converted/root/embedded/Amp Picks/Tuggummi - Kaleidofied.ava index 30a8415..a049ace 100755 --- a/tools/converted/root/embedded/Amp Picks/Tuggummi - Kaleidofied.ava +++ b/tools/converted/root/embedded/Amp Picks/Tuggummi - Kaleidofied.ava @@ -1,29 +1,23 @@ name: "Kaleidofied" mode: lines blend: additive -persist: 0.88 -linewidth: 2 +persist: 0.885 +linewidth: 1.542 [init] -n = 720 +n = 1126 [frame] -hue = hue + dt * (0.06 + mid * 0.2) -travel = travel + dt * (0.3 + bass_att * 1.4) - -[beat] -flash = 1 +t = t + dt * (0.589 + bass_att * 0.8) +sway = sway + dt * (0.5 + treb) +hue = hue + dt * 0.1 [point] -g = floor(i * 9) -gi = frac(i * 9) -ph = frac(rand(g * 5.1 + 1) + travel * (0.6 + rand(g + 17) * 0.8)) -a = gi * 6.28318 -rad = ph * (0.25 + bass * 0.6 + flash * 0.08) +a = i * 6.28318 * 1 +wob = sin(a * 3 + t * 2) * (0.08 + treb * 0.3) +rad = (0.42 + mid * 0.25) * (0.85 + 0.15 * sin(a * 3 + sway)) + v * 0.232 - wob x = sin(a) * rad / aspect y = cos(a) * rad -fade = sin(ph * 3.14159) -red = fade * (0.3 + 0.7 * sin(hue * 6.28318 + g * 0.7)) -green = fade * (0.3 + 0.7 * sin(hue * 6.28318 + g * 0.7 + 2.09)) -blue = fade * (0.3 + 0.7 * sin(hue * 6.28318 + g * 0.7 + 4.19)) -skip = if(above(ph, 0.95), 1, 0) +red = 0.3 + abs(v) * 1.2 * (0.45 + 0.55 * sin(hue * 6.28318 + a * 0.5)) +green = 0.3 + abs(v) * 1.2 * (0.45 + 0.55 * sin(hue * 6.28318 + a * 0.5 + 2.09)) +blue = 0.3 + abs(v) * 1.2 * (0.45 + 0.55 * sin(hue * 6.28318 + a * 0.5 + 4.19)) diff --git a/tools/converted/root/embedded/Amp Picks/Tuggummi - Magma Flow II.ava b/tools/converted/root/embedded/Amp Picks/Tuggummi - Magma Flow II.ava index 85f1bcd..437a325 100755 --- a/tools/converted/root/embedded/Amp Picks/Tuggummi - Magma Flow II.ava +++ b/tools/converted/root/embedded/Amp Picks/Tuggummi - Magma Flow II.ava @@ -1,25 +1,27 @@ name: "Magma Flow II" -mode: lines +mode: dots blend: additive -persist: 0.9 -linewidth: 1.6 +persist: 0.804 +linewidth: 2.633 [init] -n = 1100 +rings = 3 +n = rings * 104 [frame] -t = t + dt * (0.3 + bass_att * 1.8) -hue = hue + dt * 0.08 + beat * 0.01 +t = t + dt * (0.258 + bass_att * 0.6) +hue = hue + dt * 0.036 +squash = 0.387 + 0.25 * sin(t * 0.203) [point] -arm = floor(i * 5) -fa = frac(i * 5) -d = fa -ang = arm * 1.2566 + d * (1.4 + mid * 3) * 3.14159 + t -rad = (0.05 + d * d * 1.15) * (0.7 + bass * 0.5) -x = sin(ang) * rad / aspect -y = cos(ang) * rad -red = (0.3 + 0.7 * d) * (0.3 + bass) -green = (0.3 + 0.7 * d) * (0.25 + mid) -blue = (0.3 + 0.7 * d) * (0.2 + treb + hue * 0.2) -skip = if(below(fa, 0.04), 1, 0) +ring = floor(i * rings) +ri3 = frac(i * rings) +r0 = 0.16 + ring * 0.148 +a = ri3 * 6.28318 + t * (1.2 - ring * 0.18) + ring * 2.4 +x = sin(a) * r0 * (1 + bass * 0.18) / aspect +y = cos(a) * r0 * squash +sat = frac(ri3 * 5) +size = if(below(sat, 0.14), 3 + bass * 3, 1) +red = 0.25 + bass * 0.5 + ring * 0.07 * abs(sin(ring * 1.3)) +green = 0.25 + bass * 0.5 + ring * 0.07 * 0.22 +blue = 0.25 + bass * 0.5 + ring * 0.07 * abs(cos(ring * 1.3)) diff --git a/tools/converted/root/embedded/Amp Picks/Tuggummi - Multiple Orgasms.ava b/tools/converted/root/embedded/Amp Picks/Tuggummi - Multiple Orgasms.ava index e811043..1077cc6 100755 --- a/tools/converted/root/embedded/Amp Picks/Tuggummi - Multiple Orgasms.ava +++ b/tools/converted/root/embedded/Amp Picks/Tuggummi - Multiple Orgasms.ava @@ -1,31 +1,27 @@ name: "Multiple Orgasms" mode: lines blend: additive -persist: 0.86 -linewidth: 1.8 +persist: 0.873 +linewidth: 1.6 [init] -n = 560 -segs = 8 +spokes = 30 +n = spokes * 33 [frame] -rot = rot + dt * (0.08 + mid_att * 0.5) -hue = hue + dt * (0.07 + treb * 0.08) - -[beat] -flash = 1 +rot = rot + dt * (0.106 + mid * 0.4) +t = t + dt * 2.164 +hue = hue + dt * 0.106 [point] -seg = floor(i * segs) -si = frac(i * segs) -a0 = si * 6.28318 / segs + rot -amp = 0.12 + sv * 0.55 + bass * 0.25 + flash * 0.05 -rad = 0.15 + amp * (0.4 + 0.6 * sin(a0 * 6 + time * 2)) -a = seg * 6.28318 / segs + a0 * if(below(seg % 2, 1), 1, -1) +sp = floor(i * spokes) +si = frac(i * spokes) +a = sp * 6.28318 / spokes + rot +wave = sin(si * 4 * 3.14159 - t) * (0.03 + bass * 0.28) +rad = 0.12 + si * 0.919 + wave x = sin(a) * rad / aspect y = cos(a) * rad -lum = 0.35 + amp * 1.2 -red = lum * (0.6 + 0.4 * sin(hue * 6.28318 + seg)) -green = lum * (0.6 + 0.4 * sin(hue * 6.28318 + seg + 2.09)) -blue = lum * (0.6 + 0.4 * sin(hue * 6.28318 + seg + 4.19)) -skip = if(above(si, 0.96), 1, 0) +red = (1 - si) * 0.45 + 0.15 + sv * 0.55 * (0.45 + 0.55 * sin(hue * 6.28318 + sp * 0.4)) +green = (1 - si) * 0.45 + 0.15 + sv * 0.55 * (0.45 + 0.55 * sin(hue * 6.28318 + sp * 0.4 + 2.09)) +blue = (1 - si) * 0.45 + 0.15 + sv * 0.55 * (0.45 + 0.55 * sin(hue * 6.28318 + sp * 0.4 + 4.19)) +skip = if(above(si, 0.985), 1, 0) diff --git a/tools/converted/root/embedded/Amp Picks/Tuggummi - Pina Colada.ava b/tools/converted/root/embedded/Amp Picks/Tuggummi - Pina Colada.ava index ad0192f..2e2a5fd 100755 --- a/tools/converted/root/embedded/Amp Picks/Tuggummi - Pina Colada.ava +++ b/tools/converted/root/embedded/Amp Picks/Tuggummi - Pina Colada.ava @@ -1,31 +1,25 @@ name: "Pina Colada" mode: lines blend: additive -persist: 0.86 -linewidth: 1.8 +persist: 0.887 +linewidth: 1.779 [init] -n = 560 -segs = 8 +n = 943 [frame] -rot = rot + dt * (0.08 + mid_att * 0.5) -hue = hue + dt * (0.07 + treb * 0.08) - -[beat] -flash = 1 +t = t + dt * (0.219 + bass_att * 1.8) +hue = hue + dt * 0.098 + beat * 0.012 [point] -seg = floor(i * segs) -si = frac(i * segs) -a0 = si * 6.28318 / segs + rot -amp = 0.12 + sv * 0.55 + bass * 0.25 + flash * 0.05 -rad = 0.15 + amp * (0.4 + 0.6 * sin(a0 * 6 + time * 2)) -a = seg * 6.28318 / segs + a0 * if(below(seg % 2, 1), 1, -1) -x = sin(a) * rad / aspect -y = cos(a) * rad -lum = 0.35 + amp * 1.2 -red = lum * (0.6 + 0.4 * sin(hue * 6.28318 + seg)) -green = lum * (0.6 + 0.4 * sin(hue * 6.28318 + seg + 2.09)) -blue = lum * (0.6 + 0.4 * sin(hue * 6.28318 + seg + 4.19)) -skip = if(above(si, 0.96), 1, 0) +arm = floor(i * 8) +fa = frac(i * 8) +d = fa +ang = arm * 1.519 + d * 1.263 * 3.14159 + t +rad = (0.04 + pow(d, 2.354) * 1.15) * (0.7 + bass * 0.5) +x = sin(ang) * rad / aspect +y = cos(ang) * rad +red = (0.3 + 0.7 * d) * (0.3 + mid) * (0.25 + bass * 0.95) +green = (0.3 + 0.7 * d) * (0.3 + mid) * (0.25 + mid * 0.95) +blue = (0.3 + 0.7 * d) * (0.3 + mid) * (0.25 + treb * 0.95) +skip = if(below(fa, 0.04), 1, 0) diff --git a/tools/converted/root/embedded/Amp Picks/Tuggummi - Scope in Spotlight II.ava b/tools/converted/root/embedded/Amp Picks/Tuggummi - Scope in Spotlight II.ava index 83637e4..a490ee1 100755 --- a/tools/converted/root/embedded/Amp Picks/Tuggummi - Scope in Spotlight II.ava +++ b/tools/converted/root/embedded/Amp Picks/Tuggummi - Scope in Spotlight II.ava @@ -1,29 +1,31 @@ name: "Scope in Spotlight II" mode: lines blend: additive -persist: 0.88 -linewidth: 2 +persist: 0.854 +linewidth: 2.056 [init] -n = 720 +segs = 7 +n = 462 [frame] -hue = hue + dt * (0.06 + mid * 0.2) -travel = travel + dt * (0.3 + bass_att * 1.4) +rot = rot + dt * (0.107 + mid_att * 0.5) +hue = hue + dt * 0.035 +flash = flash * 0.85 [beat] flash = 1 [point] -g = floor(i * 9) -gi = frac(i * 9) -ph = frac(rand(g * 5.1 + 1) + travel * (0.6 + rand(g + 17) * 0.8)) -a = gi * 6.28318 -rad = ph * (0.25 + bass * 0.6 + flash * 0.08) +seg = floor(i * segs) +si = frac(i * segs) +a0 = si * 6.28318 / segs + rot +amp = 0.1 + sv * 0.55 + bass * 0.25 + flash * 0.06 +rad = 0.15 + amp * (0.4 + 0.6 * sin(a0 * 4 + time * 2)) +a = seg * 6.28318 / segs + a0 * if(below(seg % 2, 1), 1, -1) x = sin(a) * rad / aspect y = cos(a) * rad -fade = sin(ph * 3.14159) -red = fade * (0.3 + 0.7 * sin(hue * 6.28318 + g * 0.7)) -green = fade * (0.3 + 0.7 * sin(hue * 6.28318 + g * 0.7 + 2.09)) -blue = fade * (0.3 + 0.7 * sin(hue * 6.28318 + g * 0.7 + 4.19)) -skip = if(above(ph, 0.95), 1, 0) +red = min(1, 0.3 + amp * 1.3 * 1.3) +green = 0.3 + amp * 1.3 * 0.5 +blue = 0.3 + amp * 1.3 * 0.12 +skip = if(above(si, 0.96), 1, 0) diff --git a/tools/converted/root/embedded/Amp Picks/Tuggummi - Solero Shots.ava b/tools/converted/root/embedded/Amp Picks/Tuggummi - Solero Shots.ava index cb0acad..439ddcb 100755 --- a/tools/converted/root/embedded/Amp Picks/Tuggummi - Solero Shots.ava +++ b/tools/converted/root/embedded/Amp Picks/Tuggummi - Solero Shots.ava @@ -1,25 +1,27 @@ name: "Solero Shots" -mode: dots +mode: lines blend: additive -persist: 0.82 -linewidth: 2.5 +persist: 0.878 +linewidth: 2.226 [init] -n = 850 +bars = 40 +n = bars * 12 [frame] -travel = travel + dt * (0.2 + vol_att * 1.6) -hue = hue + dt * 0.05 +rot = rot + dt * (0.078 + mid * 0.3) +hue = hue + dt * 0.032 [point] -a = rand(i * 7.3) * 6.28318 -z = frac(rand(i * 3.1 + 5) + travel * (0.5 + rand(i + 9) * 0.7)) -rad = z * z * 1.1 +bar = floor(i * bars) +bi = frac(i * bars) +lvl = getspec(bar / bars, 0, 0) +h = lvl * 0.813 +a = bar * 6.28318 / bars + rot +rad = 0.218 + bi * h x = sin(a) * rad / aspect y = cos(a) * rad -tw = 0.4 + 0.6 * sin(z * 40 + time * 3) * (0.5 + treb) -red = tw * (0.5 + 0.5 * sin(hue * 6.28318 + i * 3)) -green = tw * (0.5 + 0.5 * sin(hue * 6.28318 + i * 3 + 2.09)) -blue = tw * (0.5 + 0.5 * sin(hue * 6.28318 + i * 3 + 4.19)) -size = 1 + z * 3 * (0.5 + bass) -skip = if(above(z, 0.97), 1, 0) +red = 0.25 + bi * 0.75 * 0.3 +green = 0.25 + bi * 0.75 * 0.65 +blue = min(1, 0.25 + bi * 0.75 * 1.3) +skip = if(above(bi, 0.97), 1, 0) diff --git a/tools/converted/root/embedded/Amp Picks/Tuggummi - Square Minded.ava b/tools/converted/root/embedded/Amp Picks/Tuggummi - Square Minded.ava index 32d4f16..c4e372e 100755 --- a/tools/converted/root/embedded/Amp Picks/Tuggummi - Square Minded.ava +++ b/tools/converted/root/embedded/Amp Picks/Tuggummi - Square Minded.ava @@ -1,31 +1,24 @@ name: "Square Minded" -mode: lines +mode: dots blend: additive -persist: 0.86 -linewidth: 1.8 +persist: 0.783 +linewidth: 2.696 [init] -n = 560 -segs = 8 +n = 1492 [frame] -rot = rot + dt * (0.08 + mid_att * 0.5) -hue = hue + dt * (0.07 + treb * 0.08) - -[beat] -flash = 1 +t = t + dt * 0.656 +hue = hue + dt * 0.13 [point] -seg = floor(i * segs) -si = frac(i * segs) -a0 = si * 6.28318 / segs + rot -amp = 0.12 + sv * 0.55 + bass * 0.25 + flash * 0.05 -rad = 0.15 + amp * (0.4 + 0.6 * sin(a0 * 6 + time * 2)) -a = seg * 6.28318 / segs + a0 * if(below(seg % 2, 1), 1, -1) -x = sin(a) * rad / aspect -y = cos(a) * rad -lum = 0.35 + amp * 1.2 -red = lum * (0.6 + 0.4 * sin(hue * 6.28318 + seg)) -green = lum * (0.6 + 0.4 * sin(hue * 6.28318 + seg + 2.09)) -blue = lum * (0.6 + 0.4 * sin(hue * 6.28318 + seg + 4.19)) -skip = if(above(si, 0.96), 1, 0) +u = rand(i * 1.7) * 2 - 1 +w = rand(i * 3.3 + 11) * 2 - 1 +m = sin((u * 3.356 + w * 3.959 + t) * 3.14159) * sin((u * 3.01 - w * 6.626 - t * 0.7) * 3.14159) +x = u * 0.994 / aspect +y = w * 0.856 +lum = max(0, m) * (0.3 + bass * 0.9) + 0.06 +red = lum * 0.85 +green = lum * 0.92 +blue = lum +size = 1 + abs(m) * 3.211 diff --git a/tools/converted/root/embedded/Amp Picks/Tuggummi - Worm-O-Rama (Raz Remix).ava b/tools/converted/root/embedded/Amp Picks/Tuggummi - Worm-O-Rama (Raz Remix).ava index 246423c..c750249 100755 --- a/tools/converted/root/embedded/Amp Picks/Tuggummi - Worm-O-Rama (Raz Remix).ava +++ b/tools/converted/root/embedded/Amp Picks/Tuggummi - Worm-O-Rama (Raz Remix).ava @@ -1,25 +1,23 @@ name: "Worm-O-Rama (Raz Remix)" mode: lines blend: additive -persist: 0.9 -linewidth: 1.6 +persist: 0.894 +linewidth: 1.933 [init] -n = 900 +n = 1189 [frame] -t = t + dt * (0.25 + bass_att * 1.5) -hue = hue + dt * 0.1 +t = t + dt * (0.418 + bass_att * 0.8) +sway = sway + dt * (0.5 + treb) +hue = hue + dt * 0.102 [point] -ring = floor(i * 24) -ri = frac(i * 24) -z = frac(ring / 24 + t) -rad = 0.06 + z * 0.9 -a = ri * 6.28318 + ring * 0.35 + sin(t * 0.7) * 2 -x = sin(a) * rad * (0.55 + sv * 0.9) / aspect -y = cos(a) * rad * (0.55 + sv * 0.9) -f = (1 - z) * (0.35 + bass * 0.65) -red = f * (0.45 + 0.55 * sin(hue * 6.28318 + z * 4)) -green = f * (0.45 + 0.55 * sin(hue * 6.28318 + z * 4 + 2.09)) -blue = f * (0.45 + 0.55 * sin(hue * 6.28318 + z * 4 + 4.19)) +a = i * 6.28318 * 3 +wob = sin(a * 3 + t * 2) * (0.08 + treb * 0.3) +rad = (0.42 + mid * 0.25) * (0.85 + 0.15 * sin(a * 3 + sway)) + v * 0.282 - wob +x = sin(a) * rad / aspect +y = cos(a) * rad +red = 0.3 + abs(v) * 1.2 * (0.25 + bass * 0.95) +green = 0.3 + abs(v) * 1.2 * (0.25 + mid * 0.95) +blue = 0.3 + abs(v) * 1.2 * (0.25 + treb * 0.95) diff --git a/tools/converted/root/embedded/Amp Picks/UnConeD - Cartoon Trip.ava b/tools/converted/root/embedded/Amp Picks/UnConeD - Cartoon Trip.ava index 5f1be74..c0d119a 100755 --- a/tools/converted/root/embedded/Amp Picks/UnConeD - Cartoon Trip.ava +++ b/tools/converted/root/embedded/Amp Picks/UnConeD - Cartoon Trip.ava @@ -1,25 +1,27 @@ name: "Cartoon Trip" -mode: dots +mode: lines blend: additive -persist: 0.82 -linewidth: 2.5 +persist: 0.831 +linewidth: 2.55 [init] -n = 850 +bars = 39 +n = bars * 9 [frame] -travel = travel + dt * (0.2 + vol_att * 1.6) -hue = hue + dt * 0.05 +rot = rot + dt * (0.116 + mid * 0.3) +hue = hue + dt * 0.112 [point] -a = rand(i * 7.3) * 6.28318 -z = frac(rand(i * 3.1 + 5) + travel * (0.5 + rand(i + 9) * 0.7)) -rad = z * z * 1.1 +bar = floor(i * bars) +bi = frac(i * bars) +lvl = getspec(bar / bars, 0, 0) +h = lvl * 0.83 +a = bar * 6.28318 / bars + rot +rad = 0.189 + bi * h x = sin(a) * rad / aspect y = cos(a) * rad -tw = 0.4 + 0.6 * sin(z * 40 + time * 3) * (0.5 + treb) -red = tw * (0.5 + 0.5 * sin(hue * 6.28318 + i * 3)) -green = tw * (0.5 + 0.5 * sin(hue * 6.28318 + i * 3 + 2.09)) -blue = tw * (0.5 + 0.5 * sin(hue * 6.28318 + i * 3 + 4.19)) -size = 1 + z * 3 * (0.5 + bass) -skip = if(above(z, 0.97), 1, 0) +red = 0.25 + bi * 0.75 * 0.85 +green = 0.25 + bi * 0.75 * 0.92 +blue = 0.25 + bi * 0.75 +skip = if(above(bi, 0.97), 1, 0) diff --git a/tools/converted/root/embedded/Amp Picks/UnConeD - Containment.ava b/tools/converted/root/embedded/Amp Picks/UnConeD - Containment.ava index 7212b88..010c308 100755 --- a/tools/converted/root/embedded/Amp Picks/UnConeD - Containment.ava +++ b/tools/converted/root/embedded/Amp Picks/UnConeD - Containment.ava @@ -1,29 +1,23 @@ name: "Containment" -mode: dots +mode: lines blend: additive -persist: 0.78 -linewidth: 2.5 +persist: 0.935 +linewidth: 1.8 [init] -cols = 36 -n = cols * cols +n = 847 [frame] -rot = rot + dt * (0.05 + mid * 0.4) -hue = hue + dt * (0.04 + treb * 0.1) +t = t + dt * (0.436 + bass_att * 0.8) +sway = sway + dt * (0.5 + treb) +hue = hue + dt * 0.071 [point] -cx = floor(i * cols) / (cols - 1) -cy = frac(i * cols) -h = sv * 0.35 -ux = (cx - 0.5) * 1.6 -uy = (cy - 0.5) * 1.6 -rx = ux * cos(rot) - uy * sin(rot) -ry = ux * sin(rot) + uy * cos(rot) -x = (rx / aspect) * (1 - h * 0.7) -y = ry * (1 - h * 0.7) -lum = 0.25 + h * 2.2 -red = lum * (0.6 + 0.4 * sin(hue * 6.28318 + cx * 3)) -green = lum * (0.6 + 0.4 * sin(hue * 6.28318 + cx * 3 + 2.09)) -blue = lum * (0.6 + 0.4 * sin(hue * 6.28318 + cx * 3 + 4.19)) -size = 1.2 + h * 5 +a = i * 6.28318 * 2 +wob = sin(a * 2 + t * 2) * (0.08 + treb * 0.3) +rad = (0.42 + mid * 0.25) * (0.85 + 0.15 * sin(a * 3 + sway)) + v * 0.25 - wob +x = sin(a) * rad / aspect +y = cos(a) * rad +red = min(1, 0.3 + abs(v) * 1.2 * 1.3) +green = 0.3 + abs(v) * 1.2 * 0.5 +blue = 0.3 + abs(v) * 1.2 * 0.12 diff --git a/tools/converted/root/embedded/Amp Picks/UnConeD - Jello Cube.ava b/tools/converted/root/embedded/Amp Picks/UnConeD - Jello Cube.ava index 34e8763..edbff83 100755 --- a/tools/converted/root/embedded/Amp Picks/UnConeD - Jello Cube.ava +++ b/tools/converted/root/embedded/Amp Picks/UnConeD - Jello Cube.ava @@ -1,29 +1,30 @@ name: "Jello Cube" mode: lines blend: additive -persist: 0.88 -linewidth: 2 +persist: 0.813 +linewidth: 2.201 [init] -n = 720 +n = 620 [frame] -hue = hue + dt * (0.06 + mid * 0.2) -travel = travel + dt * (0.3 + bass_att * 1.4) +hue = hue + dt * 0.073 + beat * 0.01 +travel = travel + dt * (0.196 + bass_att * 1.4) +flash = flash * 0.86 [beat] flash = 1 [point] -g = floor(i * 9) -gi = frac(i * 9) -ph = frac(rand(g * 5.1 + 1) + travel * (0.6 + rand(g + 17) * 0.8)) +g = floor(i * 10) +gi = frac(i * 10) +ph = frac(rand(g * 5.1 + 1) + travel * (0.55 + rand(g + 17) * 0.85)) a = gi * 6.28318 -rad = ph * (0.25 + bass * 0.6 + flash * 0.08) +rad = ph * (0.226 + bass * 0.743 + flash * 0.08) x = sin(a) * rad / aspect y = cos(a) * rad fade = sin(ph * 3.14159) -red = fade * (0.3 + 0.7 * sin(hue * 6.28318 + g * 0.7)) -green = fade * (0.3 + 0.7 * sin(hue * 6.28318 + g * 0.7 + 2.09)) -blue = fade * (0.3 + 0.7 * sin(hue * 6.28318 + g * 0.7 + 4.19)) -skip = if(above(ph, 0.95), 1, 0) +red = fade * (0.35 + flash * 0.4) * abs(sin(g * 0.7)) +green = fade * (0.35 + flash * 0.4) * 0.22 +blue = fade * (0.35 + flash * 0.4) * abs(cos(g * 0.7)) +skip = if(above(ph, 0.96), 1, 0) diff --git a/tools/converted/root/embedded/Amp Picks/UnConeD - Mercury.ava b/tools/converted/root/embedded/Amp Picks/UnConeD - Mercury.ava index bb8c189..b749114 100755 --- a/tools/converted/root/embedded/Amp Picks/UnConeD - Mercury.ava +++ b/tools/converted/root/embedded/Amp Picks/UnConeD - Mercury.ava @@ -1,29 +1,23 @@ name: "Mercury" mode: lines blend: additive -persist: 0.88 -linewidth: 2 +persist: 0.888 +linewidth: 1.97 [init] -n = 720 +n = 1109 [frame] -hue = hue + dt * (0.06 + mid * 0.2) -travel = travel + dt * (0.3 + bass_att * 1.4) - -[beat] -flash = 1 +t = t + dt * (0.329 + bass_att * 0.8) +sway = sway + dt * (0.5 + treb) +hue = hue + dt * 0.097 [point] -g = floor(i * 9) -gi = frac(i * 9) -ph = frac(rand(g * 5.1 + 1) + travel * (0.6 + rand(g + 17) * 0.8)) -a = gi * 6.28318 -rad = ph * (0.25 + bass * 0.6 + flash * 0.08) +a = i * 6.28318 * 3 +wob = sin(a * 6 + t * 2) * (0.08 + treb * 0.3) +rad = (0.42 + mid * 0.25) * (0.85 + 0.15 * sin(a * 3 + sway)) + v * 0.31 - wob x = sin(a) * rad / aspect y = cos(a) * rad -fade = sin(ph * 3.14159) -red = fade * (0.3 + 0.7 * sin(hue * 6.28318 + g * 0.7)) -green = fade * (0.3 + 0.7 * sin(hue * 6.28318 + g * 0.7 + 2.09)) -blue = fade * (0.3 + 0.7 * sin(hue * 6.28318 + g * 0.7 + 4.19)) -skip = if(above(ph, 0.95), 1, 0) +red = 0.3 + abs(v) * 1.2 * 0.3 +green = 0.3 + abs(v) * 1.2 * 0.65 +blue = min(1, 0.3 + abs(v) * 1.2 * 1.3) diff --git a/tools/converted/root/embedded/Amp Picks/UnConeD - Neon Coaster.ava b/tools/converted/root/embedded/Amp Picks/UnConeD - Neon Coaster.ava index 7b56665..828659f 100755 --- a/tools/converted/root/embedded/Amp Picks/UnConeD - Neon Coaster.ava +++ b/tools/converted/root/embedded/Amp Picks/UnConeD - Neon Coaster.ava @@ -1,25 +1,27 @@ name: "Neon Coaster" -mode: lines +mode: dots blend: additive -persist: 0.9 -linewidth: 1.6 +persist: 0.897 +linewidth: 2.488 [init] -n = 1100 +bars = 33 +n = bars * 12 [frame] -t = t + dt * (0.3 + bass_att * 1.8) -hue = hue + dt * 0.08 + beat * 0.01 +rot = rot + dt * (0.092 + mid * 0.3) +hue = hue + dt * 0.066 [point] -arm = floor(i * 5) -fa = frac(i * 5) -d = fa -ang = arm * 1.2566 + d * (1.4 + mid * 3) * 3.14159 + t -rad = (0.05 + d * d * 1.15) * (0.7 + bass * 0.5) -x = sin(ang) * rad / aspect -y = cos(ang) * rad -red = (0.3 + 0.7 * d) * (0.3 + bass) -green = (0.3 + 0.7 * d) * (0.25 + mid) -blue = (0.3 + 0.7 * d) * (0.2 + treb + hue * 0.2) -skip = if(below(fa, 0.04), 1, 0) +bar = floor(i * bars) +bi = frac(i * bars) +lvl = getspec(bar / bars, 0, 0) +h = lvl * 0.765 +a = bar * 6.28318 / bars + rot +rad = 0.193 + bi * h +x = sin(a) * rad / aspect +y = cos(a) * rad +red = min(1, 0.25 + bi * 0.75 * 1.3) +green = 0.25 + bi * 0.75 * 0.5 +blue = 0.25 + bi * 0.75 * 0.12 +skip = if(above(bi, 0.97), 1, 0) diff --git a/tools/converted/root/embedded/Amp Picks/UnConeD - Plankton.ava b/tools/converted/root/embedded/Amp Picks/UnConeD - Plankton.ava index 489387e..594bf95 100755 --- a/tools/converted/root/embedded/Amp Picks/UnConeD - Plankton.ava +++ b/tools/converted/root/embedded/Amp Picks/UnConeD - Plankton.ava @@ -1,25 +1,30 @@ name: "Plankton" -mode: lines +mode: dots blend: additive -persist: 0.9 -linewidth: 1.6 +persist: 0.83 +linewidth: 2.37 [init] -n = 1100 +n = 627 [frame] -t = t + dt * (0.3 + bass_att * 1.8) -hue = hue + dt * 0.08 + beat * 0.01 +hue = hue + dt * 0.033 + beat * 0.01 +travel = travel + dt * (0.435 + bass_att * 1.4) +flash = flash * 0.86 + +[beat] +flash = 1 [point] -arm = floor(i * 5) -fa = frac(i * 5) -d = fa -ang = arm * 1.2566 + d * (1.4 + mid * 3) * 3.14159 + t -rad = (0.05 + d * d * 1.15) * (0.7 + bass * 0.5) -x = sin(ang) * rad / aspect -y = cos(ang) * rad -red = (0.3 + 0.7 * d) * (0.3 + bass) -green = (0.3 + 0.7 * d) * (0.25 + mid) -blue = (0.3 + 0.7 * d) * (0.2 + treb + hue * 0.2) -skip = if(below(fa, 0.04), 1, 0) +g = floor(i * 11) +gi = frac(i * 11) +ph = frac(rand(g * 5.1 + 1) + travel * (0.55 + rand(g + 17) * 0.85)) +a = gi * 6.28318 +rad = ph * (0.194 + bass * 0.352 + flash * 0.08) +x = sin(a) * rad / aspect +y = cos(a) * rad +fade = sin(ph * 3.14159) +red = min(1, fade * (0.35 + flash * 0.4) * 1.3) +green = fade * (0.35 + flash * 0.4) * 0.5 +blue = fade * (0.35 + flash * 0.4) * 0.12 +skip = if(above(ph, 0.96), 1, 0) diff --git a/tools/converted/root/embedded/Amp Picks/UnConeD - Reflectocube.ava b/tools/converted/root/embedded/Amp Picks/UnConeD - Reflectocube.ava index d8fd3c8..5f7b86e 100755 --- a/tools/converted/root/embedded/Amp Picks/UnConeD - Reflectocube.ava +++ b/tools/converted/root/embedded/Amp Picks/UnConeD - Reflectocube.ava @@ -1,25 +1,25 @@ name: "Reflectocube" -mode: dots +mode: lines blend: additive -persist: 0.82 -linewidth: 2.5 +persist: 0.91 +linewidth: 1.419 [init] -n = 850 +n = 1235 [frame] -travel = travel + dt * (0.2 + vol_att * 1.6) -hue = hue + dt * 0.05 +t = t + dt * (0.31 + bass_att * 1.8) +hue = hue + dt * 0.065 + beat * 0.012 [point] -a = rand(i * 7.3) * 6.28318 -z = frac(rand(i * 3.1 + 5) + travel * (0.5 + rand(i + 9) * 0.7)) -rad = z * z * 1.1 -x = sin(a) * rad / aspect -y = cos(a) * rad -tw = 0.4 + 0.6 * sin(z * 40 + time * 3) * (0.5 + treb) -red = tw * (0.5 + 0.5 * sin(hue * 6.28318 + i * 3)) -green = tw * (0.5 + 0.5 * sin(hue * 6.28318 + i * 3 + 2.09)) -blue = tw * (0.5 + 0.5 * sin(hue * 6.28318 + i * 3 + 4.19)) -size = 1 + z * 3 * (0.5 + bass) -skip = if(above(z, 0.97), 1, 0) +arm = floor(i * 4) +fa = frac(i * 4) +d = fa +ang = arm * 1.405 + d * 0.906 * 3.14159 + t +rad = (0.04 + pow(d, 1.825) * 1.15) * (0.7 + bass * 0.5) +x = sin(ang) * rad / aspect +y = cos(ang) * rad +red = (0.3 + 0.7 * d) * (0.3 + mid) * (0.45 + 0.55 * sin(hue * 6.28318 + d * 4.537)) +green = (0.3 + 0.7 * d) * (0.3 + mid) * (0.45 + 0.55 * sin(hue * 6.28318 + d * 4.537 + 2.09)) +blue = (0.3 + 0.7 * d) * (0.3 + mid) * (0.45 + 0.55 * sin(hue * 6.28318 + d * 4.537 + 4.19)) +skip = if(below(fa, 0.04), 1, 0) diff --git a/tools/converted/root/embedded/Amp Picks/UnConeD - Speeder 3K.ava b/tools/converted/root/embedded/Amp Picks/UnConeD - Speeder 3K.ava index ee43f07..855723b 100755 --- a/tools/converted/root/embedded/Amp Picks/UnConeD - Speeder 3K.ava +++ b/tools/converted/root/embedded/Amp Picks/UnConeD - Speeder 3K.ava @@ -1,25 +1,25 @@ name: "Speeder 3K" -mode: lines +mode: dots blend: additive -persist: 0.9 -linewidth: 1.6 +persist: 0.831 +linewidth: 2.272 [init] -n = 900 +n = 949 [frame] -t = t + dt * (0.25 + bass_att * 1.5) -hue = hue + dt * 0.1 +travel = travel + dt * (0.156 + vol_att * 1.231) +hue = hue + dt * 0.04 [point] -ring = floor(i * 24) -ri = frac(i * 24) -z = frac(ring / 24 + t) -rad = 0.06 + z * 0.9 -a = ri * 6.28318 + ring * 0.35 + sin(t * 0.7) * 2 -x = sin(a) * rad * (0.55 + sv * 0.9) / aspect -y = cos(a) * rad * (0.55 + sv * 0.9) -f = (1 - z) * (0.35 + bass * 0.65) -red = f * (0.45 + 0.55 * sin(hue * 6.28318 + z * 4)) -green = f * (0.45 + 0.55 * sin(hue * 6.28318 + z * 4 + 2.09)) -blue = f * (0.45 + 0.55 * sin(hue * 6.28318 + z * 4 + 4.19)) +a = rand(i * 7.3) * 6.28318 +z = frac(rand(i * 3.1 + 5) + travel * (0.5 + rand(i + 9) * 0.7)) +rad = z * z * 1.206 +x = sin(a) * rad / aspect +y = cos(a) * rad +tw = 0.4 + 0.6 * sin(z * 40 + time * 3) * (0.5 + treb) +red = min(1, tw * 1.3) +green = tw * 0.5 +blue = tw * 0.12 +size = 1 + z * 3 * (0.5 + bass) +skip = if(above(z, 0.97), 1, 0) diff --git a/tools/converted/root/embedded/Amp Picks/UnConeD - TC Plasma.ava b/tools/converted/root/embedded/Amp Picks/UnConeD - TC Plasma.ava index 7aea4cf..e2a7822 100755 --- a/tools/converted/root/embedded/Amp Picks/UnConeD - TC Plasma.ava +++ b/tools/converted/root/embedded/Amp Picks/UnConeD - TC Plasma.ava @@ -1,25 +1,23 @@ name: "TC Plasma" -mode: dots +mode: lines blend: additive -persist: 0.82 -linewidth: 2.5 +persist: 0.932 +linewidth: 1.976 [init] -n = 850 +n = 1072 [frame] -travel = travel + dt * (0.2 + vol_att * 1.6) -hue = hue + dt * 0.05 +t = t + dt * (0.432 + bass_att * 0.8) +sway = sway + dt * (0.5 + treb) +hue = hue + dt * 0.076 [point] -a = rand(i * 7.3) * 6.28318 -z = frac(rand(i * 3.1 + 5) + travel * (0.5 + rand(i + 9) * 0.7)) -rad = z * z * 1.1 +a = i * 6.28318 * 3 +wob = sin(a * 4 + t * 2) * (0.08 + treb * 0.3) +rad = (0.42 + mid * 0.25) * (0.85 + 0.15 * sin(a * 3 + sway)) + v * 0.223 - wob x = sin(a) * rad / aspect y = cos(a) * rad -tw = 0.4 + 0.6 * sin(z * 40 + time * 3) * (0.5 + treb) -red = tw * (0.5 + 0.5 * sin(hue * 6.28318 + i * 3)) -green = tw * (0.5 + 0.5 * sin(hue * 6.28318 + i * 3 + 2.09)) -blue = tw * (0.5 + 0.5 * sin(hue * 6.28318 + i * 3 + 4.19)) -size = 1 + z * 3 * (0.5 + bass) -skip = if(above(z, 0.97), 1, 0) +red = 0.3 + abs(v) * 1.2 * (0.45 + 0.55 * sin(hue * 6.28318 + a * 0.5)) +green = 0.3 + abs(v) * 1.2 * (0.45 + 0.55 * sin(hue * 6.28318 + a * 0.5 + 2.09)) +blue = 0.3 + abs(v) * 1.2 * (0.45 + 0.55 * sin(hue * 6.28318 + a * 0.5 + 4.19)) diff --git a/tools/converted/root/embedded/Amp Picks/UnConeD - Tie Tunnel SSC.ava b/tools/converted/root/embedded/Amp Picks/UnConeD - Tie Tunnel SSC.ava index 43877e6..59a7ba5 100755 --- a/tools/converted/root/embedded/Amp Picks/UnConeD - Tie Tunnel SSC.ava +++ b/tools/converted/root/embedded/Amp Picks/UnConeD - Tie Tunnel SSC.ava @@ -1,29 +1,28 @@ name: "Tie Tunnel SSC" mode: lines blend: additive -persist: 0.88 -linewidth: 2 +persist: 0.851 +linewidth: 2.021 [init] -n = 720 +n = 1179 [frame] -hue = hue + dt * (0.06 + mid * 0.2) -travel = travel + dt * (0.3 + bass_att * 1.4) +t = t + dt * (0.17 + bass_att * 0.9) +hue = hue + dt * 0.129 +flash = flash * 0.86 [beat] flash = 1 [point] -g = floor(i * 9) -gi = frac(i * 9) -ph = frac(rand(g * 5.1 + 1) + travel * (0.6 + rand(g + 17) * 0.8)) -a = gi * 6.28318 -rad = ph * (0.25 + bass * 0.6 + flash * 0.08) -x = sin(a) * rad / aspect -y = cos(a) * rad -fade = sin(ph * 3.14159) -red = fade * (0.3 + 0.7 * sin(hue * 6.28318 + g * 0.7)) -green = fade * (0.3 + 0.7 * sin(hue * 6.28318 + g * 0.7 + 2.09)) -blue = fade * (0.3 + 0.7 * sin(hue * 6.28318 + g * 0.7 + 4.19)) -skip = if(above(ph, 0.95), 1, 0) +st = floor(i * 2) +si = frac(i * 2) +s = si * 6 * 6.28318 + t +ph = st * 3.14159 +rad = (0.28 + bass * 0.32 + flash * 0.06) * (0.55 + 0.45 * (cos(s + ph) * 0.5 + 0.5)) +x = sin(s + ph) * rad / aspect +y = (si - 0.5) * 1.8 +red = min(1, 0.25 + 0.55 * (cos(s + ph) * 0.5 + 0.5) + treb * 0.25 * 1.3) +green = 0.25 + 0.55 * (cos(s + ph) * 0.5 + 0.5) + treb * 0.25 * 0.5 +blue = 0.25 + 0.55 * (cos(s + ph) * 0.5 + 0.5) + treb * 0.25 * 0.12 diff --git a/tools/converted/root/embedded/Amp Picks/UnConeD - Zero-G Maze II.ava b/tools/converted/root/embedded/Amp Picks/UnConeD - Zero-G Maze II.ava index 2f138d1..66e5147 100755 --- a/tools/converted/root/embedded/Amp Picks/UnConeD - Zero-G Maze II.ava +++ b/tools/converted/root/embedded/Amp Picks/UnConeD - Zero-G Maze II.ava @@ -1,29 +1,25 @@ name: "Zero-G Maze II" mode: lines blend: additive -persist: 0.88 -linewidth: 2 +persist: 0.916 +linewidth: 1.457 [init] -n = 720 +n = 1049 [frame] -hue = hue + dt * (0.06 + mid * 0.2) -travel = travel + dt * (0.3 + bass_att * 1.4) - -[beat] -flash = 1 +t = t + dt * (0.267 + bass_att * 1.8) +hue = hue + dt * 0.038 + beat * 0.012 [point] -g = floor(i * 9) -gi = frac(i * 9) -ph = frac(rand(g * 5.1 + 1) + travel * (0.6 + rand(g + 17) * 0.8)) -a = gi * 6.28318 -rad = ph * (0.25 + bass * 0.6 + flash * 0.08) -x = sin(a) * rad / aspect -y = cos(a) * rad -fade = sin(ph * 3.14159) -red = fade * (0.3 + 0.7 * sin(hue * 6.28318 + g * 0.7)) -green = fade * (0.3 + 0.7 * sin(hue * 6.28318 + g * 0.7 + 2.09)) -blue = fade * (0.3 + 0.7 * sin(hue * 6.28318 + g * 0.7 + 4.19)) -skip = if(above(ph, 0.95), 1, 0) +arm = floor(i * 7) +fa = frac(i * 7) +d = fa +ang = arm * 1.253 + d * 0.88 * 3.14159 + t +rad = (0.04 + pow(d, 2.401) * 1.15) * (0.7 + bass * 0.5) +x = sin(ang) * rad / aspect +y = cos(ang) * rad +red = (0.3 + 0.7 * d) * (0.3 + mid) * (0.45 + 0.55 * sin(hue * 6.28318 + d * 2.064)) +green = (0.3 + 0.7 * d) * (0.3 + mid) * (0.45 + 0.55 * sin(hue * 6.28318 + d * 2.064 + 2.09)) +blue = (0.3 + 0.7 * d) * (0.3 + mid) * (0.45 + 0.55 * sin(hue * 6.28318 + d * 2.064 + 4.19)) +skip = if(below(fa, 0.04), 1, 0) diff --git a/tools/converted/root/embedded/Amp Picks/UnConeD -Zero-G Maze III.ava b/tools/converted/root/embedded/Amp Picks/UnConeD -Zero-G Maze III.ava index 128aa3b..9f3fd9d 100755 --- a/tools/converted/root/embedded/Amp Picks/UnConeD -Zero-G Maze III.ava +++ b/tools/converted/root/embedded/Amp Picks/UnConeD -Zero-G Maze III.ava @@ -1,25 +1,24 @@ name: "UnConeD -Zero-G Maze III" -mode: dots +mode: lines blend: additive -persist: 0.82 -linewidth: 2.5 +persist: 0.853 +linewidth: 1.507 [init] -n = 850 +n = 722 [frame] -travel = travel + dt * (0.2 + vol_att * 1.6) -hue = hue + dt * 0.05 +t = t + dt * (0.243 + bass_att * 1.5) +hue = hue + dt * 0.093 [point] -a = rand(i * 7.3) * 6.28318 -z = frac(rand(i * 3.1 + 5) + travel * (0.5 + rand(i + 9) * 0.7)) -rad = z * z * 1.1 -x = sin(a) * rad / aspect -y = cos(a) * rad -tw = 0.4 + 0.6 * sin(z * 40 + time * 3) * (0.5 + treb) -red = tw * (0.5 + 0.5 * sin(hue * 6.28318 + i * 3)) -green = tw * (0.5 + 0.5 * sin(hue * 6.28318 + i * 3 + 2.09)) -blue = tw * (0.5 + 0.5 * sin(hue * 6.28318 + i * 3 + 4.19)) -size = 1 + z * 3 * (0.5 + bass) -skip = if(above(z, 0.97), 1, 0) +ring = floor(i * 19) +ri2 = frac(i * 19) +z = frac(ring / 19 + t) +rad = 0.05 + z * 0.881 +a = ri2 * 6.28318 + ring * 0.16 + sin(t * 0.7) * 2 +x = sin(a) * rad * (0.55 + sv * 0.901) / aspect +y = cos(a) * rad * (0.55 + sv * 0.901) +red = (1 - z) * (0.3 + bass * 0.7) * 0.3 +green = (1 - z) * (0.3 + bass * 0.7) * 0.65 +blue = min(1, (1 - z) * (0.3 + bass * 0.7) * 1.3) diff --git a/tools/converted/root/embedded/Amp Picks/amphirion - nebulous (skupers remix).ava b/tools/converted/root/embedded/Amp Picks/amphirion - nebulous (skupers remix).ava index b5e4fae..c5a0999 100755 --- a/tools/converted/root/embedded/Amp Picks/amphirion - nebulous (skupers remix).ava +++ b/tools/converted/root/embedded/Amp Picks/amphirion - nebulous (skupers remix).ava @@ -1,31 +1,28 @@ name: "nebulous (skupers remix)" -mode: lines +mode: dots blend: additive -persist: 0.86 -linewidth: 1.8 +persist: 0.833 +linewidth: 2.862 [init] -n = 560 -segs = 8 +cols = 28 +n = cols * cols [frame] -rot = rot + dt * (0.08 + mid_att * 0.5) -hue = hue + dt * (0.07 + treb * 0.08) - -[beat] -flash = 1 +rot = rot + dt * (0.104 + mid * 0.4) +hue = hue + dt * 0.08 [point] -seg = floor(i * segs) -si = frac(i * segs) -a0 = si * 6.28318 / segs + rot -amp = 0.12 + sv * 0.55 + bass * 0.25 + flash * 0.05 -rad = 0.15 + amp * (0.4 + 0.6 * sin(a0 * 6 + time * 2)) -a = seg * 6.28318 / segs + a0 * if(below(seg % 2, 1), 1, -1) -x = sin(a) * rad / aspect -y = cos(a) * rad -lum = 0.35 + amp * 1.2 -red = lum * (0.6 + 0.4 * sin(hue * 6.28318 + seg)) -green = lum * (0.6 + 0.4 * sin(hue * 6.28318 + seg + 2.09)) -blue = lum * (0.6 + 0.4 * sin(hue * 6.28318 + seg + 4.19)) -skip = if(above(si, 0.96), 1, 0) +cx = floor(i * cols) / (cols - 1) +cy = frac(i * cols) +h = sv * 0.235 +ux = (cx - 0.5) * 1.448 +uy = (cy - 0.5) * 1.448 +rx = ux * cos(rot) - uy * sin(rot) +ry = ux * sin(rot) + uy * cos(rot) +x = (rx / aspect) * (1 - h * 0.7) +y = ry * (1 - h * 0.7) +red = 0.22 + h * 2.2 * (0.45 + 0.55 * sin(hue * 6.28318 + cx * 3.774)) +green = 0.22 + h * 2.2 * (0.45 + 0.55 * sin(hue * 6.28318 + cx * 3.774 + 2.09)) +blue = 0.22 + h * 2.2 * (0.45 + 0.55 * sin(hue * 6.28318 + cx * 3.774 + 4.19)) +size = 1.2 + h * 5 diff --git a/tools/converted/root/embedded/Amp Picks/el-vis - soundscape III (skupers remix).ava b/tools/converted/root/embedded/Amp Picks/el-vis - soundscape III (skupers remix).ava index f65bc7f..7248c8f 100755 --- a/tools/converted/root/embedded/Amp Picks/el-vis - soundscape III (skupers remix).ava +++ b/tools/converted/root/embedded/Amp Picks/el-vis - soundscape III (skupers remix).ava @@ -1,25 +1,31 @@ name: "soundscape III (skupers remix)" -mode: dots +mode: lines blend: additive -persist: 0.82 -linewidth: 2.5 +persist: 0.851 +linewidth: 1.939 [init] -n = 850 +segs = 14 +n = 582 [frame] -travel = travel + dt * (0.2 + vol_att * 1.6) -hue = hue + dt * 0.05 +rot = rot + dt * (0.13 + mid_att * 0.5) +hue = hue + dt * 0.073 +flash = flash * 0.85 + +[beat] +flash = 1 [point] -a = rand(i * 7.3) * 6.28318 -z = frac(rand(i * 3.1 + 5) + travel * (0.5 + rand(i + 9) * 0.7)) -rad = z * z * 1.1 +seg = floor(i * segs) +si = frac(i * segs) +a0 = si * 6.28318 / segs + rot +amp = 0.1 + sv * 0.55 + bass * 0.25 + flash * 0.06 +rad = 0.15 + amp * (0.4 + 0.6 * sin(a0 * 4 + time * 2)) +a = seg * 6.28318 / segs + a0 * if(below(seg % 2, 1), 1, -1) x = sin(a) * rad / aspect y = cos(a) * rad -tw = 0.4 + 0.6 * sin(z * 40 + time * 3) * (0.5 + treb) -red = tw * (0.5 + 0.5 * sin(hue * 6.28318 + i * 3)) -green = tw * (0.5 + 0.5 * sin(hue * 6.28318 + i * 3 + 2.09)) -blue = tw * (0.5 + 0.5 * sin(hue * 6.28318 + i * 3 + 4.19)) -size = 1 + z * 3 * (0.5 + bass) -skip = if(above(z, 0.97), 1, 0) +red = 0.3 + amp * 1.3 * abs(sin(seg * 0.8)) +green = 0.3 + amp * 1.3 * 0.22 +blue = 0.3 + amp * 1.3 * abs(cos(seg * 0.8)) +skip = if(above(si, 0.96), 1, 0) diff --git a/tools/converted/root/embedded/Amp Picks/horse-fly - jinx (skupers remix).ava b/tools/converted/root/embedded/Amp Picks/horse-fly - jinx (skupers remix).ava index 6ea8341..133cb6e 100755 --- a/tools/converted/root/embedded/Amp Picks/horse-fly - jinx (skupers remix).ava +++ b/tools/converted/root/embedded/Amp Picks/horse-fly - jinx (skupers remix).ava @@ -1,25 +1,27 @@ name: "jinx (skupers remix)" -mode: lines +mode: dots blend: additive -persist: 0.9 -linewidth: 1.6 +persist: 0.814 +linewidth: 1.769 [init] -n = 900 +bars = 46 +n = bars * 12 [frame] -t = t + dt * (0.25 + bass_att * 1.5) -hue = hue + dt * 0.1 +rot = rot + dt * (0.046 + mid * 0.3) +hue = hue + dt * 0.043 [point] -ring = floor(i * 24) -ri = frac(i * 24) -z = frac(ring / 24 + t) -rad = 0.06 + z * 0.9 -a = ri * 6.28318 + ring * 0.35 + sin(t * 0.7) * 2 -x = sin(a) * rad * (0.55 + sv * 0.9) / aspect -y = cos(a) * rad * (0.55 + sv * 0.9) -f = (1 - z) * (0.35 + bass * 0.65) -red = f * (0.45 + 0.55 * sin(hue * 6.28318 + z * 4)) -green = f * (0.45 + 0.55 * sin(hue * 6.28318 + z * 4 + 2.09)) -blue = f * (0.45 + 0.55 * sin(hue * 6.28318 + z * 4 + 4.19)) +bar = floor(i * bars) +bi = frac(i * bars) +lvl = getspec(bar / bars, 0, 0) +h = lvl * 0.65 +a = bar * 6.28318 / bars + rot +rad = 0.246 + bi * h +x = sin(a) * rad / aspect +y = cos(a) * rad +red = 0.25 + bi * 0.75 * abs(sin(bar * 6.28318 / bars)) +green = 0.25 + bi * 0.75 * 0.22 +blue = 0.25 + bi * 0.75 * abs(cos(bar * 6.28318 / bars)) +skip = if(above(bi, 0.97), 1, 0) diff --git a/tools/converted/root/embedded/Amp Picks/jheriko - not quite a bendy tunnel (skupers remix).ava b/tools/converted/root/embedded/Amp Picks/jheriko - not quite a bendy tunnel (skupers remix).ava index 7ad6f26..2629aaf 100755 --- a/tools/converted/root/embedded/Amp Picks/jheriko - not quite a bendy tunnel (skupers remix).ava +++ b/tools/converted/root/embedded/Amp Picks/jheriko - not quite a bendy tunnel (skupers remix).ava @@ -1,29 +1,22 @@ name: "not quite a bendy tunnel (skupers remix)" mode: lines blend: additive -persist: 0.88 -linewidth: 2 +persist: 0.862 +linewidth: 1.443 [init] -n = 720 +n = 806 [frame] -hue = hue + dt * (0.06 + mid * 0.2) -travel = travel + dt * (0.3 + bass_att * 1.4) - -[beat] -flash = 1 +t = t + dt * 0.276 +hue = hue + dt * 0.055 [point] -g = floor(i * 9) -gi = frac(i * 9) -ph = frac(rand(g * 5.1 + 1) + travel * (0.6 + rand(g + 17) * 0.8)) -a = gi * 6.28318 -rad = ph * (0.25 + bass * 0.6 + flash * 0.08) -x = sin(a) * rad / aspect -y = cos(a) * rad -fade = sin(ph * 3.14159) -red = fade * (0.3 + 0.7 * sin(hue * 6.28318 + g * 0.7)) -green = fade * (0.3 + 0.7 * sin(hue * 6.28318 + g * 0.7 + 2.09)) -blue = fade * (0.3 + 0.7 * sin(hue * 6.28318 + g * 0.7 + 4.19)) -skip = if(above(ph, 0.95), 1, 0) +ph = i * 6.28318 * 1.699 +fa = 2 + mid * 0.35 +fb = 3 + bass * 0.45 +x = sin(ph * fa + t) * (0.5 + bass * 0.3) / aspect +y = sin(ph * fb + t * 1.3 + 2.216) * (0.5 + treb * 0.35) +red = 0.3 + 0.45 * sin(ph * 2 + t) + abs(v) * 0.6 * 0.3 +green = 0.3 + 0.45 * sin(ph * 2 + t) + abs(v) * 0.6 * 0.65 +blue = min(1, 0.3 + 0.45 * sin(ph * 2 + t) + abs(v) * 0.6 * 1.3) diff --git a/tools/converted/root/embedded/Amp Picks/justin - newpoop (for wa5).ava b/tools/converted/root/embedded/Amp Picks/justin - newpoop (for wa5).ava index be432bd..79d7956 100755 --- a/tools/converted/root/embedded/Amp Picks/justin - newpoop (for wa5).ava +++ b/tools/converted/root/embedded/Amp Picks/justin - newpoop (for wa5).ava @@ -1,25 +1,27 @@ name: "newpoop (for wa5)" -mode: lines +mode: dots blend: additive -persist: 0.9 -linewidth: 1.6 +persist: 0.796 +linewidth: 2.44 [init] -n = 1100 +rings = 4 +n = rings * 98 [frame] -t = t + dt * (0.3 + bass_att * 1.8) -hue = hue + dt * 0.08 + beat * 0.01 +t = t + dt * (0.176 + bass_att * 0.6) +hue = hue + dt * 0.135 +squash = 0.549 + 0.25 * sin(t * 0.439) [point] -arm = floor(i * 5) -fa = frac(i * 5) -d = fa -ang = arm * 1.2566 + d * (1.4 + mid * 3) * 3.14159 + t -rad = (0.05 + d * d * 1.15) * (0.7 + bass * 0.5) -x = sin(ang) * rad / aspect -y = cos(ang) * rad -red = (0.3 + 0.7 * d) * (0.3 + bass) -green = (0.3 + 0.7 * d) * (0.25 + mid) -blue = (0.3 + 0.7 * d) * (0.2 + treb + hue * 0.2) -skip = if(below(fa, 0.04), 1, 0) +ring = floor(i * rings) +ri3 = frac(i * rings) +r0 = 0.16 + ring * 0.12 +a = ri3 * 6.28318 + t * (1.2 - ring * 0.18) + ring * 2.4 +x = sin(a) * r0 * (1 + bass * 0.18) / aspect +y = cos(a) * r0 * squash +sat = frac(ri3 * 5) +size = if(below(sat, 0.14), 3 + bass * 3, 1) +red = min(1, 0.25 + bass * 0.5 + ring * 0.07 * 1.3) +green = 0.25 + bass * 0.5 + ring * 0.07 * 0.5 +blue = 0.25 + bass * 0.5 + ring * 0.07 * 0.12 diff --git a/tools/converted/root/embedded/Amp Picks/justin - the landscape is killing me (wa5remix).ava b/tools/converted/root/embedded/Amp Picks/justin - the landscape is killing me (wa5remix).ava index 7596d34..1a8feb4 100755 --- a/tools/converted/root/embedded/Amp Picks/justin - the landscape is killing me (wa5remix).ava +++ b/tools/converted/root/embedded/Amp Picks/justin - the landscape is killing me (wa5remix).ava @@ -1,25 +1,27 @@ name: "the landscape is killing me (wa5remix)" -mode: lines +mode: dots blend: additive -persist: 0.9 -linewidth: 1.6 +persist: 0.704 +linewidth: 2.586 [init] -n = 1100 +cols = 54 +n = 1193 [frame] -t = t + dt * (0.3 + bass_att * 1.8) -hue = hue + dt * 0.08 + beat * 0.01 +fall = fall + dt * (0.514 + vol_att * 0.841) +hue = hue + dt * 0.071 [point] -arm = floor(i * 5) -fa = frac(i * 5) -d = fa -ang = arm * 1.2566 + d * (1.4 + mid * 3) * 3.14159 + t -rad = (0.05 + d * d * 1.15) * (0.7 + bass * 0.5) -x = sin(ang) * rad / aspect -y = cos(ang) * rad -red = (0.3 + 0.7 * d) * (0.3 + bass) -green = (0.3 + 0.7 * d) * (0.25 + mid) -blue = (0.3 + 0.7 * d) * (0.2 + treb + hue * 0.2) -skip = if(below(fa, 0.04), 1, 0) +col = floor(i * cols) +ci = frac(i * cols) +xx = (col / cols - 0.5) * 1.9 +yf = frac(rand(col * 3.7 + 1) + fall * (0.55 + rand(col + 5) * 0.5)) +tail = rand(col * 1.3 + 9) * 0.31 + 0.04 +yy = (yf * 2 - 1) * 1.05 + ci * tail +x = xx / aspect +y = yy +red = (1 - ci) * (0.2 + treb * 0.85) + 0.04 * (0.45 + 0.55 * sin(hue * 6.28318 + col * 0.3)) +green = (1 - ci) * (0.2 + treb * 0.85) + 0.04 * (0.45 + 0.55 * sin(hue * 6.28318 + col * 0.3 + 2.09)) +blue = (1 - ci) * (0.2 + treb * 0.85) + 0.04 * (0.45 + 0.55 * sin(hue * 6.28318 + col * 0.3 + 4.19)) +skip = if(above(abs(yy), 1.02), 1, 0) diff --git a/tools/converted/root/embedded/Amp Picks/mig - Dragonscales.ava b/tools/converted/root/embedded/Amp Picks/mig - Dragonscales.ava index e7010fd..dfd118f 100755 --- a/tools/converted/root/embedded/Amp Picks/mig - Dragonscales.ava +++ b/tools/converted/root/embedded/Amp Picks/mig - Dragonscales.ava @@ -1,29 +1,22 @@ name: "Dragonscales" -mode: dots +mode: lines blend: additive -persist: 0.78 -linewidth: 2.5 +persist: 0.885 +linewidth: 2.375 [init] -cols = 36 -n = cols * cols +n = 938 [frame] -rot = rot + dt * (0.05 + mid * 0.4) -hue = hue + dt * (0.04 + treb * 0.1) +t = t + dt * 0.353 +hue = hue + dt * 0.094 [point] -cx = floor(i * cols) / (cols - 1) -cy = frac(i * cols) -h = sv * 0.35 -ux = (cx - 0.5) * 1.6 -uy = (cy - 0.5) * 1.6 -rx = ux * cos(rot) - uy * sin(rot) -ry = ux * sin(rot) + uy * cos(rot) -x = (rx / aspect) * (1 - h * 0.7) -y = ry * (1 - h * 0.7) -lum = 0.25 + h * 2.2 -red = lum * (0.6 + 0.4 * sin(hue * 6.28318 + cx * 3)) -green = lum * (0.6 + 0.4 * sin(hue * 6.28318 + cx * 3 + 2.09)) -blue = lum * (0.6 + 0.4 * sin(hue * 6.28318 + cx * 3 + 4.19)) -size = 1.2 + h * 5 +ph = i * 6.28318 * 2.096 +fa = 2 + mid * 0.35 +fb = 3 + bass * 0.45 +x = sin(ph * fa + t) * (0.5 + bass * 0.3) / aspect +y = sin(ph * fb + t * 1.3 + 2.866) * (0.5 + treb * 0.35) +red = 0.3 + 0.45 * sin(ph * 2 + t) + abs(v) * 0.6 * (0.25 + bass * 0.95) +green = 0.3 + 0.45 * sin(ph * 2 + t) + abs(v) * 0.6 * (0.25 + mid * 0.95) +blue = 0.3 + 0.45 * sin(ph * 2 + t) + abs(v) * 0.6 * (0.25 + treb * 0.95) diff --git a/tools/converted/root/embedded/Amp Picks/mig - Encapsulade.ava b/tools/converted/root/embedded/Amp Picks/mig - Encapsulade.ava index 4b546ba..774a9da 100755 --- a/tools/converted/root/embedded/Amp Picks/mig - Encapsulade.ava +++ b/tools/converted/root/embedded/Amp Picks/mig - Encapsulade.ava @@ -1,29 +1,27 @@ name: "Encapsulade" mode: lines blend: additive -persist: 0.88 -linewidth: 2 +persist: 0.814 +linewidth: 2.058 [init] -n = 720 +bars = 64 +n = bars * 9 [frame] -hue = hue + dt * (0.06 + mid * 0.2) -travel = travel + dt * (0.3 + bass_att * 1.4) - -[beat] -flash = 1 +rot = rot + dt * (0.103 + mid * 0.3) +hue = hue + dt * 0.072 [point] -g = floor(i * 9) -gi = frac(i * 9) -ph = frac(rand(g * 5.1 + 1) + travel * (0.6 + rand(g + 17) * 0.8)) -a = gi * 6.28318 -rad = ph * (0.25 + bass * 0.6 + flash * 0.08) +bar = floor(i * bars) +bi = frac(i * bars) +lvl = getspec(bar / bars, 0, 0) +h = lvl * 0.85 +a = bar * 6.28318 / bars + rot +rad = 0.262 + bi * h x = sin(a) * rad / aspect y = cos(a) * rad -fade = sin(ph * 3.14159) -red = fade * (0.3 + 0.7 * sin(hue * 6.28318 + g * 0.7)) -green = fade * (0.3 + 0.7 * sin(hue * 6.28318 + g * 0.7 + 2.09)) -blue = fade * (0.3 + 0.7 * sin(hue * 6.28318 + g * 0.7 + 4.19)) -skip = if(above(ph, 0.95), 1, 0) +red = 0.25 + bi * 0.75 * (0.45 + 0.55 * sin(hue * 6.28318 + bar * 6.28318 / bars)) +green = 0.25 + bi * 0.75 * (0.45 + 0.55 * sin(hue * 6.28318 + bar * 6.28318 / bars + 2.09)) +blue = 0.25 + bi * 0.75 * (0.45 + 0.55 * sin(hue * 6.28318 + bar * 6.28318 / bars + 4.19)) +skip = if(above(bi, 0.97), 1, 0) diff --git a/tools/converted/root/embedded/Amp Picks/mig - Freekwyrms.ava b/tools/converted/root/embedded/Amp Picks/mig - Freekwyrms.ava index a9e47cf..2e6ac77 100755 --- a/tools/converted/root/embedded/Amp Picks/mig - Freekwyrms.ava +++ b/tools/converted/root/embedded/Amp Picks/mig - Freekwyrms.ava @@ -1,25 +1,27 @@ name: "Freekwyrms" -mode: lines +mode: dots blend: additive -persist: 0.9 -linewidth: 1.6 +persist: 0.864 +linewidth: 1.436 [init] -n = 1100 +bars = 46 +n = bars * 12 [frame] -t = t + dt * (0.3 + bass_att * 1.8) -hue = hue + dt * 0.08 + beat * 0.01 +rot = rot + dt * (0.09 + mid * 0.3) +hue = hue + dt * 0.063 [point] -arm = floor(i * 5) -fa = frac(i * 5) -d = fa -ang = arm * 1.2566 + d * (1.4 + mid * 3) * 3.14159 + t -rad = (0.05 + d * d * 1.15) * (0.7 + bass * 0.5) -x = sin(ang) * rad / aspect -y = cos(ang) * rad -red = (0.3 + 0.7 * d) * (0.3 + bass) -green = (0.3 + 0.7 * d) * (0.25 + mid) -blue = (0.3 + 0.7 * d) * (0.2 + treb + hue * 0.2) -skip = if(below(fa, 0.04), 1, 0) +bar = floor(i * bars) +bi = frac(i * bars) +lvl = getspec(bar / bars, 0, 0) +h = lvl * 0.722 +a = bar * 6.28318 / bars + rot +rad = 0.216 + bi * h +x = sin(a) * rad / aspect +y = cos(a) * rad +red = min(1, 0.25 + bi * 0.75 * 1.3) +green = 0.25 + bi * 0.75 * 0.5 +blue = 0.25 + bi * 0.75 * 0.12 +skip = if(above(bi, 0.97), 1, 0) diff --git a/tools/converted/root/embedded/Amp Picks/mig - Lilypod.ava b/tools/converted/root/embedded/Amp Picks/mig - Lilypod.ava index cc71b03..f496ca4 100755 --- a/tools/converted/root/embedded/Amp Picks/mig - Lilypod.ava +++ b/tools/converted/root/embedded/Amp Picks/mig - Lilypod.ava @@ -1,29 +1,30 @@ name: "Lilypod" -mode: lines +mode: dots blend: additive -persist: 0.88 -linewidth: 2 +persist: 0.787 +linewidth: 1.928 [init] -n = 720 +n = 885 [frame] -hue = hue + dt * (0.06 + mid * 0.2) -travel = travel + dt * (0.3 + bass_att * 1.4) +tt = tt + dt * (0.5 + bass_att * 1.1) +hue = hue + dt * 0.04 +burst = burst * 0.9 [beat] -flash = 1 +burst = 1 [point] -g = floor(i * 9) -gi = frac(i * 9) -ph = frac(rand(g * 5.1 + 1) + travel * (0.6 + rand(g + 17) * 0.8)) -a = gi * 6.28318 -rad = ph * (0.25 + bass * 0.6 + flash * 0.08) -x = sin(a) * rad / aspect -y = cos(a) * rad -fade = sin(ph * 3.14159) -red = fade * (0.3 + 0.7 * sin(hue * 6.28318 + g * 0.7)) -green = fade * (0.3 + 0.7 * sin(hue * 6.28318 + g * 0.7 + 2.09)) -blue = fade * (0.3 + 0.7 * sin(hue * 6.28318 + g * 0.7 + 4.19)) -skip = if(above(ph, 0.95), 1, 0) +jet = floor(i * 4) +life = frac(rand(i * 7.7 + jet) + tt * (0.35 + rand(i + 3) * 0.65)) +a = jet * 6.28318 / 4 + rand(i * 5.1 + jet) * 0.722 +spd = 0.4 + rand(i * 9.2 + jet) * 0.8 +px = cos(a) * spd * life +py = sin(a) * spd * life - 0.744 * life * life +x = px * (0.85 + bass * 0.35) / aspect +y = py +red = max(0, 1 - life) * (0.35 + burst * 0.55) * abs(sin(life * 4)) +green = max(0, 1 - life) * (0.35 + burst * 0.55) * 0.22 +blue = max(0, 1 - life) * (0.35 + burst * 0.55) * abs(cos(life * 4)) +skip = if(above(life, 0.94), 1, 0) diff --git a/tools/converted/root/embedded/Amp Picks/mig - Mist Wisps.ava b/tools/converted/root/embedded/Amp Picks/mig - Mist Wisps.ava index 8c27cb5..c546fb9 100755 --- a/tools/converted/root/embedded/Amp Picks/mig - Mist Wisps.ava +++ b/tools/converted/root/embedded/Amp Picks/mig - Mist Wisps.ava @@ -1,29 +1,24 @@ name: "Mist Wisps" -mode: lines +mode: dots blend: additive -persist: 0.88 -linewidth: 2 +persist: 0.758 +linewidth: 2.24 [init] -n = 720 +n = 1297 [frame] -hue = hue + dt * (0.06 + mid * 0.2) -travel = travel + dt * (0.3 + bass_att * 1.4) - -[beat] -flash = 1 +t = t + dt * 0.323 +hue = hue + dt * 0.1 [point] -g = floor(i * 9) -gi = frac(i * 9) -ph = frac(rand(g * 5.1 + 1) + travel * (0.6 + rand(g + 17) * 0.8)) -a = gi * 6.28318 -rad = ph * (0.25 + bass * 0.6 + flash * 0.08) -x = sin(a) * rad / aspect -y = cos(a) * rad -fade = sin(ph * 3.14159) -red = fade * (0.3 + 0.7 * sin(hue * 6.28318 + g * 0.7)) -green = fade * (0.3 + 0.7 * sin(hue * 6.28318 + g * 0.7 + 2.09)) -blue = fade * (0.3 + 0.7 * sin(hue * 6.28318 + g * 0.7 + 4.19)) -skip = if(above(ph, 0.95), 1, 0) +u = rand(i * 1.7) * 2 - 1 +w = rand(i * 3.3 + 11) * 2 - 1 +m = sin((u * 2.207 + w * 6.547 + t) * 3.14159) * sin((u * 5.739 - w * 2.319 - t * 0.7) * 3.14159) +x = u * 0.85 / aspect +y = w * 0.957 +lum = max(0, m) * (0.3 + bass * 0.9) + 0.06 +red = lum * (0.25 + bass * 0.95) +green = lum * (0.25 + mid * 0.95) +blue = lum * (0.25 + treb * 0.95) +size = 1 + abs(m) * 3.505 diff --git a/tools/converted/root/embedded/Amp Picks/mig - Nebulating - Hypercolorspace.ava b/tools/converted/root/embedded/Amp Picks/mig - Nebulating - Hypercolorspace.ava index b8d7d4d..863db6c 100755 --- a/tools/converted/root/embedded/Amp Picks/mig - Nebulating - Hypercolorspace.ava +++ b/tools/converted/root/embedded/Amp Picks/mig - Nebulating - Hypercolorspace.ava @@ -1,25 +1,24 @@ name: "Nebulating - Hypercolorspace" -mode: lines +mode: dots blend: additive -persist: 0.9 -linewidth: 1.6 +persist: 0.792 +linewidth: 2.678 [init] -n = 1100 +n = 1374 [frame] -t = t + dt * (0.3 + bass_att * 1.8) -hue = hue + dt * 0.08 + beat * 0.01 +t = t + dt * 0.423 +hue = hue + dt * 0.123 [point] -arm = floor(i * 5) -fa = frac(i * 5) -d = fa -ang = arm * 1.2566 + d * (1.4 + mid * 3) * 3.14159 + t -rad = (0.05 + d * d * 1.15) * (0.7 + bass * 0.5) -x = sin(ang) * rad / aspect -y = cos(ang) * rad -red = (0.3 + 0.7 * d) * (0.3 + bass) -green = (0.3 + 0.7 * d) * (0.25 + mid) -blue = (0.3 + 0.7 * d) * (0.2 + treb + hue * 0.2) -skip = if(below(fa, 0.04), 1, 0) +u = rand(i * 1.7) * 2 - 1 +w = rand(i * 3.3 + 11) * 2 - 1 +m = sin((u * 3.51 + w * 2.666 + t) * 3.14159) * sin((u * 6.323 - w * 6.393 - t * 0.7) * 3.14159) +x = u * 0.959 / aspect +y = w * 0.871 +lum = max(0, m) * (0.3 + bass * 0.9) + 0.06 +red = min(1, lum * 1.3) +green = lum * 0.5 +blue = lum * 0.12 +size = 1 + abs(m) * 3.799 diff --git a/tools/converted/root/embedded/Amp Picks/mig - Reverb - Deep Net.ava b/tools/converted/root/embedded/Amp Picks/mig - Reverb - Deep Net.ava index 4289d51..0e14df7 100755 --- a/tools/converted/root/embedded/Amp Picks/mig - Reverb - Deep Net.ava +++ b/tools/converted/root/embedded/Amp Picks/mig - Reverb - Deep Net.ava @@ -1,31 +1,28 @@ name: "Reverb - Deep Net" -mode: lines +mode: dots blend: additive -persist: 0.86 -linewidth: 1.8 +persist: 0.818 +linewidth: 2.394 [init] -n = 560 -segs = 8 +cols = 29 +n = cols * cols [frame] -rot = rot + dt * (0.08 + mid_att * 0.5) -hue = hue + dt * (0.07 + treb * 0.08) - -[beat] -flash = 1 +rot = rot + dt * (0.041 + mid * 0.4) +hue = hue + dt * 0.089 [point] -seg = floor(i * segs) -si = frac(i * segs) -a0 = si * 6.28318 / segs + rot -amp = 0.12 + sv * 0.55 + bass * 0.25 + flash * 0.05 -rad = 0.15 + amp * (0.4 + 0.6 * sin(a0 * 6 + time * 2)) -a = seg * 6.28318 / segs + a0 * if(below(seg % 2, 1), 1, -1) -x = sin(a) * rad / aspect -y = cos(a) * rad -lum = 0.35 + amp * 1.2 -red = lum * (0.6 + 0.4 * sin(hue * 6.28318 + seg)) -green = lum * (0.6 + 0.4 * sin(hue * 6.28318 + seg + 2.09)) -blue = lum * (0.6 + 0.4 * sin(hue * 6.28318 + seg + 4.19)) -skip = if(above(si, 0.96), 1, 0) +cx = floor(i * cols) / (cols - 1) +cy = frac(i * cols) +h = sv * 0.525 +ux = (cx - 0.5) * 1.845 +uy = (cy - 0.5) * 1.845 +rx = ux * cos(rot) - uy * sin(rot) +ry = ux * sin(rot) + uy * cos(rot) +x = (rx / aspect) * (1 - h * 0.7) +y = ry * (1 - h * 0.7) +red = 0.22 + h * 2.2 * abs(sin(cx * 2.712)) +green = 0.22 + h * 2.2 * 0.22 +blue = 0.22 + h * 2.2 * abs(cos(cx * 2.712)) +size = 1.2 + h * 5 diff --git a/tools/converted/root/embedded/Amp Picks/mig - Slyde - Tri.ava b/tools/converted/root/embedded/Amp Picks/mig - Slyde - Tri.ava index ea6f45f..5e1699b 100755 --- a/tools/converted/root/embedded/Amp Picks/mig - Slyde - Tri.ava +++ b/tools/converted/root/embedded/Amp Picks/mig - Slyde - Tri.ava @@ -1,25 +1,22 @@ name: "Slyde - Tri" mode: lines blend: additive -persist: 0.9 -linewidth: 1.6 +persist: 0.863 +linewidth: 1.626 [init] -n = 1100 +n = 938 [frame] -t = t + dt * (0.3 + bass_att * 1.8) -hue = hue + dt * 0.08 + beat * 0.01 +t = t + dt * 0.483 +hue = hue + dt * 0.076 [point] -arm = floor(i * 5) -fa = frac(i * 5) -d = fa -ang = arm * 1.2566 + d * (1.4 + mid * 3) * 3.14159 + t -rad = (0.05 + d * d * 1.15) * (0.7 + bass * 0.5) -x = sin(ang) * rad / aspect -y = cos(ang) * rad -red = (0.3 + 0.7 * d) * (0.3 + bass) -green = (0.3 + 0.7 * d) * (0.25 + mid) -blue = (0.3 + 0.7 * d) * (0.2 + treb + hue * 0.2) -skip = if(below(fa, 0.04), 1, 0) +ph = i * 6.28318 * 2.841 +fa = 6 + mid * 0.35 +fb = 2 + bass * 0.45 +x = sin(ph * fa + t) * (0.5 + bass * 0.3) / aspect +y = sin(ph * fb + t * 1.3 + 1.909) * (0.5 + treb * 0.35) +red = min(1, 0.3 + 0.45 * sin(ph * 2 + t) + abs(v) * 0.6 * 1.3) +green = 0.3 + 0.45 * sin(ph * 2 + t) + abs(v) * 0.6 * 0.5 +blue = 0.3 + 0.45 * sin(ph * 2 + t) + abs(v) * 0.6 * 0.12 diff --git a/tools/converted/root/embedded/Amp Picks/mig - Solar Flaire.ava b/tools/converted/root/embedded/Amp Picks/mig - Solar Flaire.ava index 722939b..4dfe13e 100755 --- a/tools/converted/root/embedded/Amp Picks/mig - Solar Flaire.ava +++ b/tools/converted/root/embedded/Amp Picks/mig - Solar Flaire.ava @@ -1,29 +1,27 @@ name: "Solar Flaire" -mode: dots +mode: lines blend: additive -persist: 0.78 -linewidth: 2.5 +persist: 0.866 +linewidth: 1.678 [init] -cols = 36 -n = cols * cols +bars = 59 +n = bars * 11 [frame] -rot = rot + dt * (0.05 + mid * 0.4) -hue = hue + dt * (0.04 + treb * 0.1) +rot = rot + dt * (0.076 + mid * 0.3) +hue = hue + dt * 0.107 [point] -cx = floor(i * cols) / (cols - 1) -cy = frac(i * cols) -h = sv * 0.35 -ux = (cx - 0.5) * 1.6 -uy = (cy - 0.5) * 1.6 -rx = ux * cos(rot) - uy * sin(rot) -ry = ux * sin(rot) + uy * cos(rot) -x = (rx / aspect) * (1 - h * 0.7) -y = ry * (1 - h * 0.7) -lum = 0.25 + h * 2.2 -red = lum * (0.6 + 0.4 * sin(hue * 6.28318 + cx * 3)) -green = lum * (0.6 + 0.4 * sin(hue * 6.28318 + cx * 3 + 2.09)) -blue = lum * (0.6 + 0.4 * sin(hue * 6.28318 + cx * 3 + 4.19)) -size = 1.2 + h * 5 +bar = floor(i * bars) +bi = frac(i * bars) +lvl = getspec(bar / bars, 0, 0) +h = lvl * 0.607 +a = bar * 6.28318 / bars + rot +rad = 0.241 + bi * h +x = sin(a) * rad / aspect +y = cos(a) * rad +red = 0.25 + bi * 0.75 * (0.45 + 0.55 * sin(hue * 6.28318 + bar * 6.28318 / bars)) +green = 0.25 + bi * 0.75 * (0.45 + 0.55 * sin(hue * 6.28318 + bar * 6.28318 / bars + 2.09)) +blue = 0.25 + bi * 0.75 * (0.45 + 0.55 * sin(hue * 6.28318 + bar * 6.28318 / bars + 4.19)) +skip = if(above(bi, 0.97), 1, 0) diff --git a/tools/converted/root/embedded/Amp Picks/mig - Spintronics - Backspin.ava b/tools/converted/root/embedded/Amp Picks/mig - Spintronics - Backspin.ava index 2982786..74ffa86 100755 --- a/tools/converted/root/embedded/Amp Picks/mig - Spintronics - Backspin.ava +++ b/tools/converted/root/embedded/Amp Picks/mig - Spintronics - Backspin.ava @@ -1,31 +1,30 @@ name: "Spintronics - Backspin" -mode: lines +mode: dots blend: additive -persist: 0.86 -linewidth: 1.8 +persist: 0.804 +linewidth: 2.037 [init] -n = 560 -segs = 8 +n = 1157 [frame] -rot = rot + dt * (0.08 + mid_att * 0.5) -hue = hue + dt * (0.07 + treb * 0.08) +tt = tt + dt * (0.5 + bass_att * 1.1) +hue = hue + dt * 0.12 +burst = burst * 0.9 [beat] -flash = 1 +burst = 1 [point] -seg = floor(i * segs) -si = frac(i * segs) -a0 = si * 6.28318 / segs + rot -amp = 0.12 + sv * 0.55 + bass * 0.25 + flash * 0.05 -rad = 0.15 + amp * (0.4 + 0.6 * sin(a0 * 6 + time * 2)) -a = seg * 6.28318 / segs + a0 * if(below(seg % 2, 1), 1, -1) -x = sin(a) * rad / aspect -y = cos(a) * rad -lum = 0.35 + amp * 1.2 -red = lum * (0.6 + 0.4 * sin(hue * 6.28318 + seg)) -green = lum * (0.6 + 0.4 * sin(hue * 6.28318 + seg + 2.09)) -blue = lum * (0.6 + 0.4 * sin(hue * 6.28318 + seg + 4.19)) -skip = if(above(si, 0.96), 1, 0) +jet = floor(i * 4) +life = frac(rand(i * 7.7 + jet) + tt * (0.35 + rand(i + 3) * 0.65)) +a = jet * 6.28318 / 4 + rand(i * 5.1 + jet) * 0.547 +spd = 0.4 + rand(i * 9.2 + jet) * 0.8 +px = cos(a) * spd * life +py = sin(a) * spd * life - 0.712 * life * life +x = px * (0.85 + bass * 0.35) / aspect +y = py +red = min(1, max(0, 1 - life) * (0.35 + burst * 0.55) * 1.3) +green = max(0, 1 - life) * (0.35 + burst * 0.55) * 0.5 +blue = max(0, 1 - life) * (0.35 + burst * 0.55) * 0.12 +skip = if(above(life, 0.94), 1, 0) diff --git a/tools/converted/root/embedded/Amp Picks/mig - Starslappin.ava b/tools/converted/root/embedded/Amp Picks/mig - Starslappin.ava index 4505ebd..394156c 100755 --- a/tools/converted/root/embedded/Amp Picks/mig - Starslappin.ava +++ b/tools/converted/root/embedded/Amp Picks/mig - Starslappin.ava @@ -1,25 +1,31 @@ name: "Starslappin" mode: lines blend: additive -persist: 0.9 -linewidth: 1.6 +persist: 0.842 +linewidth: 2.148 [init] -n = 1100 +segs = 7 +n = 545 [frame] -t = t + dt * (0.3 + bass_att * 1.8) -hue = hue + dt * 0.08 + beat * 0.01 +rot = rot + dt * (0.087 + mid_att * 0.5) +hue = hue + dt * 0.125 +flash = flash * 0.85 + +[beat] +flash = 1 [point] -arm = floor(i * 5) -fa = frac(i * 5) -d = fa -ang = arm * 1.2566 + d * (1.4 + mid * 3) * 3.14159 + t -rad = (0.05 + d * d * 1.15) * (0.7 + bass * 0.5) -x = sin(ang) * rad / aspect -y = cos(ang) * rad -red = (0.3 + 0.7 * d) * (0.3 + bass) -green = (0.3 + 0.7 * d) * (0.25 + mid) -blue = (0.3 + 0.7 * d) * (0.2 + treb + hue * 0.2) -skip = if(below(fa, 0.04), 1, 0) +seg = floor(i * segs) +si = frac(i * segs) +a0 = si * 6.28318 / segs + rot +amp = 0.1 + sv * 0.55 + bass * 0.25 + flash * 0.06 +rad = 0.15 + amp * (0.4 + 0.6 * sin(a0 * 6 + time * 2)) +a = seg * 6.28318 / segs + a0 * if(below(seg % 2, 1), 1, -1) +x = sin(a) * rad / aspect +y = cos(a) * rad +red = 0.3 + amp * 1.3 * (0.25 + bass * 0.95) +green = 0.3 + amp * 1.3 * (0.25 + mid * 0.95) +blue = 0.3 + amp * 1.3 * (0.25 + treb * 0.95) +skip = if(above(si, 0.96), 1, 0) diff --git a/tools/converted/root/embedded/Amp Picks/mig - Street Art - Fire Inside.ava b/tools/converted/root/embedded/Amp Picks/mig - Street Art - Fire Inside.ava index 8817112..3496002 100755 --- a/tools/converted/root/embedded/Amp Picks/mig - Street Art - Fire Inside.ava +++ b/tools/converted/root/embedded/Amp Picks/mig - Street Art - Fire Inside.ava @@ -1,25 +1,30 @@ name: "Street Art - Fire Inside" -mode: lines +mode: dots blend: additive -persist: 0.9 -linewidth: 1.6 +persist: 0.757 +linewidth: 2.052 [init] -n = 1100 +n = 1065 [frame] -t = t + dt * (0.3 + bass_att * 1.8) -hue = hue + dt * 0.08 + beat * 0.01 +tt = tt + dt * (0.5 + bass_att * 1.1) +hue = hue + dt * 0.108 +burst = burst * 0.9 + +[beat] +burst = 1 [point] -arm = floor(i * 5) -fa = frac(i * 5) -d = fa -ang = arm * 1.2566 + d * (1.4 + mid * 3) * 3.14159 + t -rad = (0.05 + d * d * 1.15) * (0.7 + bass * 0.5) -x = sin(ang) * rad / aspect -y = cos(ang) * rad -red = (0.3 + 0.7 * d) * (0.3 + bass) -green = (0.3 + 0.7 * d) * (0.25 + mid) -blue = (0.3 + 0.7 * d) * (0.2 + treb + hue * 0.2) -skip = if(below(fa, 0.04), 1, 0) +jet = floor(i * 4) +life = frac(rand(i * 7.7 + jet) + tt * (0.35 + rand(i + 3) * 0.65)) +a = jet * 6.28318 / 4 + rand(i * 5.1 + jet) * 1.184 +spd = 0.4 + rand(i * 9.2 + jet) * 0.8 +px = cos(a) * spd * life +py = sin(a) * spd * life - 1.383 * life * life +x = px * (0.85 + bass * 0.35) / aspect +y = py +red = max(0, 1 - life) * (0.35 + burst * 0.55) * 0.3 +green = max(0, 1 - life) * (0.35 + burst * 0.55) * 0.65 +blue = min(1, max(0, 1 - life) * (0.35 + burst * 0.55) * 1.3) +skip = if(above(life, 0.94), 1, 0) diff --git a/tools/converted/root/embedded/Amp Picks/mig - Swoo - Slow.ava b/tools/converted/root/embedded/Amp Picks/mig - Swoo - Slow.ava index aa1025d..cbba83c 100755 --- a/tools/converted/root/embedded/Amp Picks/mig - Swoo - Slow.ava +++ b/tools/converted/root/embedded/Amp Picks/mig - Swoo - Slow.ava @@ -1,31 +1,23 @@ name: "Swoo - Slow" mode: lines blend: additive -persist: 0.86 -linewidth: 1.8 +persist: 0.919 +linewidth: 1.852 [init] -n = 560 -segs = 8 +n = 1159 [frame] -rot = rot + dt * (0.08 + mid_att * 0.5) -hue = hue + dt * (0.07 + treb * 0.08) - -[beat] -flash = 1 +t = t + dt * (0.461 + bass_att * 0.8) +sway = sway + dt * (0.5 + treb) +hue = hue + dt * 0.046 [point] -seg = floor(i * segs) -si = frac(i * segs) -a0 = si * 6.28318 / segs + rot -amp = 0.12 + sv * 0.55 + bass * 0.25 + flash * 0.05 -rad = 0.15 + amp * (0.4 + 0.6 * sin(a0 * 6 + time * 2)) -a = seg * 6.28318 / segs + a0 * if(below(seg % 2, 1), 1, -1) +a = i * 6.28318 * 3 +wob = sin(a * 3 + t * 2) * (0.08 + treb * 0.3) +rad = (0.42 + mid * 0.25) * (0.85 + 0.15 * sin(a * 3 + sway)) + v * 0.199 - wob x = sin(a) * rad / aspect y = cos(a) * rad -lum = 0.35 + amp * 1.2 -red = lum * (0.6 + 0.4 * sin(hue * 6.28318 + seg)) -green = lum * (0.6 + 0.4 * sin(hue * 6.28318 + seg + 2.09)) -blue = lum * (0.6 + 0.4 * sin(hue * 6.28318 + seg + 4.19)) -skip = if(above(si, 0.96), 1, 0) +red = 0.3 + abs(v) * 1.2 * 0.3 +green = 0.3 + abs(v) * 1.2 * 0.65 +blue = min(1, 0.3 + abs(v) * 1.2 * 1.3) diff --git a/tools/converted/root/embedded/Amp Picks/nixa - smell of music (skupers remix).ava b/tools/converted/root/embedded/Amp Picks/nixa - smell of music (skupers remix).ava index 4fa500b..d7bcc96 100755 --- a/tools/converted/root/embedded/Amp Picks/nixa - smell of music (skupers remix).ava +++ b/tools/converted/root/embedded/Amp Picks/nixa - smell of music (skupers remix).ava @@ -1,29 +1,27 @@ name: "smell of music (skupers remix)" -mode: dots +mode: lines blend: additive -persist: 0.78 -linewidth: 2.5 +persist: 0.805 +linewidth: 1.342 [init] -cols = 36 -n = cols * cols +spokes = 31 +n = spokes * 34 [frame] -rot = rot + dt * (0.05 + mid * 0.4) -hue = hue + dt * (0.04 + treb * 0.1) +rot = rot + dt * (0.118 + mid * 0.4) +t = t + dt * 2.453 +hue = hue + dt * 0.113 [point] -cx = floor(i * cols) / (cols - 1) -cy = frac(i * cols) -h = sv * 0.35 -ux = (cx - 0.5) * 1.6 -uy = (cy - 0.5) * 1.6 -rx = ux * cos(rot) - uy * sin(rot) -ry = ux * sin(rot) + uy * cos(rot) -x = (rx / aspect) * (1 - h * 0.7) -y = ry * (1 - h * 0.7) -lum = 0.25 + h * 2.2 -red = lum * (0.6 + 0.4 * sin(hue * 6.28318 + cx * 3)) -green = lum * (0.6 + 0.4 * sin(hue * 6.28318 + cx * 3 + 2.09)) -blue = lum * (0.6 + 0.4 * sin(hue * 6.28318 + cx * 3 + 4.19)) -size = 1.2 + h * 5 +sp = floor(i * spokes) +si = frac(i * spokes) +a = sp * 6.28318 / spokes + rot +wave = sin(si * 3 * 3.14159 - t) * (0.03 + bass * 0.28) +rad = 0.12 + si * 0.868 + wave +x = sin(a) * rad / aspect +y = cos(a) * rad +red = (1 - si) * 0.45 + 0.15 + sv * 0.55 * 0.3 +green = (1 - si) * 0.45 + 0.15 + sv * 0.55 * 0.65 +blue = min(1, (1 - si) * 0.45 + 0.15 + sv * 0.55 * 1.3) +skip = if(above(si, 0.985), 1, 0) diff --git a/tools/converted/root/embedded/Amp Picks/p-k - bumpy.ava b/tools/converted/root/embedded/Amp Picks/p-k - bumpy.ava index dc4bca5..156d703 100755 --- a/tools/converted/root/embedded/Amp Picks/p-k - bumpy.ava +++ b/tools/converted/root/embedded/Amp Picks/p-k - bumpy.ava @@ -1,29 +1,30 @@ name: "bumpy" -mode: lines +mode: dots blend: additive -persist: 0.88 -linewidth: 2 +persist: 0.798 +linewidth: 1.642 [init] -n = 720 +n = 640 [frame] -hue = hue + dt * (0.06 + mid * 0.2) -travel = travel + dt * (0.3 + bass_att * 1.4) +hue = hue + dt * 0.119 + beat * 0.01 +travel = travel + dt * (0.394 + bass_att * 1.4) +flash = flash * 0.86 [beat] flash = 1 [point] -g = floor(i * 9) -gi = frac(i * 9) -ph = frac(rand(g * 5.1 + 1) + travel * (0.6 + rand(g + 17) * 0.8)) +g = floor(i * 10) +gi = frac(i * 10) +ph = frac(rand(g * 5.1 + 1) + travel * (0.55 + rand(g + 17) * 0.85)) a = gi * 6.28318 -rad = ph * (0.25 + bass * 0.6 + flash * 0.08) +rad = ph * (0.28 + bass * 0.544 + flash * 0.08) x = sin(a) * rad / aspect y = cos(a) * rad fade = sin(ph * 3.14159) -red = fade * (0.3 + 0.7 * sin(hue * 6.28318 + g * 0.7)) -green = fade * (0.3 + 0.7 * sin(hue * 6.28318 + g * 0.7 + 2.09)) -blue = fade * (0.3 + 0.7 * sin(hue * 6.28318 + g * 0.7 + 4.19)) -skip = if(above(ph, 0.95), 1, 0) +red = fade * (0.35 + flash * 0.4) * 0.3 +green = fade * (0.35 + flash * 0.4) * 0.65 +blue = min(1, fade * (0.35 + flash * 0.4) * 1.3) +skip = if(above(ph, 0.96), 1, 0) diff --git a/tools/converted/root/embedded/Amp Picks/splendora.ava b/tools/converted/root/embedded/Amp Picks/splendora.ava index 302aa51..6092da0 100755 --- a/tools/converted/root/embedded/Amp Picks/splendora.ava +++ b/tools/converted/root/embedded/Amp Picks/splendora.ava @@ -1,29 +1,25 @@ name: "splendora" -mode: dots +mode: lines blend: additive -persist: 0.78 -linewidth: 2.5 +persist: 0.867 +linewidth: 1.513 [init] -cols = 36 -n = cols * cols +n = 974 [frame] -rot = rot + dt * (0.05 + mid * 0.4) -hue = hue + dt * (0.04 + treb * 0.1) +t = t + dt * (0.211 + bass_att * 1.8) +hue = hue + dt * 0.068 + beat * 0.012 [point] -cx = floor(i * cols) / (cols - 1) -cy = frac(i * cols) -h = sv * 0.35 -ux = (cx - 0.5) * 1.6 -uy = (cy - 0.5) * 1.6 -rx = ux * cos(rot) - uy * sin(rot) -ry = ux * sin(rot) + uy * cos(rot) -x = (rx / aspect) * (1 - h * 0.7) -y = ry * (1 - h * 0.7) -lum = 0.25 + h * 2.2 -red = lum * (0.6 + 0.4 * sin(hue * 6.28318 + cx * 3)) -green = lum * (0.6 + 0.4 * sin(hue * 6.28318 + cx * 3 + 2.09)) -blue = lum * (0.6 + 0.4 * sin(hue * 6.28318 + cx * 3 + 4.19)) -size = 1.2 + h * 5 +arm = floor(i * 9) +fa = frac(i * 9) +d = fa +ang = arm * 1.515 + d * 1.922 * 3.14159 + t +rad = (0.04 + pow(d, 1.746) * 1.15) * (0.7 + bass * 0.5) +x = sin(ang) * rad / aspect +y = cos(ang) * rad +red = (0.3 + 0.7 * d) * (0.3 + mid) * abs(sin(d * 2.585)) +green = (0.3 + 0.7 * d) * (0.3 + mid) * 0.22 +blue = (0.3 + 0.7 * d) * (0.3 + mid) * abs(cos(d * 2.585)) +skip = if(below(fa, 0.04), 1, 0) diff --git a/tools/converted/root/embedded/Amp Picks/zxe-Urantia.ava b/tools/converted/root/embedded/Amp Picks/zxe-Urantia.ava index e40b3a5..9414138 100755 --- a/tools/converted/root/embedded/Amp Picks/zxe-Urantia.ava +++ b/tools/converted/root/embedded/Amp Picks/zxe-Urantia.ava @@ -1,31 +1,27 @@ name: "Urantia" -mode: lines +mode: dots blend: additive -persist: 0.86 -linewidth: 1.8 +persist: 0.862 +linewidth: 2.9 [init] -n = 560 -segs = 8 +rings = 4 +n = rings * 101 [frame] -rot = rot + dt * (0.08 + mid_att * 0.5) -hue = hue + dt * (0.07 + treb * 0.08) - -[beat] -flash = 1 +t = t + dt * (0.393 + bass_att * 0.6) +hue = hue + dt * 0.094 +squash = 0.387 + 0.25 * sin(t * 0.454) [point] -seg = floor(i * segs) -si = frac(i * segs) -a0 = si * 6.28318 / segs + rot -amp = 0.12 + sv * 0.55 + bass * 0.25 + flash * 0.05 -rad = 0.15 + amp * (0.4 + 0.6 * sin(a0 * 6 + time * 2)) -a = seg * 6.28318 / segs + a0 * if(below(seg % 2, 1), 1, -1) -x = sin(a) * rad / aspect -y = cos(a) * rad -lum = 0.35 + amp * 1.2 -red = lum * (0.6 + 0.4 * sin(hue * 6.28318 + seg)) -green = lum * (0.6 + 0.4 * sin(hue * 6.28318 + seg + 2.09)) -blue = lum * (0.6 + 0.4 * sin(hue * 6.28318 + seg + 4.19)) -skip = if(above(si, 0.96), 1, 0) +ring = floor(i * rings) +ri3 = frac(i * rings) +r0 = 0.16 + ring * 0.141 +a = ri3 * 6.28318 + t * (1.2 - ring * 0.18) + ring * 2.4 +x = sin(a) * r0 * (1 + bass * 0.18) / aspect +y = cos(a) * r0 * squash +sat = frac(ri3 * 2) +size = if(below(sat, 0.14), 3 + bass * 3, 1) +red = 0.25 + bass * 0.5 + ring * 0.07 * (0.25 + bass * 0.95) +green = 0.25 + bass * 0.5 + ring * 0.07 * (0.25 + mid * 0.95) +blue = 0.25 + bass * 0.5 + ring * 0.07 * (0.25 + treb * 0.95) diff --git a/tools/converted/root/embedded/Dynamics/01 dynamic duo - tentaclism (fake hboy rmx).ava b/tools/converted/root/embedded/Dynamics/01 dynamic duo - tentaclism (fake hboy rmx).ava index 0e8c9b0..8674798 100755 --- a/tools/converted/root/embedded/Dynamics/01 dynamic duo - tentaclism (fake hboy rmx).ava +++ b/tools/converted/root/embedded/Dynamics/01 dynamic duo - tentaclism (fake hboy rmx).ava @@ -1,25 +1,25 @@ name: "tentaclism (fake hboy rmx)" -mode: lines +mode: dots blend: additive -persist: 0.9 -linewidth: 1.6 +persist: 0.833 +linewidth: 2.485 [init] -n = 1100 +n = 952 [frame] -t = t + dt * (0.3 + bass_att * 1.8) -hue = hue + dt * 0.08 + beat * 0.01 +travel = travel + dt * (0.231 + vol_att * 1.898) +hue = hue + dt * 0.056 [point] -arm = floor(i * 5) -fa = frac(i * 5) -d = fa -ang = arm * 1.2566 + d * (1.4 + mid * 3) * 3.14159 + t -rad = (0.05 + d * d * 1.15) * (0.7 + bass * 0.5) -x = sin(ang) * rad / aspect -y = cos(ang) * rad -red = (0.3 + 0.7 * d) * (0.3 + bass) -green = (0.3 + 0.7 * d) * (0.25 + mid) -blue = (0.3 + 0.7 * d) * (0.2 + treb + hue * 0.2) -skip = if(below(fa, 0.04), 1, 0) +a = rand(i * 7.3) * 6.28318 +z = frac(rand(i * 3.1 + 5) + travel * (0.5 + rand(i + 9) * 0.7)) +rad = z * z * 0.992 +x = sin(a) * rad / aspect +y = cos(a) * rad +tw = 0.4 + 0.6 * sin(z * 40 + time * 3) * (0.5 + treb) +red = min(1, tw * 1.3) +green = tw * 0.5 +blue = tw * 0.12 +size = 1 + z * 3 * (0.5 + bass) +skip = if(above(z, 0.97), 1, 0) diff --git a/tools/converted/root/embedded/Dynamics/02 dynamic duo - tentaclism (sky of contempt mix by drew).ava b/tools/converted/root/embedded/Dynamics/02 dynamic duo - tentaclism (sky of contempt mix by drew).ava index 2952217..8160d75 100755 --- a/tools/converted/root/embedded/Dynamics/02 dynamic duo - tentaclism (sky of contempt mix by drew).ava +++ b/tools/converted/root/embedded/Dynamics/02 dynamic duo - tentaclism (sky of contempt mix by drew).ava @@ -1,25 +1,27 @@ name: "tentaclism (sky of contempt mix by drew)" -mode: lines +mode: dots blend: additive -persist: 0.9 -linewidth: 1.6 +persist: 0.83 +linewidth: 2.652 [init] -n = 900 +rings = 3 +n = rings * 87 [frame] -t = t + dt * (0.25 + bass_att * 1.5) -hue = hue + dt * 0.1 +t = t + dt * (0.201 + bass_att * 0.6) +hue = hue + dt * 0.06 +squash = 0.564 + 0.25 * sin(t * 0.401) [point] -ring = floor(i * 24) -ri = frac(i * 24) -z = frac(ring / 24 + t) -rad = 0.06 + z * 0.9 -a = ri * 6.28318 + ring * 0.35 + sin(t * 0.7) * 2 -x = sin(a) * rad * (0.55 + sv * 0.9) / aspect -y = cos(a) * rad * (0.55 + sv * 0.9) -f = (1 - z) * (0.35 + bass * 0.65) -red = f * (0.45 + 0.55 * sin(hue * 6.28318 + z * 4)) -green = f * (0.45 + 0.55 * sin(hue * 6.28318 + z * 4 + 2.09)) -blue = f * (0.45 + 0.55 * sin(hue * 6.28318 + z * 4 + 4.19)) +ring = floor(i * rings) +ri3 = frac(i * rings) +r0 = 0.16 + ring * 0.108 +a = ri3 * 6.28318 + t * (1.2 - ring * 0.18) + ring * 2.4 +x = sin(a) * r0 * (1 + bass * 0.18) / aspect +y = cos(a) * r0 * squash +sat = frac(ri3 * 4) +size = if(below(sat, 0.14), 3 + bass * 3, 1) +red = 0.25 + bass * 0.5 + ring * 0.07 * abs(sin(ring * 1.3)) +green = 0.25 + bass * 0.5 + ring * 0.07 * 0.22 +blue = 0.25 + bass * 0.5 + ring * 0.07 * abs(cos(ring * 1.3)) diff --git a/tools/converted/root/embedded/Dynamics/04 dynamic duo - tentaclism (cathode ray mix by onionring of doom).ava b/tools/converted/root/embedded/Dynamics/04 dynamic duo - tentaclism (cathode ray mix by onionring of doom).ava index 73e471a..d5ceb25 100755 --- a/tools/converted/root/embedded/Dynamics/04 dynamic duo - tentaclism (cathode ray mix by onionring of doom).ava +++ b/tools/converted/root/embedded/Dynamics/04 dynamic duo - tentaclism (cathode ray mix by onionring of doom).ava @@ -1,25 +1,27 @@ name: "tentaclism (cathode ray mix by onionring of doom)" mode: lines blend: additive -persist: 0.9 -linewidth: 1.6 +persist: 0.873 +linewidth: 1.987 [init] -n = 1100 +spokes = 26 +n = spokes * 38 [frame] -t = t + dt * (0.3 + bass_att * 1.8) -hue = hue + dt * 0.08 + beat * 0.01 +rot = rot + dt * (0.076 + mid * 0.4) +t = t + dt * 1.652 +hue = hue + dt * 0.062 [point] -arm = floor(i * 5) -fa = frac(i * 5) -d = fa -ang = arm * 1.2566 + d * (1.4 + mid * 3) * 3.14159 + t -rad = (0.05 + d * d * 1.15) * (0.7 + bass * 0.5) -x = sin(ang) * rad / aspect -y = cos(ang) * rad -red = (0.3 + 0.7 * d) * (0.3 + bass) -green = (0.3 + 0.7 * d) * (0.25 + mid) -blue = (0.3 + 0.7 * d) * (0.2 + treb + hue * 0.2) -skip = if(below(fa, 0.04), 1, 0) +sp = floor(i * spokes) +si = frac(i * spokes) +a = sp * 6.28318 / spokes + rot +wave = sin(si * 5 * 3.14159 - t) * (0.03 + bass * 0.28) +rad = 0.12 + si * 0.882 + wave +x = sin(a) * rad / aspect +y = cos(a) * rad +red = (1 - si) * 0.45 + 0.15 + sv * 0.55 * 0.3 +green = (1 - si) * 0.45 + 0.15 + sv * 0.55 * 0.65 +blue = min(1, (1 - si) * 0.45 + 0.15 + sv * 0.55 * 1.3) +skip = if(above(si, 0.985), 1, 0) diff --git a/tools/converted/root/embedded/Dynamics/05 dynamic duo - chromatics (glowy mix by meaningless-existance).ava b/tools/converted/root/embedded/Dynamics/05 dynamic duo - chromatics (glowy mix by meaningless-existance).ava index 7982cd7..e7623da 100755 --- a/tools/converted/root/embedded/Dynamics/05 dynamic duo - chromatics (glowy mix by meaningless-existance).ava +++ b/tools/converted/root/embedded/Dynamics/05 dynamic duo - chromatics (glowy mix by meaningless-existance).ava @@ -1,24 +1,24 @@ -# Auto-ported from "05 dynamic duo - chromatics (glowy mix by meaningless-existance).avs" (Winamp AVS / dynamic duo) -# SuperScope point program, 4 AVSTrans macros expanded. name: "chromatics (glowy mix by meaningless-existance)" -author: "dynamic duo" mode: lines blend: additive -persist: 0.88 -linewidth: 2 -ysign: -1 +persist: 0.857 +linewidth: 1.543 [init] -n=w;pi=acos(-1); +n = 731 [frame] -t=t-0.045;t2=t2-t2r;tm2=tm2*0.9+tm2c*0.1;tm=tm*0.9+tm2c*0.1; - -[beat] -tm2c=rnd(315)*0.04+1;tmc=rnd(315)*0.04+1;t2r=rnd(10)*0.01-0.05; +t = t + dt * (0.338 + bass_att * 1.5) +hue = hue + dt * 0.042 [point] -x=i*2-1;y=-0.99; -red=sin(i*2*pi+t)*0.5+0.5;; -blue=sin(i*tm*2+t2)*0.5+0.5; -green=sin(i*tm2*2-t*0.33)*0.5+0.5; +ring = floor(i * 17) +ri2 = frac(i * 17) +z = frac(ring / 17 + t) +rad = 0.05 + z * 0.805 +a = ri2 * 6.28318 + ring * 0.411 + sin(t * 0.7) * 2 +x = sin(a) * rad * (0.55 + sv * 1.073) / aspect +y = cos(a) * rad * (0.55 + sv * 1.073) +red = (1 - z) * (0.3 + bass * 0.7) * abs(sin(z * 2.074)) +green = (1 - z) * (0.3 + bass * 0.7) * 0.22 +blue = (1 - z) * (0.3 + bass * 0.7) * abs(cos(z * 2.074)) diff --git a/tools/converted/root/embedded/Dynamics/06 dynamic duo - tentaclism (midas remix).ava b/tools/converted/root/embedded/Dynamics/06 dynamic duo - tentaclism (midas remix).ava index 7459a92..391af49 100755 --- a/tools/converted/root/embedded/Dynamics/06 dynamic duo - tentaclism (midas remix).ava +++ b/tools/converted/root/embedded/Dynamics/06 dynamic duo - tentaclism (midas remix).ava @@ -1,31 +1,30 @@ name: "tentaclism (midas remix)" -mode: lines +mode: dots blend: additive -persist: 0.86 -linewidth: 1.8 +persist: 0.848 +linewidth: 2.168 [init] -n = 560 -segs = 8 +n = 757 [frame] -rot = rot + dt * (0.08 + mid_att * 0.5) -hue = hue + dt * (0.07 + treb * 0.08) +tt = tt + dt * (0.5 + bass_att * 1.1) +hue = hue + dt * 0.053 +burst = burst * 0.9 [beat] -flash = 1 +burst = 1 [point] -seg = floor(i * segs) -si = frac(i * segs) -a0 = si * 6.28318 / segs + rot -amp = 0.12 + sv * 0.55 + bass * 0.25 + flash * 0.05 -rad = 0.15 + amp * (0.4 + 0.6 * sin(a0 * 6 + time * 2)) -a = seg * 6.28318 / segs + a0 * if(below(seg % 2, 1), 1, -1) -x = sin(a) * rad / aspect -y = cos(a) * rad -lum = 0.35 + amp * 1.2 -red = lum * (0.6 + 0.4 * sin(hue * 6.28318 + seg)) -green = lum * (0.6 + 0.4 * sin(hue * 6.28318 + seg + 2.09)) -blue = lum * (0.6 + 0.4 * sin(hue * 6.28318 + seg + 4.19)) -skip = if(above(si, 0.96), 1, 0) +jet = floor(i * 2) +life = frac(rand(i * 7.7 + jet) + tt * (0.35 + rand(i + 3) * 0.65)) +a = jet * 6.28318 / 2 + rand(i * 5.1 + jet) * 1.14 +spd = 0.4 + rand(i * 9.2 + jet) * 0.8 +px = cos(a) * spd * life +py = sin(a) * spd * life - 1.009 * life * life +x = px * (0.85 + bass * 0.35) / aspect +y = py +red = min(1, max(0, 1 - life) * (0.35 + burst * 0.55) * 1.3) +green = max(0, 1 - life) * (0.35 + burst * 0.55) * 0.5 +blue = max(0, 1 - life) * (0.35 + burst * 0.55) * 0.12 +skip = if(above(life, 0.94), 1, 0) diff --git a/tools/converted/root/embedded/Dynamics/07 dynamic duo - tentaclism (raz remix - ugly edit).ava b/tools/converted/root/embedded/Dynamics/07 dynamic duo - tentaclism (raz remix - ugly edit).ava index 8ac0c35..b5f7e26 100755 --- a/tools/converted/root/embedded/Dynamics/07 dynamic duo - tentaclism (raz remix - ugly edit).ava +++ b/tools/converted/root/embedded/Dynamics/07 dynamic duo - tentaclism (raz remix - ugly edit).ava @@ -1,25 +1,27 @@ name: "tentaclism (raz remix - ugly edit)" mode: lines blend: additive -persist: 0.9 -linewidth: 1.6 +persist: 0.873 +linewidth: 1.756 [init] -n = 1100 +bars = 44 +n = bars * 11 [frame] -t = t + dt * (0.3 + bass_att * 1.8) -hue = hue + dt * 0.08 + beat * 0.01 +rot = rot + dt * (0.118 + mid * 0.3) +hue = hue + dt * 0.119 [point] -arm = floor(i * 5) -fa = frac(i * 5) -d = fa -ang = arm * 1.2566 + d * (1.4 + mid * 3) * 3.14159 + t -rad = (0.05 + d * d * 1.15) * (0.7 + bass * 0.5) -x = sin(ang) * rad / aspect -y = cos(ang) * rad -red = (0.3 + 0.7 * d) * (0.3 + bass) -green = (0.3 + 0.7 * d) * (0.25 + mid) -blue = (0.3 + 0.7 * d) * (0.2 + treb + hue * 0.2) -skip = if(below(fa, 0.04), 1, 0) +bar = floor(i * bars) +bi = frac(i * bars) +lvl = getspec(bar / bars, 0, 0) +h = lvl * 0.767 +a = bar * 6.28318 / bars + rot +rad = 0.145 + bi * h +x = sin(a) * rad / aspect +y = cos(a) * rad +red = 0.25 + bi * 0.75 * (0.45 + 0.55 * sin(hue * 6.28318 + bar * 6.28318 / bars)) +green = 0.25 + bi * 0.75 * (0.45 + 0.55 * sin(hue * 6.28318 + bar * 6.28318 / bars + 2.09)) +blue = 0.25 + bi * 0.75 * (0.45 + 0.55 * sin(hue * 6.28318 + bar * 6.28318 / bars + 4.19)) +skip = if(above(bi, 0.97), 1, 0) diff --git a/tools/converted/root/embedded/Dynamics/08 dynamic duo - tentaclism (the y.m.o. rework #1).ava b/tools/converted/root/embedded/Dynamics/08 dynamic duo - tentaclism (the y.m.o. rework #1).ava index a6a2f6e..7b1f593 100755 --- a/tools/converted/root/embedded/Dynamics/08 dynamic duo - tentaclism (the y.m.o. rework #1).ava +++ b/tools/converted/root/embedded/Dynamics/08 dynamic duo - tentaclism (the y.m.o. rework #1).ava @@ -1,29 +1,27 @@ name: "tentaclism (the y.m.o. rework #1)" -mode: lines +mode: dots blend: additive -persist: 0.88 -linewidth: 2 +persist: 0.831 +linewidth: 1.694 [init] -n = 720 +spokes = 32 +n = spokes * 27 [frame] -hue = hue + dt * (0.06 + mid * 0.2) -travel = travel + dt * (0.3 + bass_att * 1.4) - -[beat] -flash = 1 +rot = rot + dt * (0.073 + mid * 0.4) +t = t + dt * 1.807 +hue = hue + dt * 0.131 [point] -g = floor(i * 9) -gi = frac(i * 9) -ph = frac(rand(g * 5.1 + 1) + travel * (0.6 + rand(g + 17) * 0.8)) -a = gi * 6.28318 -rad = ph * (0.25 + bass * 0.6 + flash * 0.08) +sp = floor(i * spokes) +si = frac(i * spokes) +a = sp * 6.28318 / spokes + rot +wave = sin(si * 2 * 3.14159 - t) * (0.03 + bass * 0.28) +rad = 0.12 + si * 0.758 + wave x = sin(a) * rad / aspect y = cos(a) * rad -fade = sin(ph * 3.14159) -red = fade * (0.3 + 0.7 * sin(hue * 6.28318 + g * 0.7)) -green = fade * (0.3 + 0.7 * sin(hue * 6.28318 + g * 0.7 + 2.09)) -blue = fade * (0.3 + 0.7 * sin(hue * 6.28318 + g * 0.7 + 4.19)) -skip = if(above(ph, 0.95), 1, 0) +red = (1 - si) * 0.45 + 0.15 + sv * 0.55 * abs(sin(sp * 0.4)) +green = (1 - si) * 0.45 + 0.15 + sv * 0.55 * 0.22 +blue = (1 - si) * 0.45 + 0.15 + sv * 0.55 * abs(cos(sp * 0.4)) +skip = if(above(si, 0.985), 1, 0) diff --git a/tools/converted/root/embedded/Dynamics/09 dynamic duo - tentaclism (kans of kansis mix by drew - edit).ava b/tools/converted/root/embedded/Dynamics/09 dynamic duo - tentaclism (kans of kansis mix by drew - edit).ava index 8f2db80..9337dd5 100755 --- a/tools/converted/root/embedded/Dynamics/09 dynamic duo - tentaclism (kans of kansis mix by drew - edit).ava +++ b/tools/converted/root/embedded/Dynamics/09 dynamic duo - tentaclism (kans of kansis mix by drew - edit).ava @@ -1,29 +1,24 @@ name: "tentaclism (kans of kansis mix by drew - edit)" mode: dots blend: additive -persist: 0.78 -linewidth: 2.5 +persist: 0.827 +linewidth: 2.039 [init] -cols = 36 -n = cols * cols +n = 1449 [frame] -rot = rot + dt * (0.05 + mid * 0.4) -hue = hue + dt * (0.04 + treb * 0.1) +t = t + dt * 0.447 +hue = hue + dt * 0.034 [point] -cx = floor(i * cols) / (cols - 1) -cy = frac(i * cols) -h = sv * 0.35 -ux = (cx - 0.5) * 1.6 -uy = (cy - 0.5) * 1.6 -rx = ux * cos(rot) - uy * sin(rot) -ry = ux * sin(rot) + uy * cos(rot) -x = (rx / aspect) * (1 - h * 0.7) -y = ry * (1 - h * 0.7) -lum = 0.25 + h * 2.2 -red = lum * (0.6 + 0.4 * sin(hue * 6.28318 + cx * 3)) -green = lum * (0.6 + 0.4 * sin(hue * 6.28318 + cx * 3 + 2.09)) -blue = lum * (0.6 + 0.4 * sin(hue * 6.28318 + cx * 3 + 4.19)) -size = 1.2 + h * 5 +u = rand(i * 1.7) * 2 - 1 +w = rand(i * 3.3 + 11) * 2 - 1 +m = sin((u * 6.164 + w * 5.725 + t) * 3.14159) * sin((u * 2.761 - w * 2.167 - t * 0.7) * 3.14159) +x = u * 0.936 / aspect +y = w * 0.903 +lum = max(0, m) * (0.3 + bass * 0.9) + 0.06 +red = min(1, lum * 1.3) +green = lum * 0.5 +blue = lum * 0.12 +size = 1 + abs(m) * 3.26 diff --git a/tools/converted/root/embedded/Envision/01 amphirion - the pacifist (duo's underworld mix).ava b/tools/converted/root/embedded/Envision/01 amphirion - the pacifist (duo's underworld mix).ava index caceba4..50538d8 100755 --- a/tools/converted/root/embedded/Envision/01 amphirion - the pacifist (duo's underworld mix).ava +++ b/tools/converted/root/embedded/Envision/01 amphirion - the pacifist (duo's underworld mix).ava @@ -1,31 +1,31 @@ -# Auto-ported from "01 amphirion - the pacifist (duo's underworld mix).avs" (Winamp AVS / amphirion) -# SuperScope point program, 4 AVSTrans macros expanded. name: "the pacifist (duo's underworld mix)" -author: "amphirion" mode: lines blend: additive -persist: 0.88 -linewidth: 2 -ysign: -1 +persist: 0.856 +linewidth: 1.75 [init] -n=2 +segs = 14 +n = 483 [frame] -xt=1-xtd; -yt=1-ytd; +rot = rot + dt * (0.149 + mid_att * 0.5) +hue = hue + dt * 0.117 +flash = flash * 0.85 [beat] -xtd=rnd(20)*.1; -ytd=rnd(20)*.1; -rd=rnd(20)*.1; -gd=rnd(20)*.1; -bd=rnd(20)*.1; +flash = 1 [point] -x=i*.3+xt*.5-getosc(0,0.4,0)*.25; -y=yt*.5-getosc(0,0.2,0)*.25; -size=10*(w/h)*(1+getosc(0,0.2,0)); -red=.2+rd; -green=.5+gd; -blue=.2+bd; +seg = floor(i * segs) +si = frac(i * segs) +a0 = si * 6.28318 / segs + rot +amp = 0.1 + sv * 0.55 + bass * 0.25 + flash * 0.06 +rad = 0.15 + amp * (0.4 + 0.6 * sin(a0 * 4 + time * 2)) +a = seg * 6.28318 / segs + a0 * if(below(seg % 2, 1), 1, -1) +x = sin(a) * rad / aspect +y = cos(a) * rad +red = 0.3 + amp * 1.3 * (0.45 + 0.55 * sin(hue * 6.28318 + seg * 0.8)) +green = 0.3 + amp * 1.3 * (0.45 + 0.55 * sin(hue * 6.28318 + seg * 0.8 + 2.09)) +blue = 0.3 + amp * 1.3 * (0.45 + 0.55 * sin(hue * 6.28318 + seg * 0.8 + 4.19)) +skip = if(above(si, 0.96), 1, 0) diff --git a/tools/converted/root/embedded/Envision/04 zamuz - roll-on mojo (duo remix).ava b/tools/converted/root/embedded/Envision/04 zamuz - roll-on mojo (duo remix).ava index 842ac57..c3a8458 100755 --- a/tools/converted/root/embedded/Envision/04 zamuz - roll-on mojo (duo remix).ava +++ b/tools/converted/root/embedded/Envision/04 zamuz - roll-on mojo (duo remix).ava @@ -1,29 +1,25 @@ name: "roll-on mojo (duo remix)" -mode: dots +mode: lines blend: additive -persist: 0.78 -linewidth: 2.5 +persist: 0.889 +linewidth: 1.751 [init] -cols = 36 -n = cols * cols +n = 950 [frame] -rot = rot + dt * (0.05 + mid * 0.4) -hue = hue + dt * (0.04 + treb * 0.1) +t = t + dt * (0.251 + bass_att * 1.8) +hue = hue + dt * 0.089 + beat * 0.012 [point] -cx = floor(i * cols) / (cols - 1) -cy = frac(i * cols) -h = sv * 0.35 -ux = (cx - 0.5) * 1.6 -uy = (cy - 0.5) * 1.6 -rx = ux * cos(rot) - uy * sin(rot) -ry = ux * sin(rot) + uy * cos(rot) -x = (rx / aspect) * (1 - h * 0.7) -y = ry * (1 - h * 0.7) -lum = 0.25 + h * 2.2 -red = lum * (0.6 + 0.4 * sin(hue * 6.28318 + cx * 3)) -green = lum * (0.6 + 0.4 * sin(hue * 6.28318 + cx * 3 + 2.09)) -blue = lum * (0.6 + 0.4 * sin(hue * 6.28318 + cx * 3 + 4.19)) -size = 1.2 + h * 5 +arm = floor(i * 3) +fa = frac(i * 3) +d = fa +ang = arm * 1.538 + d * 1.277 * 3.14159 + t +rad = (0.04 + pow(d, 1.775) * 1.15) * (0.7 + bass * 0.5) +x = sin(ang) * rad / aspect +y = cos(ang) * rad +red = (0.3 + 0.7 * d) * (0.3 + mid) * abs(sin(d * 3.995)) +green = (0.3 + 0.7 * d) * (0.3 + mid) * 0.22 +blue = (0.3 + 0.7 * d) * (0.3 + mid) * abs(cos(d * 3.995)) +skip = if(below(fa, 0.04), 1, 0) diff --git a/tools/converted/root/embedded/Envision/05 duo - cafe de duo (vanish's wicked jungle massive remix).ava b/tools/converted/root/embedded/Envision/05 duo - cafe de duo (vanish's wicked jungle massive remix).ava index e80c06f..bcae8f8 100755 --- a/tools/converted/root/embedded/Envision/05 duo - cafe de duo (vanish's wicked jungle massive remix).ava +++ b/tools/converted/root/embedded/Envision/05 duo - cafe de duo (vanish's wicked jungle massive remix).ava @@ -1,25 +1,31 @@ name: "cafe de duo (vanish's wicked jungle massive remix)" -mode: dots +mode: lines blend: additive -persist: 0.82 -linewidth: 2.5 +persist: 0.873 +linewidth: 1.915 [init] -n = 850 +segs = 10 +n = 623 [frame] -travel = travel + dt * (0.2 + vol_att * 1.6) -hue = hue + dt * 0.05 +rot = rot + dt * (0.112 + mid_att * 0.5) +hue = hue + dt * 0.038 +flash = flash * 0.85 + +[beat] +flash = 1 [point] -a = rand(i * 7.3) * 6.28318 -z = frac(rand(i * 3.1 + 5) + travel * (0.5 + rand(i + 9) * 0.7)) -rad = z * z * 1.1 +seg = floor(i * segs) +si = frac(i * segs) +a0 = si * 6.28318 / segs + rot +amp = 0.1 + sv * 0.55 + bass * 0.25 + flash * 0.06 +rad = 0.15 + amp * (0.4 + 0.6 * sin(a0 * 9 + time * 2)) +a = seg * 6.28318 / segs + a0 * if(below(seg % 2, 1), 1, -1) x = sin(a) * rad / aspect y = cos(a) * rad -tw = 0.4 + 0.6 * sin(z * 40 + time * 3) * (0.5 + treb) -red = tw * (0.5 + 0.5 * sin(hue * 6.28318 + i * 3)) -green = tw * (0.5 + 0.5 * sin(hue * 6.28318 + i * 3 + 2.09)) -blue = tw * (0.5 + 0.5 * sin(hue * 6.28318 + i * 3 + 4.19)) -size = 1 + z * 3 * (0.5 + bass) -skip = if(above(z, 0.97), 1, 0) +red = 0.3 + amp * 1.3 * (0.25 + bass * 0.95) +green = 0.3 + amp * 1.3 * (0.25 + mid * 0.95) +blue = 0.3 + amp * 1.3 * (0.25 + treb * 0.95) +skip = if(above(si, 0.96), 1, 0) diff --git a/tools/converted/root/embedded/Envision/06 skupers - incantation (duo remix - edit).ava b/tools/converted/root/embedded/Envision/06 skupers - incantation (duo remix - edit).ava index af866ae..2a637e7 100755 --- a/tools/converted/root/embedded/Envision/06 skupers - incantation (duo remix - edit).ava +++ b/tools/converted/root/embedded/Envision/06 skupers - incantation (duo remix - edit).ava @@ -1,40 +1,31 @@ -# Auto-ported from "06 skupers - incantation (duo remix - edit).avs" (Winamp AVS / skupers) -# Texer II point program, 4 AVSTrans macros expanded. name: "incantation (duo remix - edit)" -author: "skupers" -mode: dots +mode: lines blend: additive -persist: 0.78 -linewidth: 3 -ysign: -1 +persist: 0.892 +linewidth: 1.682 [init] -n=h;pi=acos(-1);xasp=min(h/w,1);yasp=min(w/h,1); +segs = 14 +n = 476 [frame] -xm1=xm1+xm1r;ym1=ym1+ym1r;xm=sin(xm1)*0.4;ym=sin(ym1)*0.4;redf=redf+redr;greenf=greenf+greenr;bluef=bluef+bluer;rx=rx+rxo;ry=ry+ryo;rz=rz+rzo;rzo=rzo*0.97;cx=cos(sin(rx));sx=sin(sin(rx));cy=cos(sin(ry));sy=sin(sin(ry));cz=cos(rz);sz=sin(rz); +rot = rot + dt * (0.088 + mid_att * 0.5) +hue = hue + dt * 0.074 +flash = flash * 0.85 [beat] -xm1r=getosc(0.2,0,0)/5;ym1r=getosc(0.3,0,0)/8;redr=rnd(10)/100-0.05;greenr=rnd(10)/100-0.05;bluer=rnd(10)/100-0.05;rxo=getosc(0.5,0.02,0)/15;ryo=getosc(0.3,0.02,0)/15;rzo=-abs(getosc(0.7,0.02,0)/4)-0.05; +flash = 1 [point] -k=getspec(i*80*n%n/n,1/n,0); -r=i*pi*2;d=getspec(.3,0,1)+.25+k; -x1=cos(r*4)*d; -y1=sin(r)*d*cos(i*99); -z1=cos(r)*d*sin(i*99); - -x1d=x1*cz-y1*sz; -y1d=x1*sz+y1*cz; -y2d=y1d*cx-z1*sx; -z2d=y1d*sx+z1*cx; -x3d=x1d*cy-z2d*sy; -z3d=x1d*sy+z2d*cy; -zi=1/(z3d+3); -x=if(above(z3d+3,0.1),x3d*zi,x)*xasp-xm; -y=if(above(z3d+3,0.1),y2d*zi,y)*yasp-ym; - -alpha=if(below(z3d+2.4,0),0,1); -red=alpha*(1+k)/(3+sin(redf))*(1-z3d); -blue=alpha*k/(4+sin(bluef))*(1-z3d); -green=alpha*k/(3+sin(greenf))*(1-z3d); +seg = floor(i * segs) +si = frac(i * segs) +a0 = si * 6.28318 / segs + rot +amp = 0.1 + sv * 0.55 + bass * 0.25 + flash * 0.06 +rad = 0.15 + amp * (0.4 + 0.6 * sin(a0 * 6 + time * 2)) +a = seg * 6.28318 / segs + a0 * if(below(seg % 2, 1), 1, -1) +x = sin(a) * rad / aspect +y = cos(a) * rad +red = 0.3 + amp * 1.3 * abs(sin(seg * 0.8)) +green = 0.3 + amp * 1.3 * 0.22 +blue = 0.3 + amp * 1.3 * abs(cos(seg * 0.8)) +skip = if(above(si, 0.96), 1, 0) diff --git a/tools/converted/root/embedded/Envision/07 duo - miraculous flow (nemo remix).ava b/tools/converted/root/embedded/Envision/07 duo - miraculous flow (nemo remix).ava index bd5cf33..c5ebcaa 100755 --- a/tools/converted/root/embedded/Envision/07 duo - miraculous flow (nemo remix).ava +++ b/tools/converted/root/embedded/Envision/07 duo - miraculous flow (nemo remix).ava @@ -1,25 +1,23 @@ name: "miraculous flow (nemo remix)" mode: lines blend: additive -persist: 0.9 -linewidth: 1.6 +persist: 0.91 +linewidth: 1.628 [init] -n = 1100 +n = 981 [frame] -t = t + dt * (0.3 + bass_att * 1.8) -hue = hue + dt * 0.08 + beat * 0.01 +t = t + dt * (0.579 + bass_att * 0.8) +sway = sway + dt * (0.5 + treb) +hue = hue + dt * 0.122 [point] -arm = floor(i * 5) -fa = frac(i * 5) -d = fa -ang = arm * 1.2566 + d * (1.4 + mid * 3) * 3.14159 + t -rad = (0.05 + d * d * 1.15) * (0.7 + bass * 0.5) -x = sin(ang) * rad / aspect -y = cos(ang) * rad -red = (0.3 + 0.7 * d) * (0.3 + bass) -green = (0.3 + 0.7 * d) * (0.25 + mid) -blue = (0.3 + 0.7 * d) * (0.2 + treb + hue * 0.2) -skip = if(below(fa, 0.04), 1, 0) +a = i * 6.28318 * 3 +wob = sin(a * 6 + t * 2) * (0.08 + treb * 0.3) +rad = (0.42 + mid * 0.25) * (0.85 + 0.15 * sin(a * 3 + sway)) + v * 0.202 - wob +x = sin(a) * rad / aspect +y = cos(a) * rad +red = min(1, 0.3 + abs(v) * 1.2 * 1.3) +green = 0.3 + abs(v) * 1.2 * 0.5 +blue = 0.3 + abs(v) * 1.2 * 0.12 diff --git a/tools/converted/root/embedded/Envision/08 duo - warm freeform (mykal remix).ava b/tools/converted/root/embedded/Envision/08 duo - warm freeform (mykal remix).ava index a0c141b..9a2786c 100755 --- a/tools/converted/root/embedded/Envision/08 duo - warm freeform (mykal remix).ava +++ b/tools/converted/root/embedded/Envision/08 duo - warm freeform (mykal remix).ava @@ -1,25 +1,27 @@ name: "warm freeform (mykal remix)" mode: dots blend: additive -persist: 0.82 -linewidth: 2.5 +persist: 0.898 +linewidth: 1.303 [init] -n = 850 +spokes = 32 +n = spokes * 37 [frame] -travel = travel + dt * (0.2 + vol_att * 1.6) -hue = hue + dt * 0.05 +rot = rot + dt * (0.135 + mid * 0.4) +t = t + dt * 2.906 +hue = hue + dt * 0.077 [point] -a = rand(i * 7.3) * 6.28318 -z = frac(rand(i * 3.1 + 5) + travel * (0.5 + rand(i + 9) * 0.7)) -rad = z * z * 1.1 +sp = floor(i * spokes) +si = frac(i * spokes) +a = sp * 6.28318 / spokes + rot +wave = sin(si * 3 * 3.14159 - t) * (0.03 + bass * 0.28) +rad = 0.12 + si * 0.868 + wave x = sin(a) * rad / aspect y = cos(a) * rad -tw = 0.4 + 0.6 * sin(z * 40 + time * 3) * (0.5 + treb) -red = tw * (0.5 + 0.5 * sin(hue * 6.28318 + i * 3)) -green = tw * (0.5 + 0.5 * sin(hue * 6.28318 + i * 3 + 2.09)) -blue = tw * (0.5 + 0.5 * sin(hue * 6.28318 + i * 3 + 4.19)) -size = 1 + z * 3 * (0.5 + bass) -skip = if(above(z, 0.97), 1, 0) +red = (1 - si) * 0.45 + 0.15 + sv * 0.55 * abs(sin(sp * 0.4)) +green = (1 - si) * 0.45 + 0.15 + sv * 0.55 * 0.22 +blue = (1 - si) * 0.45 + 0.15 + sv * 0.55 * abs(cos(sp * 0.4)) +skip = if(above(si, 0.985), 1, 0) diff --git a/tools/converted/root/embedded/Envision/09 zxe - pleasure point (duo remix).ava b/tools/converted/root/embedded/Envision/09 zxe - pleasure point (duo remix).ava index 65316ff..248aad0 100755 --- a/tools/converted/root/embedded/Envision/09 zxe - pleasure point (duo remix).ava +++ b/tools/converted/root/embedded/Envision/09 zxe - pleasure point (duo remix).ava @@ -1,29 +1,22 @@ name: "pleasure point (duo remix)" mode: lines blend: additive -persist: 0.88 -linewidth: 2 +persist: 0.87 +linewidth: 1.808 [init] -n = 720 +n = 856 [frame] -hue = hue + dt * (0.06 + mid * 0.2) -travel = travel + dt * (0.3 + bass_att * 1.4) - -[beat] -flash = 1 +t = t + dt * 0.572 +hue = hue + dt * 0.036 [point] -g = floor(i * 9) -gi = frac(i * 9) -ph = frac(rand(g * 5.1 + 1) + travel * (0.6 + rand(g + 17) * 0.8)) -a = gi * 6.28318 -rad = ph * (0.25 + bass * 0.6 + flash * 0.08) -x = sin(a) * rad / aspect -y = cos(a) * rad -fade = sin(ph * 3.14159) -red = fade * (0.3 + 0.7 * sin(hue * 6.28318 + g * 0.7)) -green = fade * (0.3 + 0.7 * sin(hue * 6.28318 + g * 0.7 + 2.09)) -blue = fade * (0.3 + 0.7 * sin(hue * 6.28318 + g * 0.7 + 4.19)) -skip = if(above(ph, 0.95), 1, 0) +ph = i * 6.28318 * 2.087 +fa = 2 + mid * 0.35 +fb = 7 + bass * 0.45 +x = sin(ph * fa + t) * (0.5 + bass * 0.3) / aspect +y = sin(ph * fb + t * 1.3 + 1.499) * (0.5 + treb * 0.35) +red = 0.3 + 0.45 * sin(ph * 2 + t) + abs(v) * 0.6 * 0.3 +green = 0.3 + 0.45 * sin(ph * 2 + t) + abs(v) * 0.6 * 0.65 +blue = min(1, 0.3 + 0.45 * sin(ph * 2 + t) + abs(v) * 0.6 * 1.3) diff --git a/tools/converted/root/embedded/Envision/10 zamuz - heart dynamics (duo's high dose mix).ava b/tools/converted/root/embedded/Envision/10 zamuz - heart dynamics (duo's high dose mix).ava index 6e31a7b..9a36036 100755 --- a/tools/converted/root/embedded/Envision/10 zamuz - heart dynamics (duo's high dose mix).ava +++ b/tools/converted/root/embedded/Envision/10 zamuz - heart dynamics (duo's high dose mix).ava @@ -1,29 +1,23 @@ name: "heart dynamics (duo's high dose mix)" -mode: dots +mode: lines blend: additive -persist: 0.78 -linewidth: 2.5 +persist: 0.909 +linewidth: 1.819 [init] -cols = 36 -n = cols * cols +n = 1105 [frame] -rot = rot + dt * (0.05 + mid * 0.4) -hue = hue + dt * (0.04 + treb * 0.1) +t = t + dt * (0.35 + bass_att * 0.8) +sway = sway + dt * (0.5 + treb) +hue = hue + dt * 0.091 [point] -cx = floor(i * cols) / (cols - 1) -cy = frac(i * cols) -h = sv * 0.35 -ux = (cx - 0.5) * 1.6 -uy = (cy - 0.5) * 1.6 -rx = ux * cos(rot) - uy * sin(rot) -ry = ux * sin(rot) + uy * cos(rot) -x = (rx / aspect) * (1 - h * 0.7) -y = ry * (1 - h * 0.7) -lum = 0.25 + h * 2.2 -red = lum * (0.6 + 0.4 * sin(hue * 6.28318 + cx * 3)) -green = lum * (0.6 + 0.4 * sin(hue * 6.28318 + cx * 3 + 2.09)) -blue = lum * (0.6 + 0.4 * sin(hue * 6.28318 + cx * 3 + 4.19)) -size = 1.2 + h * 5 +a = i * 6.28318 * 3 +wob = sin(a * 5 + t * 2) * (0.08 + treb * 0.3) +rad = (0.42 + mid * 0.25) * (0.85 + 0.15 * sin(a * 3 + sway)) + v * 0.184 - wob +x = sin(a) * rad / aspect +y = cos(a) * rad +red = 0.3 + abs(v) * 1.2 * abs(sin(a * 0.5)) +green = 0.3 + abs(v) * 1.2 * 0.22 +blue = 0.3 + abs(v) * 1.2 * abs(cos(a * 0.5)) diff --git a/tools/converted/root/embedded/Envision/11 nemo - we build here (duo's building blocks remix).ava b/tools/converted/root/embedded/Envision/11 nemo - we build here (duo's building blocks remix).ava index 0a31d95..5e94ac2 100755 --- a/tools/converted/root/embedded/Envision/11 nemo - we build here (duo's building blocks remix).ava +++ b/tools/converted/root/embedded/Envision/11 nemo - we build here (duo's building blocks remix).ava @@ -1,29 +1,24 @@ name: "we build here (duo's building blocks remix)" mode: dots blend: additive -persist: 0.78 -linewidth: 2.5 +persist: 0.739 +linewidth: 2.311 [init] -cols = 36 -n = cols * cols +n = 1183 [frame] -rot = rot + dt * (0.05 + mid * 0.4) -hue = hue + dt * (0.04 + treb * 0.1) +t = t + dt * 0.515 +hue = hue + dt * 0.134 [point] -cx = floor(i * cols) / (cols - 1) -cy = frac(i * cols) -h = sv * 0.35 -ux = (cx - 0.5) * 1.6 -uy = (cy - 0.5) * 1.6 -rx = ux * cos(rot) - uy * sin(rot) -ry = ux * sin(rot) + uy * cos(rot) -x = (rx / aspect) * (1 - h * 0.7) -y = ry * (1 - h * 0.7) -lum = 0.25 + h * 2.2 -red = lum * (0.6 + 0.4 * sin(hue * 6.28318 + cx * 3)) -green = lum * (0.6 + 0.4 * sin(hue * 6.28318 + cx * 3 + 2.09)) -blue = lum * (0.6 + 0.4 * sin(hue * 6.28318 + cx * 3 + 4.19)) -size = 1.2 + h * 5 +u = rand(i * 1.7) * 2 - 1 +w = rand(i * 3.3 + 11) * 2 - 1 +m = sin((u * 6.135 + w * 2.876 + t) * 3.14159) * sin((u * 3.312 - w * 5.365 - t * 0.7) * 3.14159) +x = u * 0.99 / aspect +y = w * 0.98 +lum = max(0, m) * (0.3 + bass * 0.9) + 0.06 +red = min(1, lum * 1.3) +green = lum * 0.5 +blue = lum * 0.12 +size = 1 + abs(m) * 3.466 diff --git a/tools/converted/root/embedded/Envision/12 duo & vanish - wickedjunglesmassive (yathosho's cartographic re-rub).ava b/tools/converted/root/embedded/Envision/12 duo & vanish - wickedjunglesmassive (yathosho's cartographic re-rub).ava index 45292ed..5a56765 100755 --- a/tools/converted/root/embedded/Envision/12 duo & vanish - wickedjunglesmassive (yathosho's cartographic re-rub).ava +++ b/tools/converted/root/embedded/Envision/12 duo & vanish - wickedjunglesmassive (yathosho's cartographic re-rub).ava @@ -1,29 +1,24 @@ name: "wickedjunglesmassive (yathosho's cartographic re-rub)" -mode: lines +mode: dots blend: additive -persist: 0.88 -linewidth: 2 +persist: 0.805 +linewidth: 1.835 [init] -n = 720 +n = 1292 [frame] -hue = hue + dt * (0.06 + mid * 0.2) -travel = travel + dt * (0.3 + bass_att * 1.4) - -[beat] -flash = 1 +t = t + dt * 0.675 +hue = hue + dt * 0.035 [point] -g = floor(i * 9) -gi = frac(i * 9) -ph = frac(rand(g * 5.1 + 1) + travel * (0.6 + rand(g + 17) * 0.8)) -a = gi * 6.28318 -rad = ph * (0.25 + bass * 0.6 + flash * 0.08) -x = sin(a) * rad / aspect -y = cos(a) * rad -fade = sin(ph * 3.14159) -red = fade * (0.3 + 0.7 * sin(hue * 6.28318 + g * 0.7)) -green = fade * (0.3 + 0.7 * sin(hue * 6.28318 + g * 0.7 + 2.09)) -blue = fade * (0.3 + 0.7 * sin(hue * 6.28318 + g * 0.7 + 4.19)) -skip = if(above(ph, 0.95), 1, 0) +u = rand(i * 1.7) * 2 - 1 +w = rand(i * 3.3 + 11) * 2 - 1 +m = sin((u * 3.6 + w * 6.394 + t) * 3.14159) * sin((u * 5.053 - w * 4.781 - t * 0.7) * 3.14159) +x = u * 0.897 / aspect +y = w * 0.959 +lum = max(0, m) * (0.3 + bass * 0.9) + 0.06 +red = lum * (0.45 + 0.55 * sin(hue * 6.28318 + u * 4.308)) +green = lum * (0.45 + 0.55 * sin(hue * 6.28318 + u * 4.308 + 2.09)) +blue = lum * (0.45 + 0.55 * sin(hue * 6.28318 + u * 4.308 + 4.19)) +size = 1 + abs(m) * 2.706 diff --git a/tools/converted/root/embedded/Envision/13 skupers - why i love you (duo's pulsedriver remix).ava b/tools/converted/root/embedded/Envision/13 skupers - why i love you (duo's pulsedriver remix).ava index 4ea5fe0..6b011bf 100755 --- a/tools/converted/root/embedded/Envision/13 skupers - why i love you (duo's pulsedriver remix).ava +++ b/tools/converted/root/embedded/Envision/13 skupers - why i love you (duo's pulsedriver remix).ava @@ -1,25 +1,31 @@ -# Auto-ported from "13 skupers - why i love you (duo's pulsedriver remix).avs" (Winamp AVS / skupers) -# SuperScope point program, 4 AVSTrans macros expanded. name: "why i love you (duo's pulsedriver remix)" -author: "skupers" mode: lines blend: additive -persist: 0.88 -linewidth: 2 -ysign: -1 +persist: 0.843 +linewidth: 1.547 [init] -n=10;pi=acos(-1); +segs = 8 +n = 528 [frame] -t=t-t1;t1=t1*0.9+getspec(0.05,0,0)*0.1 +rot = rot + dt * (0.074 + mid_att * 0.5) +hue = hue + dt * 0.052 +flash = flash * 0.85 [beat] flash = 1 [point] -y=i*2.1-1.05;x=0; -col=i; -red=col; -green=col*.6; -blue=0; +seg = floor(i * segs) +si = frac(i * segs) +a0 = si * 6.28318 / segs + rot +amp = 0.1 + sv * 0.55 + bass * 0.25 + flash * 0.06 +rad = 0.15 + amp * (0.4 + 0.6 * sin(a0 * 6 + time * 2)) +a = seg * 6.28318 / segs + a0 * if(below(seg % 2, 1), 1, -1) +x = sin(a) * rad / aspect +y = cos(a) * rad +red = 0.3 + amp * 1.3 * 0.85 +green = 0.3 + amp * 1.3 * 0.92 +blue = 0.3 + amp * 1.3 +skip = if(above(si, 0.96), 1, 0) diff --git a/tools/converted/root/embedded/Envision/14 duo - conjuring sands (skupers remix - edit).ava b/tools/converted/root/embedded/Envision/14 duo - conjuring sands (skupers remix - edit).ava index 40d0a3c..9449e7b 100755 --- a/tools/converted/root/embedded/Envision/14 duo - conjuring sands (skupers remix - edit).ava +++ b/tools/converted/root/embedded/Envision/14 duo - conjuring sands (skupers remix - edit).ava @@ -1,33 +1,22 @@ -# Auto-ported from "14 duo - conjuring sands (skupers remix - edit).avs" (Winamp AVS / duo) -# Texer II point program, 4 AVSTrans macros expanded. name: "conjuring sands (skupers remix - edit)" -author: "duo" -mode: dots +mode: lines blend: additive -persist: 0.78 -linewidth: 3 -ysign: -1 +persist: 0.922 +linewidth: 2.216 [init] -n=15; +n = 874 [frame] -pfx=pfx+pbx; pfy=pfy+pby; pfz=pfz+pbz; xs=sin(pfx); xc=cos(pfx); ys=sin(pfy); yc=cos(pfy); zs=sin(pfz); zc=cos(pfz); - -[beat] -pbx=rnd(10)/70; pby=rnd(10)/70; pbz=rnd(10)/70; +t = t + dt * 0.211 +hue = hue + dt * 0.039 [point] -c=i*(3.14159265358979)*15; -x1=cos(c); -y1=i*2-1; -z1=sin(c); -x2=x1*xs-y1*xc; -y2=y1*xs+x1*xc; -z2=z1*ys-y2*yc; -x3=y2*ys+z1*yc; -y3=x2*zs-z2*zc; -z3=z2*zs+x2*zc+3.5; -x=x3/z3; -y=y3/z3; -red=v*3; green=v*3; blue=v*3; +ph = i * 6.28318 * 2.729 +fa = 6 + mid * 0.35 +fb = 5 + bass * 0.45 +x = sin(ph * fa + t) * (0.5 + bass * 0.3) / aspect +y = sin(ph * fb + t * 1.3 + 1.092) * (0.5 + treb * 0.35) +red = 0.3 + 0.45 * sin(ph * 2 + t) + abs(v) * 0.6 * abs(sin(ph * 0.5)) +green = 0.3 + 0.45 * sin(ph * 2 + t) + abs(v) * 0.6 * 0.22 +blue = 0.3 + 0.45 * sin(ph * 2 + t) + abs(v) * 0.6 * abs(cos(ph * 0.5)) diff --git a/tools/converted/root/embedded/Envision/16 duo - warm freeform (ya-tho-sho treatment).ava b/tools/converted/root/embedded/Envision/16 duo - warm freeform (ya-tho-sho treatment).ava index 39952f2..89d3705 100755 --- a/tools/converted/root/embedded/Envision/16 duo - warm freeform (ya-tho-sho treatment).ava +++ b/tools/converted/root/embedded/Envision/16 duo - warm freeform (ya-tho-sho treatment).ava @@ -1,25 +1,30 @@ name: "warm freeform (ya-tho-sho treatment)" mode: lines blend: additive -persist: 0.9 -linewidth: 1.6 +persist: 0.855 +linewidth: 1.459 [init] -n = 1100 +n = 572 [frame] -t = t + dt * (0.3 + bass_att * 1.8) -hue = hue + dt * 0.08 + beat * 0.01 +hue = hue + dt * 0.129 + beat * 0.01 +travel = travel + dt * (0.44 + bass_att * 1.4) +flash = flash * 0.86 + +[beat] +flash = 1 [point] -arm = floor(i * 5) -fa = frac(i * 5) -d = fa -ang = arm * 1.2566 + d * (1.4 + mid * 3) * 3.14159 + t -rad = (0.05 + d * d * 1.15) * (0.7 + bass * 0.5) -x = sin(ang) * rad / aspect -y = cos(ang) * rad -red = (0.3 + 0.7 * d) * (0.3 + bass) -green = (0.3 + 0.7 * d) * (0.25 + mid) -blue = (0.3 + 0.7 * d) * (0.2 + treb + hue * 0.2) -skip = if(below(fa, 0.04), 1, 0) +g = floor(i * 13) +gi = frac(i * 13) +ph = frac(rand(g * 5.1 + 1) + travel * (0.55 + rand(g + 17) * 0.85)) +a = gi * 6.28318 +rad = ph * (0.305 + bass * 0.472 + flash * 0.08) +x = sin(a) * rad / aspect +y = cos(a) * rad +fade = sin(ph * 3.14159) +red = fade * (0.35 + flash * 0.4) * 0.85 +green = fade * (0.35 + flash * 0.4) * 0.92 +blue = fade * (0.35 + flash * 0.4) +skip = if(above(ph, 0.96), 1, 0) diff --git a/worklog.md b/worklog.md index d940bf1..8728103 100755 --- a/worklog.md +++ b/worklog.md @@ -764,3 +764,70 @@ Stage Summary: on every large change; the stamp renders bottom-right of the footer and the document title carries it too. Users can name local backups by the stamp (e.g. "OVE v6.0") and cross-check against z.ai Version History. + +--- +Task ID: 14 +Agent: main (Z.ai Code) +Task: v6.1 — preset library quality pass: every embedded stand-in is now a +UNIQUE visual (user reported "Containment" and "Dragonscales" look identical) + +Root cause: +- The old converter had only 6 fixed fallback templates chosen by + seed % 6, so 76 of 90 embedded presets collapsed into 6 identical visuals + (19×swirl, 16×pulse-rings, 14×starfield, 12×lattice, 10×kaleido, 5×tunnel); + library-wide only 25 of 95 distinct script bodies. + +Work Log: +- tools/convert-avs.ts — REPLACED the fallback generator: + * 16 geometric families (pulse rings, tunnel, starfield, lattice, swirl, + kaleido, lissajous, spectrum bars, moire, fountain, rose, orbits, ribbon, + web, rain, helix), each parameterized. + * 6 palettes (rainbow / fire / ice / neon-band / mono / duotone). + * Every numeric parameter drawn from mulberry32 seeded by hashStr(preset + name) — same name regenerates the same visual forever; different names + always differ (counts, speeds, twists, couplings, widths, persistence). + * Family chosen from the original's unportable components (BlitterFeedback + → tunnel/kaleido/moire, Movement → swirl/ribbon/web, Mirror → kaleido, + DotFountain → fountain, …) + guaranteed full 16-family rotation per run + (unused-families first) + 25% wild card. + * Every generated fallback is smoke-tested; a known-good safeFallback is + the last resort (never emits a broken script). + * Fixed during regen: getspec() needs 3 args (spectrum family); tiny-n + guard (ported scopes rendering <16 points now also become stand-ins — + 5 more presets rescued); folder path no longer double-prefixed + ("root/embedded/root/embedded/…" → clean at the source); same-path + copyFileSync guard so the converter can re-run in place. +- Regenerated src/lib/ava/embedded-presets.ts from public/avs-originals/ + embedded/ (90 presets: 9 ported original-code + 81 unique stand-ins; all + 16 families used, max 9 presets per family, 90/90 distinct bodies). +- prisma/schema.prisma — Preset.approx Boolean (marks stand-ins), Settings. + embeddedSeed String? (seed-version marker). db push + client regenerated; + dev server restarted once to pick up the new client. +- GET /api/presets — ensureSeeded is now VERSION-GATED: when Settings. + embeddedSeed !== EMBEDDED_SEED_VERSION ('6.1', exported from + embedded-presets.ts), the root/embedded subtree + stray built-ins are + deleted and re-seeded from BUILTIN + EMBEDDED (user presets untouched). + Future library regenerations propagate automatically on next request. + Response now includes approx per preset. +- src/lib/store.ts — PresetItem.approx?: boolean. +- src/components/ava/presets-tab.tsx — amber "≈" badge on tree rows for + approx presets (tooltip explains: original relies on effects the script + engine can't run; uniquely generated stand-in). +- src/lib/version.ts — APP_VERSION '6.1'. +- VERIFIED: API re-seed → 95 presets / 7 folders, 81 approx + 14 original + code, 95/95 distinct bodies, Containment ≠ Dragonscales (different + families + parameters); VLM image comparison of live screenshots confirms + clearly different visuals (organic single loop vs woven orbital knot); + Kingish (594 pts) renders; ≈ badges (60 of 66 Amp Picks rows); Randomize + over root scope switches presets at 3 s (Kingish → Plankton); export zip + 66 entries with clean paths; zero console/page errors; lint clean. + +Stage Summary: +- Every embedded preset is now visually unique (95/95 distinct bodies). +- Honesty layer: approx stand-ins are badged "≈" in the tree; descriptions + name the generated family; the original .avs download remains one click. +- Regeneration pipeline: bun tools/convert-avs.ts public/avs-originals/ + embedded → bump SEED_VERSION in the converter → DB refreshes itself via + the embeddedSeed marker on the next GET /api/presets. +- 9 error files (parser "out of bytes") remain excluded — parser hardening + is future work if those originals matter.