openjutsu
One-click character swap for videos: an open-source, local Higgsfield Genjutsu alternative built on ComfyUI and MiniMax H3, with FLUX.3 Klein relighting.
Sand on a singing plate, full screen: break the figure with a swipe, grab a piece and throw it, turn the frequency with the wheel, sing a note and the field answers.
MediaJavaScript · HTMLGitHub @blvgorOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Interactive Chladni pattern lab with modal tuning, live particles, optional audio and high-resolution PNG export.
Taken from the repository README
Loading the full README.
Read the full README ↗Sand on a singing plate, full screen. Sound gathers the sand into a Chladni figure, and you get to break it: swipe to scatter the lines, hold to drag a piece like rubber, flick to throw it. It bounces off the edges and finds its way home. Turn the frequency with the wheel, play figures on the keyboard like a piano, or sing a note into the microphone and the field follows. Save a frame as PNG or record a short video.
Open Resona · Download the source
| Gesture | Mouse | Touch |
|---|---|---|
| Break the lines | swipe quickly over the field | a quick stroke right after touching |
| Drag a piece | hold and move | touch, wait a moment, then move |
| Throw | hold and let go mid-motion | the same with a finger |
| Shock wave | double click | double tap |
| Turn the frequency | wheel, trackpad, or the slider under the frequency | two fingers up and down, or the slider |
Keys: A S D F G H J K L play nine figures with their notes, Space pauses (the frame freezes and can be saved), R scatters the sand, Esc closes the panel. Up to eight pieces can fly at once; a ninth lets go of the oldest.
The ribbon at the bottom holds all 48 figures plus Random. When the frequency slider comes to rest, it glides to the nearest resonance so the sand forms clean lines. Settings, behind the button in the top right, open a glass panel:
Sound stays off until you press Sound, and the choice is remembered. Sing a note asks for the microphone only when pressed. Settings live in this browser; there are no accounts, keys or external services.
The number of grains matches the device (200,000 on a computer, 80,000 on a phone). If the field drops below 40 frames per second for three seconds, it uses less sand and says so in the corner.
Node.js 20 or newer; nothing to install.
npm start
Open http://127.0.0.1:4178 in a browser with WebGL2 (a recent Chrome, Safari or Firefox). The server listens on this computer only. On macOS, double-click start.command to start the server and open the page.
Static ES modules, no bundler, no dependencies:
physics.js: Kirchhoff–Love plate, 48 presets, and modeSet, the modal coefficients sent to the GPU.sand.js: the law that moves the sand, one source for both JavaScript and GLSL. engine.js: WebGL2, grains in float textures, background glow, PNG snapshots.pieces.js: flight, bounce and return of thrown pieces. gestures.js: pointer input turned into intents (break, grab, throw, shock, tune).audio.js: all sound in Web Audio, no files. pitch.js and voice.js: the note from the microphone. recorder.js: video. thumbs.js: ribbon thumbnails.palettes.js and settings.js: palettes and saved settings. app.js: the shell that ties it together.The plate fills the screen. Its physics is that of a square plate stretched over the window, which keeps all 48 figures recognisable on any screen shape: on a rectangular plate the two modes of each figure would split apart in frequency.
A rectangular isotropic Kirchhoff–Love plate, simply supported on all four edges. Shape of a single mode:
phi_mn(x,y) = sin(m*pi*x/a) * sin(n*pi*y/b)
D = E*h^3 / (12*(1-nu^2))
f_mn = pi/2 * sqrt(D/(rho*h)) * ((m/a)^2 + (n/b)^2)
Each figure mixes the mode pair (m,n) and (n,m). Manual mode computes the response of 81 modes to a point force at (0.37a, 0.43b), keeps the 16 strongest, and projects them onto the phase of the dominant mode, so the sand settles on nodal lines rather than points. Modal response: F_mn / (omega_mn^2 - omega^2 + i*2*zeta*omega_mn*omega).
Grains move toward the minima of the vibration amplitude. Their transport, collisions, size, scatter and light are an artistic approximation. Free edges and arbitrary plate shapes are not modelled. This is not an engineering calculation; frequencies come from the model and have not been measured on a real plate.
Materials use typical reference values, not the datasheet of a specific alloy. PNG saves what is on screen: 1× and 2× at the window size, 4K with a 3840 px long side.
npm test
node scripts/build.mjs copies every module into public/ for Vercel.
MIT, see LICENSE.