This project is now a standalone Go installer. The release artifact is a single binary per OS:
dist/dasiwa-installer-windows-amd64.exedist/dasiwa-installer-linux-amd64
Users should not need Python scripts, shell scripts, PowerShell scripts, or a cloned repository next to the executable.
- Standalone binary UX. The web UI, default config, default node list,
placeholder assets, README, and license are embedded with Go
embed. - Zero system pollution. Runtime tools are installed under
.dasiwa/. ComfyUI packages live insideComfyUI/venv/. Package operations go throughuv, never directpip. - Ask once, run unattended. The web UI collects choices up front and writes
a temporary
.dasiwa-app-plan.json. After start, the install flow should not prompt interactively. - Config files are not mutated at runtime.
config.jsonis the embedded default. The app's Extra Settings modal sends in-memory JSON overrides.
bundle.goembedsconfig.json, docs, and assets.cmd/installer-app/main.goserves the local browser UI and starts installs.cmd/build-release/main.gobuilds release binaries.internal/uistatic/static/contains the embedded HTML/CSS/JS UI.internal/native/install/orchestrates the native Go install flow.internal/native/*implements ComfyUI sync, downloads, nodes, Torch, FFmpeg, SageAttention, RadialAttention, launchers, and build helpers.internal/bootstrap/downloads localuvand ensures the managed Python runtime under.dasiwa/.internal/appconfig/loads embedded defaults and merges in-memory app overrides fromconfig_overrides.
- UI layout or behavior:
internal/uistatic/static/ - Release binary behavior:
cmd/installer-app/main.go - Build outputs:
cmd/build-release/main.go - Install step ordering:
internal/native/install/install.go - Config defaults, custom node defaults, or optional downloads:
config.json - Torch selection:
internal/native/torch/ - CUDA host compiler handling:
internal/native/cudahost/ - SageAttention:
internal/native/sage/ - RadialAttention:
internal/native/radial/ - FFmpeg:
internal/native/ffmpeg/ - Launchers:
internal/native/launcher/
- Do not reintroduce
.py,.sh, or.ps1installer scripts. - Do not add a Python-engine fallback or repo-sync path that requires source files beside the binary.
- Do not call
piporpip3directly. Useuv pip ... --python <venv python>. - Do not write to
config.jsonat runtime. - Do not remove wipe confirmation logic.
- Do not use
shell=Trueequivalents for Git or subprocess calls; pass argv lists toexec.Command. - Preserve
GIT_TERMINAL_PROMPT=0for Git operations.
Use writable Go caches in sandboxed environments:
env GOCACHE=/tmp/dasiwa-go-cache GOMODCACHE=/tmp/dasiwa-go-modcache go test ./...
env GOCACHE=/tmp/dasiwa-go-cache GOMODCACHE=/tmp/dasiwa-go-modcache go build -o /tmp/dasiwa-installer-smoke ./cmd/installer-app
env GOCACHE=/tmp/dasiwa-go-cache GOMODCACHE=/tmp/dasiwa-go-modcache go run ./cmd/build-release --version smoke --current --out /tmp/dasiwa-release-smoke --check-cuda-migration=For standalone smoke testing, run the built binary with an empty --root and
confirm /api/config returns embedded defaults.