Skip to content

Releases

strobe v0.4.0

Choose a tag to compare

@github-actions github-actions released this 11 Nov 05:45
b9fc207

Added

  • the sandbox plays cube maps and a still MEDIA picture the visitor adds (D564) (d6d5374)
  • a short dropdown shows its options side by side, and a mapped control says so on its row (D563) (b572418)
  • /play makes scenes from a picture (a304b47)
  • /play generates controls for a scene, with progress, Cancel, the app's review and Undo (a6c61e3)
  • generating controls runs a step at a time, and the sandbox's engine can run it between frames (3c980c0)
  • the roadmap page has jump links to Now, Next and Known gaps (bc46d77)
  • /play says what it is below the sandbox (3db2e1b)
  • scene cards open their scene in /play, and titles no longer truncate (2268f86)
  • the note naming a document's source file moves below the document (051a19f)
  • long documents keep a readable measure and have contents on a phone (b06f06c)
  • site tables stack on a phone, so the last column is not off screen (6ee8686)
  • the home page shows measured frame times, read from BENCHMARKS.md (a21c9ed)
  • the home hero puts Download and the browser sandbox first (36389ec)
  • the download page offers the current zip by name, with its size and checksum (95dc591)
  • the site's social cards are files rendered by Metaplate 0.8.2 (D557) (9475e7c)
  • the computer and display stay awake while the output is fullscreen (D556) (a9f29f9)
  • the /play sandbox plays a scene's pictures, includes, textureFinalPass and presets as the app does (D554) (2f1f37d)
  • Shadertoy cube-map inputs become scene cube maps, and the keyboard reads 256x3 with every key up (D553) (efdad8f)

Fixed

  • /play recovers from a lost WebGL context (ed52ec4)
  • /play's review lets a range be typed, a negative number included (0af23ff)
  • /play's status line says Compiled only after a compile has succeeded (abed0a0)
  • the download button keeps its label on one line on a phone (0e6464c)
  • the header's version chip waits for the width to hold it beside the nav (e65746d)
  • scene cards clamp long descriptions and drop the MIT and Strobe credit lines (c5959ea)
  • the architecture social card no longer counts fifteen crates (34ec888)
  • the architecture page counts its crates instead of saying fifteen (6702419)
  • the architecture blurb no longer counts fifteen crates (8120814)
  • the home screenshot's caption names the scene it shows (23dbb2a)
  • the site's prefetches no longer log eight 404s on every page load (1f565c7)
  • the site reads the release once per build and again in the browser (D557) (50bd548)
  • the site's package says source-available, master, and no version of its own (a14bc06)
  • self-host the site's fonts from @fontsource, so a build needs no font service (36cc1b2)
  • --diagnose raises its box only when nothing reads its output, so a piped rc harness run ends (D551) (17eb901)

Performance

  • a hand-loaded scene compiles in the background where the driver can, and the output plays on (D555) (8a954cf)

Changed

  • the GLSL tokenizer and the pass markers move to strobe-scene, so autocontrol no longer needs the importer (1e9a24a)

Documentation

  • U-11's decision is D563, since #107 took D561 (61e27b2)
  • say which scenes CI takes through Generate controls (642bc28)
  • record D558, generating controls in the sandbox a step per animation frame (eb7f093)
  • the README's opening and performance section say what the site now says (cac3416)
  • record D557, the site lane in CLAUDE.md, and the site's README (f70858f)
  • rendered docs drop the old-hardware wording (5bb0e78)
  • the roadmap social card is shorter (d5713ec)
  • the compatibility social card is shorter (4deb083)
  • the play social card is shorter (6ec6801)
  • the scenes social card drops MIT licensed (184f914)
  • the guide social card is shorter (675c729)
  • the download social card is shorter (e626d49)
  • the home social card says what Strobe is (5c92bd3)
  • the 404 page says plainly that nothing is there (67b52d7)
  • the roadmap page's summary and description drop their em dashes (a18d550)
  • the compatibility page's note names its file (735ab77)
  • the guide page stops repeating the document's own first line (2cdd9f7)
  • the scenes page is titled for what it is and states the licence (162a2f3)
  • the download page states the GPU floor and the licence accurately (861935a)
  • the site's title, description and footer say source-available (6f477f4)
  • the home page's status says what is run, what is not verified, and the licence (a2027ec)
  • the Synesthesia comparison says Strobe is independent of its makers (f463b3e2)
  • the home page's scene library blurb says what the scenes are (ef1adc5)
  • the home page's features are six plain paragraphs, not eight icon cards (7257a38)
  • the home page says what Strobe is, without the line about old laptops ([c556a7c](https://github.com/lnorton89/strobe/commi...
Read more

strobe v0.3.0

Choose a tag to compare

@github-actions github-actions released this 05 Nov 01:24
e401d98

Added

  • Shadertoy imports go to user-scenes/shadertoy-imports, and the Library renders missing thumbnails (D547) (f97eaa8)
  • other scene folders are searched through their subfolders (D546) (9657c9c)
  • prerender the library's scenes at launch and on a rescan, and open on the Library (D542, D543) (ecb8d36)
  • list other scene folders in place, user-scenes by default; remove the watched folder (D538) (00dd39f)
  • webcam input behind syn_Media through strobe-capture (M-04, D528-D530) (0652441)
  • /play shares short links, stored once in R2 by content hash, from a Cloudflare Worker (D525, D527) (e239561)
  • the website names the release GitHub publishes and drops its stats band (D526) (420064b)
  • /play, a browser sandbox running Strobe's own scene player as wasm on WebGL2 (D524) (95ccd19)
  • scene 18, Jester Totem, with UV rays, twins and a perform group of controls (D520) (ca1576f)
  • remote and projector pages as installable web apps; the projector service updates at logon (D517, D518) (be7238e)
  • the projector page asks for a password instead of a token in a link (D516) (6486003)
  • the controller draws its quick controls over the host's own rows (D515) (bef98c7)
  • the desktop remote sends the controls as data and the controller draws them (D513) (87fc7a7)
  • controls as one-row value bars under ruled group headers (D510-D512) (2276d8d)
  • Connect on a Strobe found on the network proves the chosen trust file (D509) (bfbf1a4)
  • install.ps1 installs strobe-projector and retires the Python tool (D502) (773f822)
  • the headless projector service follows its config file (D502) (0fb4777)
  • Settings > Projectors switches the projectors from Strobe (D502) (f85561e)
  • strobe-projector, the projector power tool in Rust (D502) (3224d56)
  • name each paired device by what it asked as, its kind, address and times (D500) (09cdd76)
  • tools: projector power control over PJLink for the show PC (D497) (16b6779)
  • upload the synthetic audio textures in the bench and add a render-scale sweep (32ac6a8)
  • credit contributors and upstream projects on the About page (5fbb9be)
  • change a scene's HARD and SMOOTH transitions on a new song, heard or told with new_song (e72ee04)
  • generate controls from the Controls view and save them into the scene (#32) (6a871f4)
  • add the project website in site/, adapted from the Cinnabar site (9fb3464)

Fixed

  • the crash monitor's start-up refusals stay out of the log, and --diagnose keeps the run before (R-09) (c875131)
  • background compiles leave the output four fifths of the time, and a rebuilt context reloads the thumbnails (D550) (62f7c6b)
  • the QuickJS and MIDI timing tests run alone under nextest on this branch too (18fcd4b)
  • the prerender doc names its function-local gap in plain code, which rustdoc cannot link (570d663)
  • client-list saves take turns under a process-wide lock instead (f001763)
  • each client-list save writes its own temporary file, so a token still rotates (8903945)
  • timing tests run alone under nextest, and the parse guards cannot flake (D544) (0951e41)
  • the coverage job installs the ALSA headers strobe-io's MIDI layer links (D539) (958b2d7)
  • check-linux.sh passes shellcheck (D541) (2737bae)
  • link the C runtime statically, and check imports and the loaded ANGLE (D544) (aaf0f2e)
  • release.yml uploads every file as its own argument (SC2046, D538) (8e4600a)
  • thumbnails decode by their bytes and fill the card (D540) (4fb9eb2)
  • what the new linters found, and actionlint built from its tag (D541) (6da7273)
  • the client list's save retries a file Windows holds for a moment, so a token still rotates (D531) (65086d3)
  • the macOS job skips strobe-web, and the sandbox test reads a control's value as a number (0a0f444)
  • withdraw Jester Totem, a friend's shader, from scenes/ and the site (D526) (a0cb046)
  • remote control rows are laid out at the host's size and scaled with the picture (D519) (f5be68e)
  • the projector service's supervisor swaps in a new build itself; the launcher only leaves it (D518) (c6d8fb4)
  • testing --make-remote-trust no longer puts message boxes on the screen (517619e)
  • hovering a toggle no longer draws it on; Close reaches the window's corner (D513) (45c75b5)
  • every control is a row in one frame, with its widget at the right end (D510) (a15f984)
  • toggles keep their switch and colours their swatch, not bars (D510) (629e6cf)
  • don't swap a covered control frame Windows did not paint (D508) (bf0029f)
  • pj prints only its own output; the log header reaches stderr only at info (D506) (149d77c)
  • credit the people who made Strobe, not the bots and coding agents they ran (D501) (40a9376)
  • let --diagnose exit once its report is saved (D499) (d24327e)
  • keep a Shadertoy import's iTime running through a resize at any speed (cfeb567)
  • draw the tilt-shift blur as Synesthesia's engine does, its taps capped for GLSL ES (7d7d369)
  • compute the SSF helpers as Synesthesia's engine does, not as its docs say (D490) (f5f9536)

Performance

Read more

strobe v0.2.0

Choose a tag to compare

@github-actions github-actions released this 26 Oct 22:57

Added

  • choose ANGLE's backend with --gl angle-d3d11|angle-vulkan|angle-gl|angle-metal (#29) (b35bb70)
  • rebuild the app's UI on a shared form grammar, with LAN discovery and approve-only pairing (#26) (4784c43)
  • log when the fullscreen output over the control window loses the focus (D453) (a75c76a)
  • scenes: Blacklight Carpet, UV-lit arcade confetti carpet with coiled helix streamers (D439) (d3eb5e9)
  • adaptive resolution steps down on missed refreshes, not only the mean GPU time (D314) (32e3cc8)
  • audio: on Linux fall back to a pulse or pipewire input when the default will not open (084c6db)
  • control a venue's show machine with a trust file, reconnecting by itself (4da7d2b)
  • a controller id for a laptop and the Host header a trusted proof binds to (3196ef4)
  • app: --audio ambient, the synthetic track without its beat (ac94a3c)
  • app: one click on a scene card makes it live, and LIB flips between Scenes and Controls (f400de0)
  • bench: --probe finds the size where a driver drops work, --window-size bisects the drawable (D289) (958ebca)
  • gfx: STROBE_GL_TRACE records where the renderer draws, and a test pins that it never uses framebuffer 0 (D289) (403d2da)
  • app: venue mode launch flags and trust file on the host (c9eed9b)
  • remote: trusted pairing over the WebSocket protocol (2337d78)
  • remote: trust file and HMAC-SHA256 challenge-response for venue mode (2b19e43)
  • scenes: Acid Mirror gains hairline streaks, crisp edges and more black, and re-seeds at once after a resize (D279) (1a59ae8)
  • scenes: Acid Mirror rebuilt on a mirrored advected feedback buffer (D279) (d0fb00d)
  • scenes: Neon Ribbon Flow rebuilt as layered translucent ribbons (D278) (306c7a4)
  • scenes: Electric Bloom rebuilt as a three-layer glowing garden (D277) (510aa24)
  • scenes: rebuild Chromatic Rise as a feedback-advected, posterised marbling (D276) (59fc280)
  • add scoped desktop-to-desktop remote control (20fc9ef)
  • corpus: --show-window renders in a shown tiny window, for AMD's native WGL (2f2093e)
  • add Chromatic Rise psychedelic marbling scene (a56f864)
  • app: --output-monitor N and --fullscreen put the output on the projector at launch (b731fde)
  • ui: side panel status strip and icon tabs, help bar, panel at 31%, banners that cannot overflow (41b425b)
  • ui: Synesthesia-style shell: rail-switched main view, library grid, persistent side panel (5b61c8b)
  • app: Synesthesia's scenes join the library where it is installed, and its own are never written (D271) (49f3714)
  • scene: one place finds Synesthesia's install and scene folders, and #include uses it (D271) (ee1f47f)

Fixed

  • keep a relative trust-file path as the whole path it named (89780dc)
  • move a remote whose system-chosen address went away to the new one (0a70ffe)
  • withdraw a remote command answered busy instead of running it later (1df81af)
  • a refused command line exits 2, not the 1 of a fault (D454) (32a28be)
  • a render-scale change keeps the warming and outgoing scenes' pictures (D440) (c206984)
  • a playlist that does not load at launch leaves a scene playing (D452) (5f858e2)
  • an --output-monitor that is not connected at launch is waited for (D451) (de65374)
  • a fullscreen launch puts no crash or stop box over its show (D450) (91a3072)
  • an atomic write syncs its temporary file before the rename (D438) (f65ea18)
  • an anchored show waiting for its time follows the wall clock (D437) (e7caa66)
  • Hold is refused until a cue is playing (D436) (78bdc8d)
  • a save that changes nothing the show plays is not a reload (D435) (80d4f71)
  • a hold survives a reload or an edit of the playlist (D433) (bce7306)
  • an edit above the live cue no longer moves the show to another cue (D432) (f6a7202)
  • a held cue is not moved on by an audio event (D431) (bf56e9a)
  • an anchored show is placed in the run nearest now across midnight (D430) (c77ad3b)
  • a GL driver message repeated every frame is summarised once a minute (D422) (0a82f75)
  • a MIDI fader flood keeps its latest value and cannot crowd out a note (D421) (10f669c)
  • an audio stream that stops calling back without an error is noticed and reopened (D420) (c17c6e7)
  • say why the lexical callback lookup throws its exception away (D267, D414) (64f838f)
  • a code-paired desktop takes back its own lease from a dead connection (25e3999)
  • a Shadertoy re-import never replaces a folder that is not an import of the same shader (D418) (92d577b)
  • a desktop capture over the JPEG limit is sent smaller, not dropped (eb241d5)
  • a Shadertoy texture's file name never collides with a generated file or another URL (D417) (8e2bf60)
  • a Shadertoy export saved as UTF-16 with a byte-order mark imports (D416) (b39cb71)
  • a Shadertoy global initialised from iChannelTime or iChannelResolution sees its value (D415) (ef8028e)
  • a remote Ctrl+click leaves no Ctrl held in the host's UI (80d916b)
  • event callbacks declared with let or const fire, and a function may be passed itself (D414) ([de57140](de57140...
Read more

strobe v0.1.0

Choose a tag to compare

@github-actions github-actions released this 14 Oct 01:37

Added

  • audio: syn_Spectrum is 1024 texels wide, Synesthesia's width (D269) (3d54234)
  • diag: the input's real level in Diagnostics, so a dead microphone shows (AMD Task A2) (040e5eb)
  • intake: the watched drop folder is a setting, applied live and saved (D265, I-02) (47ce415)
  • tags: tag any library scene by name, and exclude tags in Generate (D264, U-08) (493ef2b)
  • editor: error columns on the user's line, and scene.json checked before a reload (D263, U-02) (67a1e36)
  • autocontrol: act on TORNADO T26's community-scene findings (D259) (084cc0c)
  • ui: the palette lists scenes and presets after exact commands (D262, U-01) (a0fc468)
  • remote: --remote-proxy lets the operator's own HTTPS proxy in, by name, from this computer (D258) (b88351f)
  • io: MIDI feedback to faders, LED rings and pad lights (D257) (5b85345)
  • brand: wordmark, lockups, one-colour mark, banner and social preview (D256) (182d57d)
  • io: Synesthesia's default and random on a control, a group or a bank (D247) (f92cf01)
  • app: wire the LAN remote into the frame loop, with a kill switch and pairing approval (b5a97d1)
  • app: rename a generated control in the review; Import offers to generate controls (D246) (353c17e)
  • remote: opt-in LAN listener with pairing, rotating tokens and the controller page (ba2fe2f)
  • bench: --readback checks textureFinalPass on any context, the window one included (D245) (5db662e)
  • ui: keyboard focus is a 2 px accent ring, at 3:1 on every surface (D243) (6f5f0dc)
  • app: --watch-folder adds scenes that settle in a folder to the library (D240) (fe9cf84)
  • bench: results.md says scripts are not run and marks scripted scenes (D239) (a5d6453)
  • playlist: audio-song ends a cue when the next track starts (D237) (0318199)
  • remote: version negotiation, bounded decode and golden v1 messages (D236) (8ae484a)
  • app: a dropped folder of scenes is added to the library, a scene a frame (D235) (f24681c)
  • io: Synesthesia's OSC addresses work where they mean the same (D234) (1203b04)
  • audio: confidence-aware downbeat estimate moves the playlist's bar lines (D233) (bcc736b)
  • remote: bounded app-thread bridge with a reply per command (D232) (e116d73)
  • playlist: saving over a hand-written playlist keeps its comments (D231) (70d0be4)
  • app: Ctrl-click selects several cues and the card's settings go to all of them (D230) (4cb857a)
  • app: a Shadertoy URL on the cue card is imported and added as the next cue (D229) (f89b826)
  • a key per macro drives it while held (D228) (c989f31)
  • a glide per macro eases what it drives, even a plain slider (D227) (223af7a)
  • hear breakdowns and drops and advance cues on them (D226) (b12c114)
  • gfx: a long image sequence shrinks as a whole to fit its memory instead of being cut (D225) (7dfc8b7)
  • app: drag a scene from the browser onto a cue, and enable disabled cues again (D224) (e49ccdb)
  • presets carry syn_Media on a third channel (D223) (f697da1)
  • take a scene's library picture from its live frame (D222) (fd86cff)
  • app: Comfortable or Compact density, and macro sliders no longer clipped (D220) (e79fe11)
  • keep, drop and re-range each generated control before opening the copy (D219) (d707cb7)
  • app: a dropped file goes where it belongs: scene, playlist, media or import (D218) (88ec638)
  • app: STROBE_FINISH_AFTER_SWAP, an opt-in wait for the output's swap (D216 experiment) (7a49cce)
  • choose syn_Media in the Inspector and per playlist cue (D217) (2b88ce0)
  • app: named layouts, saved in Settings and applied from Settings or the palette (D215) (13f5907)
  • rename a preset, and ask before replacing or deleting one (D214) (90f0cd3)
  • app: edit the selected cue in the LIST pane, and keep unsaved edits when the file changes (D213) (3b85570)
  • app: scene thumbnails in the browser from IMAGE_PATH, decoded off the UI thread (D212) (2ac383c)
  • app: favourite scenes, a star on each browser row and a filter (D211) (15716ad)
  • app: edit a macro's reach and colour, and pin a control from its name (D210) (e8f03aa)
  • io: OSC feedback out, changes only, from a thread of its own (D209) (508be54)
  • app: edit shortcuts in Settings, with clashes named and moved only on purpose (D208) (ebcda62)
  • meta settings carry across scenes, and Limit Colors in the post stage (D207) (afdfe0e)
  • scene tags from Synesthesia's TAGS, searched, edited and used by Generate (D205) (facf1ff)
  • app: Editor workspace with save, reload, backups and go-to-error (D204) (c20f99d)
  • app: reopen the last session's scene at launch (136b023)
  • app: STROBE_FAULT=crash@N for the crash drill on a packaged build (R-04) (3533e8b)
  • app: generate controls from the Inspector or palette in a worker process (D202) (0c57779)
  • app: blackout_on and blackout_off commands beside the toggle (D201) (b2433e2)
  • app: command palette on Ctrl+K over every command and pane (D200) (54a9b19)
  • app: log output window resizes, fullscreen state and occlusion (R-02) ([fbf2efa](https://gi...
Read more