Skip to content

Commit c489ae1

Browse files
committed
Add Astral Sigil demo seed, CI, and dependency fixes
1 parent 1e98856 commit c489ae1

8 files changed

Lines changed: 85 additions & 28 deletions

File tree

.github/workflows/ci.yml

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
name: CI
2+
3+
on:
4+
push:
5+
branches: [main]
6+
pull_request:
7+
8+
jobs:
9+
verify:
10+
runs-on: ubuntu-latest
11+
timeout-minutes: 15
12+
13+
steps:
14+
- name: Checkout
15+
uses: actions/checkout@v4
16+
17+
- name: Setup Node
18+
uses: actions/setup-node@v4
19+
with:
20+
node-version: 22
21+
cache: npm
22+
23+
- name: Install
24+
run: npm ci
25+
26+
- name: Check
27+
run: npm run check

LICENSE

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
MIT License
2+
3+
Copyright (c) 2026 Nicholas Dunzelman
4+
5+
Permission is hereby granted, free of charge, to any person obtaining a copy
6+
of this software and associated documentation files (the "Software"), to deal
7+
in the Software without restriction, including without limitation the rights
8+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9+
copies of the Software, and to permit persons to whom the Software is
10+
furnished to do so, subject to the following conditions:
11+
12+
The above copyright notice and this permission notice shall be included in all
13+
copies or substantial portions of the Software.
14+
15+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21+
SOFTWARE.

README.md

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
# PixelMelt
22

3+
![PixelMelt generated seed source](./docs/generated/pixelmelt-astral-sigil.png)
4+
35
![PixelMelt demo](./docs/pixelmelt-demo.png)
46

57
PixelMelt is a desktop-first, local-only web app that turns a single image into a live falling-material simulation. Upload an image, convert it into a low-resolution material field, then melt it, flood it, burn it, poke it, and export an 8-second WebM clip without leaving the browser.
@@ -15,7 +17,7 @@ Best results come from faces, masks, flowers, logos, and other bold silhouettes
1517
- Switch between three scene presets: `Melt`, `Flood`, and `Burn`.
1618
- Interact directly with the simulation using `Push`, `Spark`, and `Erase`.
1719
- Export an 8-second WebM clip from the live canvas.
18-
- Start instantly with three seeded demo images included in the repo.
20+
- Start instantly with four seeded demo images included in the repo, including the generated `Astral Sigil` mask.
1921
- Deploy the build output as a static site.
2022

2123
## Stack
@@ -51,7 +53,7 @@ npm run check
5153

5254
## First Run In 20 Seconds
5355

54-
1. Launch the app. `Molten Echo` loads automatically.
56+
1. Launch the app. `Astral Sigil` loads automatically.
5557
2. Click `Flood` or `Burn` to see how the same source rebuilds into a different scene.
5658
3. Drag on the stage with `Push`, then switch to `Spark` and click into the hot areas.
5759
4. Hit `Export 8s WebM` after you like the motion.
@@ -60,7 +62,7 @@ If the export controls are disabled, wait for the stage to finish loading and sh
6062

6163
## Demo Flow
6264

63-
1. Launch the app. `Molten Echo` loads automatically.
65+
1. Launch the app. `Astral Sigil` loads automatically.
6466
2. Click `Melt`, `Flood`, or `Burn` to rebuild the scene from the same source image.
6567
3. Drag on the stage with `Push` to shove loose material around.
6668
4. Switch to `Spark` and click into the scene to create ember bursts and smoke.
@@ -73,6 +75,7 @@ If the export controls are disabled, wait for the stage to finish loading and sh
7375
- High-contrast subjects read best at `168x168`.
7476
- Clear silhouettes usually produce the most dramatic melt and burn passes.
7577
- Transparent or simple backgrounds convert more cleanly than busy photos.
78+
- The included `Astral Sigil` source is a good stress test: sharp glass edges, black negative space, and hot stone details make the burn and melt presets visibly different.
7679
- Portraits, icons, flowers, masks, and graphic shapes are the sweet spot.
7780

7881
## How It Works
@@ -120,7 +123,7 @@ PixelMelt records directly from the display canvas using `canvas.captureStream()
120123
## Project Structure
121124

122125
```text
123-
public/demo/ Seeded SVG demo images
126+
public/demo/ Seeded SVG/PNG demo images
124127
docs/pixelmelt-demo.png README screenshot
125128
src/components/ React UI and canvas stage
126129
src/lib/ Worker bridge, rasterizer, recorder, helpers
@@ -155,4 +158,4 @@ Deploy the resulting `dist/` directory to any static host. No environment variab
155158

156159
## License
157160

158-
This repository currently has no explicit license file. Add one before public distribution if you want to define reuse terms.
161+
MIT
1.82 MB
Loading

package-lock.json

Lines changed: 21 additions & 21 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

public/demo/astral-sigil.png

1.82 MB
Loading

src/App.tsx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,12 @@ import { GRID_SIZE, SIMULATION_FPS, type DemoScene, type PresetId, type Simulati
99
import { usePixelMeltStore } from '@/store/use-pixelmelt-store'
1010

1111
const DEMOS: DemoScene[] = [
12+
{
13+
id: 'astral-sigil',
14+
name: 'Astral Sigil',
15+
description: 'Generated glass-and-stone mask tuned for sharp silhouettes, hot edges, and dramatic burn passes.',
16+
src: '/demo/astral-sigil.png',
17+
},
1218
{
1319
id: 'molten-echo',
1420
name: 'Molten Echo',

src/store/use-pixelmelt-store.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,8 @@ export const usePixelMeltStore = create<PixelMeltState>((set) => ({
3939
brushSize: 6,
4040
brushIntensity: 0.72,
4141
paused: false,
42-
sourceLabel: 'Molten Echo',
43-
selectedDemoId: 'molten-echo',
42+
sourceLabel: 'Astral Sigil',
43+
selectedDemoId: 'astral-sigil',
4444
sceneStatus: 'booting',
4545
lastError: null,
4646
recording: {

0 commit comments

Comments
 (0)