Skip to content

Release/v0.4.1#226

Merged
lightningpixel merged 37 commits into
mainfrom
release/v0.4.1
Jul 16, 2026
Merged

Release/v0.4.1#226
lightningpixel merged 37 commits into
mainfrom
release/v0.4.1

Conversation

@lightningpixel

Copy link
Copy Markdown
Owner

No description provided.

Lorchie and others added 30 commits June 16, 2026 09:32
Community guide for running Modly's image-to-3D generation headless on an
NVIDIA Jetson AGX Orin (JetPack 6). Covers the standalone FastAPI backend,
the Jetson-native PyTorch swap, the numpy<2 pin, and the rembg/ONNX Runtime
bypass, with a troubleshooting table and upstream-fix notes.
Import button now shows upload icon (arrow pointing up/out of box)
Export button now shows download icon (arrow pointing down/into box)
Fixed swapped icons on Import/Export buttons in GeneratePage.tsx
…-hook

chore: add ESLint config + portable test runner + pre-push hook
feat(workflows): support audio process outputs
docs: add headless Jetson (AGX Orin) deployment guide
feat Accessibility fond size very small, small, medium, large
Fix/text input node output to expand to model nodes
…allback

fix: workflow image data fallback
… in model registry

- Swallow stdout/stderr stream errors and EPIPE in the main process and logger
  so a closed launching terminal can't crash the app via an unhandled error.
- Skip process-type extensions in the Python model registry (they run through
  Electron's process runner, not the FastAPI generator registry).
Adds a For Each source node that walks a folder alphabetically and emits one
file per loop pass, re-running the downstream nodes for each item. Supports
image, text and mesh modes with Pause / Continue / Retry controls, and runs
several iterators in lockstep when they share a downstream body.

- ForEachNode UI + palette entry, container-type detection generalized
- runner: iterator resolution, loop table, per-file execution
- fs.listFiles / fs.selectTextFile IPC helpers for folder listing
- preflight labels and output typing for the new node
… param

Generic node/extension-system additions:
- Multi-text-input routing: a node's text inputs are delivered per target
  handle (input-0, input-1, …) as ProcessInput.texts, so e.g. positive and
  negative prompts no longer overwrite each other.
- input_labels in a node manifest: label each input handle (e.g.
  positive / negative) instead of showing the raw type.
- New 'file-select' param type: a dropdown of the files inside a folder held
  by another (string) param, via dir_from + extensions. Uses fs.listFiles.
- Folders with colors and bookmarks in the Open popup, persisted locally
- Open workflows shown as browser-style tabs (drag reorder, Ctrl+T/W/Tab)
- Open popup redesigned as a card grid with SVG mini previews of each graph
- Folder color rendered as an ambient halo on cards and a dot on tabs
  (the dot pulses while the workflow is running)
- Sync the title bar maximize/restore icon with the real window state
- nodrag on node input fields so text selection no longer moves the node
feat(workflows): add For Each iterator nodes (image / text / mesh)
…d-file-select

feat(extensions): per-slot text inputs, input labels, and file-select…
lightningpixel and others added 7 commits July 15, 2026 14:01
…-ext-skip

Fix/log epipe and process ext skip
feat: workflow browser with folders, tabs, and card grid
…pip cache

- Atomic install: copy to a unique .modly-staging-<id>-<ts>, swap into place
  with retried renames, then run setup.py in the FINAL folder under a
  .modly-incomplete marker (venvs record absolute paths, so the folder must
  not move after setup). A failed setup restores the previous version.
- Startup reconciler: purges stale staging dirs, restores the backup when an
  extension folder is missing or still marked incomplete, discards it otherwise.
- Shared fsWithRetry/rmWithRetry/renameWithRetry (EBUSY/EPERM/EACCES filter,
  progressive backoff) replace the silent rm calls; model:delete unified on it.
- extensions:list flags broken folders as corrupted with manifestError
  (missing / invalid / incomplete); in-flight installs are hidden, dot-dirs
  skipped. Python registry also skips dot-dirs and marked folders.
- ExtensionDrawer: per-cause 'Corrupted installation' banner with a Delete
  broken folder action; Repair hidden when it cannot help. ModelsPage surfaces
  uninstall failures instead of silently closing the dialog.
- extensions:uninstall accepts arbitrary broken folder names (root-confined via
  resolvePathWithinRoot, which now also rejects '' and '.'), always returns
  {success,error} instead of rejecting the invoke.
- pip wheel cache (#223): PIP_CACHE_DIR points at dependencies/pip-cache and
  the setup launcher strips --no-cache-dir from pip commands, so a retried
  install reuses multi-GB torch wheels instead of re-downloading them.
…dening

fix: harden extension installs — crash recovery, corrupted-state UX, pip cache
@lightningpixel
lightningpixel merged commit 6a47492 into main Jul 16, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants