尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證正在載入完整 README。 以下為已儲存的摘錄。
A head start on your xLights sequences: turn a song into an xLights sequence,
right in your browser, then finish it your way in xLights. (Formerly Lights Auto Sequencer.) An
independent tool for xLights users; not made by or affiliated with the xLights project.
Everything runs on your own computer: the song and your show folder are never uploaded.
New to it? Read How to use
(tutorial.html), or press Show me around in the app for a guided tour.檢視完整 README ↗A head start on your xLights sequences: turn a song into an xLights sequence, right in your browser, then finish it your way in xLights. (Formerly Lights Auto Sequencer.) An independent tool for xLights users; not made by or affiliated with the xLights project. Everything runs on your own computer: the song and your show folder are never uploaded.
New to it? Read How to use
(tutorial.html), or press Show me around in the app for a guided tour.
xLights versions: show folders from xLights 2021 or newer (tested with layouts saved by 2021–2026 versions). Saved sequences open in xLights 2023 or newer; the Moving Head effect needs 2024.10 or newer (the Export dialog can leave it out for older versions).
Ideas, questions, bugs? Join the Discord: #suggestions, #bugs, #help, #show-off.
Two tabs:
.xsq that xLights opens and renders.Online: https://socman1984-hub.github.io/SequenceStarter/ (GitHub Pages, from the
main branch). GitHub Pages can't send the cross-origin isolation headers the models like,
so coi.js adds them through a service worker (one automatic reload on the first visit);
_headers / netlify.toml do the same on Cloudflare Pages or Netlify.
On your own computer:
node serve.js
then open http://127.0.0.1:8765 in Chrome or Edge and drop an MP3 on the page.
(Opening index.html directly still does the beat/section analysis, but finding words needs
the server: the speech and voice models run in module workers and need cross-origin
isolation, which serve.js turns on.) For testing, --media <folder> and --show <folder>
mount a song folder at /media/ and a show folder at /show/.
| Output | How |
|---|---|
| Tempo + beat grid | Autocorrelation for a rough tempo, then a circular-concentration fit against the kick drum for precision, with a kick-gap test to fix half/double-time errors. Snaps to a whole BPM when that fits as well. |
| Downbeats / bars | Votes from kick vs snare (backbeat), chord changes, and big sound changes, which tend to land on bar lines. Shift it by ear with the beat click (the downbeat clicks higher). |
| Sections | Bar-by-bar self-similarity (chroma + timbre), a novelty curve, and boundaries snapped to bars and 4-bar phrases. Repeats are grouped (A/B/C) and named heuristically, so rename them. |
| Energy | Loudness level 1–5 per bar, plus a 50 ms loudness curve in the JSON. |
| Drum hits | Kick / snare / hi-hat / all onsets from band-limited spectral flux. |
| Words (Find words & vocals) | See below. |
| Vocals | When someone is singing (hysteresis gate on the separated voice) and the melody (YIN pitch tracking → notes like A3). |
demucs-web, WebGPU). ~40 s for a
3-minute song on a desktop GPU; the 172 MB model is kept in the browser's Cache Storage.whisper-base.en is the clock: its word starts sit on the singing.whisper-small.en hears the words far better but starts them 0.2–1 s late, so it is
only used for the text, and only when no lyrics were pasted.align.py with fixes for stray anchors (ad-libs) and missed line openers.dict/),
with numbers spelled out ("2017" → twenty seventeen).Results (voice stem and transcripts) are cached in IndexedDB per song, so a reopened song is instant, and pasted lyrics are remembered per song.
Measured on Dusty Bibles against the reviewed lyric track: line starts median 75 ms apart, 77% within 0.25 s, 96% of words starting on a sung syllable, none starting in silence. Weak spot: when Whisper badly mishears a song that repeats a line many times, a line can land on the wrong repeat. Fix it in xLights after import.
In the timeline's Words row, drag a word's left edge to move its start (or its right
edge, where a gap follows, to move its end), or drag the word to move it; drag a line in the Lyrics row to move the whole line. Starts snap to
vocal onsets (Alt places freely). Click a word and use ← → to nudge 10 ms (Shift 50 ms).
Double-click a word (or Enter / F2 on the picked one) to type new words: the same count keeps
their times, more or fewer share the word's span by length. Double-click a Lyrics line or ✎ in
the line list retypes a line; double-click empty space in Words adds words there (part of the
line it falls in, or a new line). Added words are add:<id> edits [s, e, text, line], new
text on a found word is [s, e, text]. Delete removes the picked word; ✕ in the line list removes a line's words; remove them
next to the filled-in sounds removes every filled-in word (stored as a [-1, -1] edit).
Ctrl+Z undoes. Edits are kept per song (keyed by word position + word), survive
"Update words" when the lyrics around them are unchanged, and can be removed in one go.
xlights_rgbeffects.xml (+ xlights_networks.xml, house photo) as
files. Only read, unless you press Save into show folder. Once loaded, ↻ Reload show reads the
same folder again (after layout changes in xLights) and Pick different files… swaps the files; the plan stays.
Props placed far outside the preview area (Show.farAway) are drawn but don't set the view's framing.js/show.js ports xLights' model geometry (Custom, Matrix, Tree, Star,
Single Line, Poly Line, Arches, Window Frame, Cube). Checked against a real layout:
every prop lands on the house photo, and node numbering matches xLights exactly
(channel-by-channel against an xLights render: canes, floods, matrix, snowflakes and
singing faces 100% / 83–90%).Under the preview: a transport strip (previous / next section, play, loop, ½× / ¾× / 1× speed, bar and beat counter) and, on wide screens, an effect grid for the section that is playing: a row per prop or group, a block per effect over time, bar lines and the playhead. Hover a block to see it on the house, click it to open its light row, click empty space to play from there.
Wide screens: the preview is pinned on the left, the plan scrolls on the right. Narrow screens: a smaller preview stays pinned on top.
🔁 Loop on a section card plays that section over and over (moving the playhead elsewhere ends it). 🎲 Randomize loops the section it changed.
Light rows show as one line; click to open their settings. Hover a row to outline its props on the house. Solo / Mute change the preview only, never the saved sequence.
Inside a part, Brightness (0–200%, c.bright) scales every row's xLights Brightness in that part
(not DMX or imported rows) and Loudness (c.loud, 0–100) replaces the measured energy for new
ideas (section 🎲, row 🎲, Suggest a plan). Both survive new ideas.
A row's 🎲 gives just its lights a new effect and colors (from the part's palette and the effect choices); ↶ takes that row back a step. Clicking a row's colors opens a palette box: single colors for the picked color, or a whole palette at once. Parts with 4+ rows get a filter box and a Sort list (as planned / lights / effect / when; display only, the plan's order is the layering).
Click a prop on the house to see what lights it in the playing section, add lights for it (or one of its groups), or use it for randomizing. Drag a box to pick several.
Ideas take a Feeling (peaceful, joyful, playful, powerful, magical) and an Intensity (or both from the song). Edit color schemes… adds, edits, removes or randomizes schemes, with a way back to the defaults. Prop mix… sets, per prop type (or any prop or group you add) and per kind of section, whether ideas use it Never / Less / Normal / More / Always. Leave out of ideas… lists props, groups or parts that ideas must never use (a group holding one of them is skipped too); clicking a prop on the house can also add it to or take it off that list.
Ideas follow the music: each part's loudness sets how many props are lit and how bright; repeats share effects but scale with their loudness; one or two prop types carry the beat over a dimmer base, and loud parts add a whole-house hit. Each lift gets its own transition (ramp up, sweep in, burst, color hit or crossfade, never the same twice running; the dark-then-flash build & land only for the biggest lift); big drops crossfade. Each part's menu changes it. The lights fade when the song does.
File › Import xLights sequence (.xsq) (or drop an .xsq on the page, after the show folder is
open) reads a sequence made in xLights. Its song is found from its mediaFile name like a
project's. Every effect is kept exactly: its settings and palette strings, layer, submodel or
strand/node, and the file's own timing tracks, version stamp and row order. They become
imported rows per part, prop, layer and effect type (rows can change lights and colors, be
muted, duplicated, removed, copied to another part; splitting or joining parts re-homes them by
time). The export writes them back untouched, under anything made here. Checked: A Christmas
Storm 2024 (3,619 effects, strands, 10 timing tracks) imported and exported renders
byte-identical in xLights. Keeping the version stamp matters: xLights upgrades old settings on
load by it.
The preview draws imported effects with the closest effect here, reading their settings,
value curves, buffer style, transforms, rotation, blends and fades, and composes rows in the
sequence's order. Pictures, videos (<video>, kept in step with the song) and shaders (the
ISF .fs files run with WebGL2 with xLights' uniforms; js/xlmedia.js) load from the show
folder. Every xLights effect has a drawing here (see Effects below), read back from its own settings.
Measured bulb by bulb against xLights renders: A Christmas Storm 93% of lit bulbs drawn;
Golden's shaders 57–100%. Videos could not be checked in the hidden test browser (it never
decodes frames), only in a normal tab.
Save project (Ctrl+S) writes <song>.lightseq.json: tempo grid, your sections, lyrics
with their timing and hand edits (and the voice timing they need), the whole light plan,
and the song path for xLights. The song itself is not inside, and browsers never reveal a file's folder, so the page
finds it again by itself: through the file handle the browser keeps for that song (when it
was chosen with choose a file or dropped, in Chrome/Edge), else by name and size in your
music folder or show folder. Only if all of that fails does a banner at the top ask you to
choose it (or pick your music folder once, so every project looks there). Chrome/Edge save back to the
same file each time (Shift+click Save project to save elsewhere); other browsers download
it. The page warns before closing with unsaved changes. Work is also kept in the browser
between visits, but the project file is the copy to trust.
js/effects.js): Solid, Flash-and-fade, Color wash, Chase, Bars,
Spirals, Pinwheel, Twinkle, Shockwave, Marquee, Butterfly, Fan, Ripple, Spirograph,
Wave, Meteors, Curtain, Morph, Snowflakes, Strobe, Off, Beat meter (VU Meter timing-event
flash / sweep on the Beats, Bars or Note Onsets track), Moving head, Singing face (Faces, driven by the Lyrics track; offered on any row whose lights include a prop with a face), Show the words (Text on a
matrix, driven by the Lyrics track). Each has a browser renderer for the preview and an
xLights settings string taken from working effects in real sequences (Fan, Ripple and
Spirograph previews are ports of xLights' own render code). On group rows the buffer is
written explicitly (Per Model Default, Per Preview, or Overlay - Centered / Scaled
for "every prop the same"), so xLights draws what the preview shows.js/effects-more.js): Plasma, Shimmer, Garlands, Fill, Tree,
Life, Lightning, Lines, Fire, Candle, Snowstorm, Circles, Galaxy, Fireworks, Shape, Tendril,
Liquid, Warp, Kaleidoscope, Adjust, Duplicate, VU Meter (music kinds), Music, Piano, Guitar,
Text, Single Strand Skips and FX (118 WLED patterns), State, DMX, Servo, Sketch, Glediator,
and Pictures / Video / Shader chosen by hand. Settings use xLights' own keys and defaults
from its effect metadata (js/xlmeta.js, built by node tools/xlmeta.js <xLights source>),
in the form the sequence's xLights version reads (keys that changed in 2026 are written the
old way for the default 2025.09 version and migrate in newer xLights). Previews are ports of
xLights' render code, checked effect by effect against headless xLights renders; random
effects match in look and amount of light, WLED patterns are calibrated from xLights
measurements, and Liquid (a physics engine in xLights) and the music-following kinds are
approximations. Warp, Kaleidoscope and Adjust use xLights' Canvas mode (they get the layers
under them). Piano / Guitar read a Vocal Notes timing track (MIDI numbers) that the export
adds when the words have been found..xsq, not in the
show folder files. Imported sequences keep their own order.Switching and auto-save. Projects open through the browser's file picker, so Save writes back to the same file. The File menu lists recent projects (kept as file handles in the browser) and everything in a chosen projects folder; switching with unsaved changes asks Save / Don't save / Cancel. Auto-save saves 1.5 s after each change (Chrome/Edge). When the browser wants permission to read a remembered song again, a note offers one Open click instead of browsing (Chrome/Edge also offer Allow on every visit). The theme menu at the top right switches Auto / Light / Dark.
Everything runs on this computer; the song is never uploaded. Models download from the Hugging Face hub and libraries from jsDelivr the first time.
| Song | Detected | Known |
|---|---|---|
| Dusty Bibles | 103.00 | 103 |
| No Fear | 94.00 | 94 |
| Home in My Heart | 160.00 | 160 |
| Gonna Be Alright | 76.00 (halved from 152) | 76 |
The browser's MP3 decode lines up sample-for-sample with FFmpeg (which xLights uses), so exported marks line up with the audio in xLights.
js/analysis.js: beat/section/energy analysis (no DOM)js/vocals.js: voice separation, transcription, alignment, phonemes, melodyjs/workers/separate.js, js/workers/transcribe.js: the two models, off the main threadjs/app.js: page, timeline, playback and beat click, word-timing edits, timing exportjs/show.js: show folder access, rgbeffects parsing, model geometry, row targetsjs/effects.js: effect library (preview renderer + xLights settings) and color schemesjs/xlmedia.js: imported Shader (WebGL2) and Video effects for the previewjs/sequence.js: plan → timed effects, preview frame renderer, .xsq writerjs/ideas.js: random-but-sensible light ideas for a section or the whole songjs/sequi.js: the "Make a sequence" tab (show, preview, section cards, picker, copy, undo, saving)dict/: phoneme dictionaries copied from xLights (resources/dictionaries)serve.js: local server with the headers the models needFrom the console, XLWeb.loadUrl('/media/song.mp3') loads a song by URL.
GNU General Public License v3.0 or later (see LICENSE). The prop geometry in the preview
is ported from xLights (src-core/models, GPLv3) and the mouth-shape mapping follows
Papagayo (GPLv2 or later).
Loaded at run time (not stored in this repository unless noted):
| Piece | Used for | License |
|---|---|---|
| Transformers.js | runs the speech model | Apache 2.0 |
| Whisper (base.en, small.en) | finding the words | MIT |
| ONNX Runtime Web | runs the voice separator | MIT |
| Demucs via demucs-web | separating the voice | MIT |
CMU Pronouncing Dictionary (in dict/) | word sounds for the singing faces | BSD-style |
js/ideas.js): Suggest a plan / Another idea for every section, or only the
ones chosen under For: (quick picks like Only Chorus; the rest keep their lights) (option:
optionally the same look for every part with the same name), and Randomize per section, optionally limited to
that section's lights to use. 🎲 Randomize the whole sequence (above the parts) does
every part at once, whatever For: says. Which effects each kind of prop may get, and how
often, comes from the 🎛 Effects for props tab (js/fxprefs.js, js/fxpage.js): its
Default set is what the owner's own sequences use on that kind of prop; users change the
weights, save named sets (kept in the browser, exported / imported as .effects.json), and
ideas skip a kind of prop with nothing switched on. Profiles (js/profile.js) learn those weights from a
folder of the user's own .xsq files: effect time share per prop kind (looks) and counts of short
effects (hits, < 1.2 s), for all kinds, picked kinds, or single props (own columns, which groups made
of them follow), plus up to 16 real setting combinations per effect that ideas reuse 75% of the time.
Choices are then shifted by the section's energy.
Undo/Redo (Ctrl+Z / Ctrl+Y on this tab) step back through tries.Fit with the music under the plan scores it (0-100): does the house follow loudness, does the beat show, are loud parts brighter. Try 4 ideas, keep the best fit makes four ideas and keeps the best one. Light rows have Brightness % and, for steady rows, Fade at end, Fade in / out (every effect), Mix (add or mask) and, on groups, On a group; each part has Hold a breath at the end.
Ideas borrow pro technique (studied from bought sequences; techniques only, no effects copied): round props in a group all show the same picture, loud parts give them a fast run of short hits on kick and snare, almost every effect fades in or out, matrices and mega trees often get a mask (a colorful bed seen through moving blades, spirals or a ring), and props built from parts (rings, spokes, star on top) sometimes light each part differently, the same part on every prop together.
Ideas also follow the owner's own sequences (a survey of 56 of them): in lively parts steady rows restart every beat or bar, chases turning round and solids changing color; 3D looks by default; sparkles on about one row in seven; the new effects where he uses them (Wave on the mega tree and peace stakes, Curtain on the tree and matrix, beat meters on canes and mini trees, Morph and Meteors on lines); a small prop flashing on the sung notes or the music's hits; parts that wipe or burst in.
A long part changes with its energy: where the music gets clearly louder or quieter inside it, ideas split it into phrases (same props, more or fewer lit, the other color, moving things turned round). Light rows can be limited to Bars from / to.
Colors: each part uses one or two colors; verses take turns (red verse, green verse), choruses use both and swap them bar by bar, quiet parts go cool.
Words on the matrix in choruses (option): the lyrics on the matrix in the lifting parts, a dim slow background on it everywhere else.
📝 Words on the matrix… adds the words to an existing plan without changing anything else: choose the matrix, the parts (choruses ticked to start), text size and color, and whether to dim the matrix's other lights there. Remove from these parts takes them off.
Prop types… tells ideas what a prop is when its name doesn't say. Without it, a group is judged by what most of its members are (so "Everything but starburst" is not a group of stars), and a model by its name, then its xLights type. Names are read in English, French, Spanish, German and Dutch, accents ignored (étoile, flocon, sapin, estrella, Schneeflocke, sneeuwvlok...). In the Prop mix, props you added show "added by you" and a Remove button.
The control boxes above the plan fold with ▾ and, after 🔒 Layout locked is clicked to unlock, move by dragging the ⠿ grip or with ↑ ↓ (Reset layout restores them). Locked by default; order and folds are remembered in the browser.
The 🎲 tick on a section card says whether Another idea changes that part (same as the For: menu). The tick at the start of a light row: untick it to keep that row (🔒) when randomizing; new ideas fill in around it.