Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 0 additions & 5 deletions .github/FUNDING.yml

This file was deleted.

29 changes: 5 additions & 24 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
# PixelMelt

![PixelMelt generated seed source](./docs/generated/pixelmelt-astral-sigil.png)

![PixelMelt demo](./docs/pixelmelt-demo.png)

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.
Expand All @@ -20,17 +18,6 @@ Best results come from faces, masks, flowers, logos, and other bold silhouettes
- Start instantly with four seeded demo images included in the repo, including the generated `Astral Sigil` mask.
- Deploy the build output as a static site.

If PixelMelt saves you time, the smallest paid support path is the $5 Codex run receipt: <https://nicdunz.gumroad.com/l/smrimu>.

For self-serve browser/account/public-action control templates around export proof, approval lanes, handoffs, and go/no-go checks, use Agent Browser Operator OS: <https://nicdunz.gumroad.com/l/agent-browser-operator-os>.

For browser-visual export prototypes that need a written review, there are also optional no-call audit paths:

- Mini audit: <https://nicdunz.gumroad.com/l/agent-workflow-mini-audit>
- Full workflow audit: <https://nicdunz.gumroad.com/l/agent-workflow-audit>

Redacted source images, public static demos, export proof, and workflow notes only. Do not send private brand files, unreleased client assets, API keys, runtime AI credentials, or confidential product data. No custom asset generation or call is required. The browser operator kit is self-serve material only; it does not include Chrome plugin repair, guaranteed automation, account access, custom setup, calls, or posting without human approval.

## Stack

- Vite
Expand Down Expand Up @@ -62,15 +49,6 @@ npm run preview
npm run check
```

## First Run In 20 Seconds

1. Launch the app. `Astral Sigil` loads automatically.
2. Click `Flood` or `Burn` to see how the same source rebuilds into a different scene.
3. Drag on the stage with `Push`, then switch to `Spark` and click into the hot areas.
4. Hit `Export 8s WebM` after you like the motion.

If the export controls are disabled, wait for the stage to finish loading and show the first live frame.

## Demo Flow

1. Launch the app. `Astral Sigil` loads automatically.
Expand Down Expand Up @@ -145,12 +123,11 @@ src/workers/ Simulation worker entrypoint

## Validation

The current repo has been validated with:
Checks available in this repository:

- `npm run lint`
- `npm test`
- `npm run build`
- local browser automation covering preset changes, tool interactions, upload, and WebM export

## Static Deployment

Expand All @@ -170,3 +147,7 @@ Deploy the resulting `dist/` directory to any static host. No environment variab
## License

MIT

## Project status

AI-assisted personal project. Bundled examples and tests demonstrate a limited scope; they are not evidence of production use or independent validation.
18 changes: 0 additions & 18 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

18 changes: 0 additions & 18 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,24 +2,6 @@
"name": "pixelmelt",
"private": true,
"version": "0.1.2",
"funding": [
{
"type": "custom",
"url": "https://nicdunz.gumroad.com/l/smrimu"
},
{
"type": "custom",
"url": "https://nicdunz.gumroad.com/l/agent-browser-operator-os"
},
{
"type": "custom",
"url": "https://nicdunz.gumroad.com/l/agent-workflow-mini-audit"
},
{
"type": "custom",
"url": "https://nicdunz.gumroad.com/l/agent-workflow-audit"
}
],
"type": "module",
"scripts": {
"dev": "vite",
Expand Down
49 changes: 0 additions & 49 deletions src/components/CanvasStage.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -35,10 +35,6 @@ interface CursorState {
diameter: number
}

const SUPPORT_RECEIPT_URL = 'https://nicdunz.gumroad.com/l/smrimu'
const BROWSER_OPERATOR_OS_URL = 'https://nicdunz.gumroad.com/l/agent-browser-operator-os'
const MINI_AUDIT_URL = 'https://nicdunz.gumroad.com/l/agent-workflow-mini-audit'
const WORKFLOW_AUDIT_URL = 'https://nicdunz.gumroad.com/l/agent-workflow-audit'

function formatCompactCount(value: number): string {
return new Intl.NumberFormat('en-US', { notation: 'compact', maximumFractionDigits: 1 }).format(value)
Expand Down Expand Up @@ -72,7 +68,6 @@ export const CanvasStage = forwardRef<CanvasStageHandle, CanvasStageProps>(funct
const lastGridPointRef = useRef<{ x: number; y: number } | null>(null)
const [hudPayload, setHudPayload] = useState<FramePayload | null>(null)
const [cursor, setCursor] = useState<CursorState>({ visible: false, x: 0, y: 0, diameter: 12 })
const [hasExportedClip, setHasExportedClip] = useState(false)
const recording = usePixelMeltStore((state) => state.recording)
const setRecording = usePixelMeltStore((state) => state.setRecording)

Expand Down Expand Up @@ -251,7 +246,6 @@ export const CanvasStage = forwardRef<CanvasStageHandle, CanvasStageProps>(funct
const timestamp = new Date().toISOString().replaceAll(':', '-')
const sourceSlug = slugifyFilenamePart(sourceLabel)
downloadBlob(blob, `pixelmelt-${sourceSlug}-${activePreset}-${timestamp}.webm`)
setHasExportedClip(true)

usePixelMeltStore.getState().setRecording({
status: 'done',
Expand Down Expand Up @@ -308,49 +302,6 @@ export const CanvasStage = forwardRef<CanvasStageHandle, CanvasStageProps>(funct
>
Export 8s WebM
</button>
{hasExportedClip && (
<div className="max-w-[24rem] rounded-2xl border border-[var(--pm-warm)]/35 bg-[rgba(255,148,71,0.08)] px-3 py-2 text-right">
<div className="text-sm font-semibold text-white">Optional export audit</div>
<p className="mt-1 text-xs leading-5 text-[var(--pm-text-muted)]">
Redacted static demos only. No private brand files, API keys, runtime AI credentials,
Chrome plugin repair, guaranteed automation, account access, custom setup, calls, or public posting.
</p>
<div className="mt-2 flex flex-wrap justify-end gap-2">
<a
href={SUPPORT_RECEIPT_URL}
target="_blank"
rel="noreferrer"
className="rounded-full border border-white/10 px-3 py-1 text-xs font-semibold text-white/85 transition hover:border-white/30 hover:text-white"
>
$5 receipt
</a>
<a
href={BROWSER_OPERATOR_OS_URL}
target="_blank"
rel="noreferrer"
className="rounded-full border border-[var(--pm-accent)]/35 bg-[rgba(109,226,196,0.1)] px-3 py-1 text-xs font-semibold text-white transition hover:bg-[rgba(109,226,196,0.18)]"
>
Operator OS $39
</a>
<a
href={MINI_AUDIT_URL}
target="_blank"
rel="noreferrer"
className="rounded-full border border-[var(--pm-warm)]/45 bg-[rgba(255,148,71,0.12)] px-3 py-1 text-xs font-semibold text-white transition hover:bg-[rgba(255,148,71,0.2)]"
>
Mini audit $149
</a>
<a
href={WORKFLOW_AUDIT_URL}
target="_blank"
rel="noreferrer"
className="rounded-full border border-[var(--pm-accent)]/35 bg-[rgba(109,226,196,0.1)] px-3 py-1 text-xs font-semibold text-white transition hover:bg-[rgba(109,226,196,0.18)]"
>
Workflow audit $750
</a>
</div>
</div>
)}
</div>
</div>

Expand Down
Loading