Comfy Apps: 12-workflow image-gen web GUI + payment frontend

- Flask frontend + serialized GPU worker + BTCPay invoice/webhook
- 12 example images rendered from the real ComfyUI workflows
- fix: ipadapter workflow uses modern IPAdapter node (was broken IPAdapterApply)
- helper scripts: generate/optimize examples
- README with deploy recipe
This commit is contained in:
drjones
2026-08-27 20:37:11 -07:00
commit 55bea5757c
23 changed files with 800 additions and 0 deletions

50
templates/index.html Normal file
View File

@@ -0,0 +1,50 @@
<!doctype html>
<html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">
<title>Comfy Apps — AI Image Studio</title>
<link rel="stylesheet" href="/static/style.css"></head>
<body>
<div class="wrap">
<header>
<div class="logo">Comfy<span>Apps</span></div>
<div class="nav"><a href="#apps">Apps</a><a href="/jobs">Gallery</a></div>
</header>
<div class="hero">
<h1>Generate <b>anything</b>.<br>Pay in Bitcoin.</h1>
<p>12 AI image apps running on a local RTX 4080 — logos, heroes, face swaps, upscales, style transfers. Pay a few sats, get your image in under a minute. No account. No tracking.</p>
<div class="stats">
<div class="stat"><b>12</b><span>AI apps</span></div>
<div class="stat"><b>4080</b><span>local GPU</span></div>
<div class="stat"><b>₿</b><span>sats-only</span></div>
<div class="stat"><b>~60s</b><span>per render</span></div>
</div>
</div>
<div class="how" id="how">
<div class="step"><div class="n">1</div><h3>Pick an app</h3><p>Logo, hero, face swap, upscale — whatever you need.</p></div>
<div class="step"><div class="n">2</div><h3>Pay sats</h3><p>Bitcoin on-chain, no account. A few thousand sats.</p></div>
<div class="step"><div class="n">3</div><h3>Get your image</h3><p>The 4080 renders it in ~60s. Download and go.</p></div>
</div>
<div class="grid" id="apps">
{% set emoji = {'logo':'🎨','hero':'🎬','banner':'🖼️','article':'📰','portrait':'🧑','upscale':'🔍','inpaint':'🖌️','outpaint':'↔️','controlnet':'🦴','ipadapter':'🎭','face_swap':'👤','restore_face':'✨'} %}
{% for name, meta in apps.items() %}
<div class="card">
<div class="thumb">
<img src="/static/examples/{{ name }}.jpg" alt="{{ name }}" loading="lazy" onerror="this.style.display='none';this.nextElementSibling.style.display='flex'">
<div class="emoji" style="display:none">{{ emoji.get(name,'✨') }}</div>
</div>
<h3>{{ name.replace('_',' ').title() }}</h3>
<div class="desc">{{ meta.desc }}</div>
<div class="price">{{ meta.price_sats }} sats</div>
<div class="models">{% for m in meta.models %}<span class="badge">{{ m }}</span>{% endfor %}</div>
<a class="go" href="/app/{{ name }}">Create →</a>
</div>
{% endfor %}
</div>
<footer>
<p>Comfy Apps · self-hosted · Bitcoin only · no accounts, no tracking</p>
</footer>
</div>
</body></html>