尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证制作者的介绍仅有上面的一句话。 更多详情请阅读仓库 README。 仓库 README ↗
正在加载完整 README。
查看完整 README ↗A Halloween button cast in gelatin. A plump pill of pumpkin jelly with trick or treat suspended inside it and a gummy eyeball floating in each end. The eyes doze until your pointer comes near, then open and follow it. Jelly strings reach out and wrap your skeleton-gloved hand. Press and it squashes, the eyes go wide, and it bounces back taller before it wobbles to a stop.
Live → jelly-button.vercel.app · Demo video (MP4)
One HTML file, raw WebGL2, no dependencies, no build step.
Open index.html in a recent Chrome, Edge, Safari or Firefox, or serve the folder:
python3 tools/serve.py 3014 .
| Hover near it | the eyes open and follow you, the glow inside wakes, strings reach for the pointer |
| Hover over it | the skin swells toward your pointer and the highlight bends to follow you |
| Press | it dents under the finger and spreads; the eyes go wide with pinprick pupils |
| Release | it rebounds taller and narrower, rocks, and ripples ring out from where you let go |
1 – 4 or the chips | Pumpkin, Slime, Blood, Plum: the colours melt from one into the next |
D or the Dark chip | light studio or Halloween night (follows your system until you choose) |
T or the Tune chip | sliders for the jelly (wobble, glow, density…) and the strings (reach, snap, flow…) |
?flavor=slime&theme=dark | open straight into a flavour and theme |
It is a real <button>: keyboard focusable, and it fires jelly:activate.
JellyButton.element.addEventListener('jelly:activate', () => { /* … */ });
JellyButton.setFlavor('blood');
This is a fork of exteestudio's Venom Button (MIT). The top-down ray-marched scene, the string physics and the cursor icon that gets wrapped are theirs. Everything that makes it jelly and Halloween is new:
qa/contrast.py).Both rendered under identical conditions (same viewport and scale, same scripted pointer, qa/compare.mjs), scored 0–10:
| Venom | Jelly | |
|---|---|---|
| Material & realism | 9 | 7.5 |
| Motion & physics | 9 | 8.5 |
| Character & idea | 8.5 | 9 |
| Reads as a button (label contrast 14.2:1 vs ≥4.7:1) | 9.5 | 8 |
| Polish & restraint | 9.5 | 7.5 |
| Performance (uncapped, 2880×1800: ~310 vs ~250 fps idle, ~305 vs ~130 busy) | 9.5 | 7.5 |
| Robustness & access | 6.5 | 8.5 |
| Customisation | 7.5 | 9.5 |
| Overall | 8.6 | 8.3 |
Venom is one idea, polished over 25 rounds; the jelly trades some of that restraint and speed for character, flavours, themes and a working fallback. The biggest gap left is that the straight-down camera hides the jelly's sides, where real jelly shows the most.
Headless Chrome over the DevTools protocol, real time and real mouse input (qa/chrome.mjs):
node qa/look.mjs # idle, zoom, reach, hover, press, flavours, phone → qa/out/
node qa/eyes.mjs # eyes rest when the pointer is far, track when near
node qa/cursor.mjs # the pointer and its shadow: open floor, approaching, over the jelly, caught
node qa/ui.mjs # one cursor over the chips, the Tune card, hover swell and press dent
node qa/themes.mjs # both themes, every flavour, and the theme switch
node qa/strings.mjs # strings out, every flavour, both themes
node qa/legibility.mjs && python3 qa/contrast.py # label contrast, every flavour, both themes, two sizes
node qa/small.mjs # phone layout and reduced motion
CHROME_ARGS="--disable-3d-apis" node qa/nogl.mjs # the CSS fallback
CHROME_ARGS="--disable-gpu-vsync --disable-frame-rate-limit" node qa/perf.mjs # uncapped frame rate vs the original
CHROME_ARGS="--disable-gpu-vsync --disable-frame-rate-limit" node qa/demo.mjs # re-record media/demo.mp4
LICENSE). qa/ref/venom.html is an untouched copy, kept for the side-by-side tests.fonts/Geist-OFL.txt).left_ptr and hand2 from the Figma Community file "Cursors" (cursors/); the hand is redrawn inside as a skeleton glove.