Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
86755aa
initial commit
imprsnst Jul 11, 2026
e1f49cb
graph engine, apis, device & memory policy
imprsnst Jul 12, 2026
66e1d6b
updated readme
imprsnst Jul 12, 2026
bce309b
add xfuser worker-group seam for single-image multi-GPU denoise
imprsnst Jul 13, 2026
02ef654
added support for inline core generation engine
imprsnst Jul 13, 2026
0855734
added webui.sh
imprsnst Jul 13, 2026
98b1504
updated readme
imprsnst Jul 13, 2026
967139b
shared package & node updates
imprsnst Jul 13, 2026
f25c3e6
add Z-Image Turbo runner (text-to-image + img2img) with best-effort r…
Jul 15, 2026
f8c6a2f
auto-fit core node height/width to content so all params are visible
imprsnst Jul 15, 2026
0affa8d
feat: port the Inline Studio backend to Python + single-port serving
imprsnst Jul 15, 2026
4eabffd
feat: web-only migration — retire Electron + Node backend, serve UI f…
imprsnst Jul 15, 2026
2128c21
Add 'core/' from commit '0affa8d697802e79f77e669f9186bc9feb480d95'
imprsnst Jul 15, 2026
f6bf4df
update CLAUDE.md + READMEs for the web-only, one-repo (Core under cor…
imprsnst Jul 15, 2026
9879161
merged with main(resolved conflicts)
imprsnst Jul 15, 2026
b4acca1
updated todos
imprsnst Jul 15, 2026
761585d
explicit model downloads, prebuilt-UI packaging, and one-command webu…
imprsnst Jul 16, 2026
3ac4ab6
publish package definition
imprsnst Jul 16, 2026
c9cc55e
fix: include built SPA via hatch artifacts (avoid duplicate index.html)
imprsnst Jul 16, 2026
2fbc698
bumped version to 1.1.1
imprsnst Jul 16, 2026
fc329f2
core memory management, core node resurfaced, improved canvas ui
imprsnst Jul 16, 2026
d608c5b
stream Z-Image weights to GPU and auto-fit memory to the device
imprsnst Jul 16, 2026
9c0b4e9
make 1024² Z-Image generation fit 16GB vram card without OOM-killing …
imprsnst Jul 16, 2026
7c6a69a
param update fix & show generated output in ZiT node
imprsnst Jul 17, 2026
cc3ad62
updated readme, enabled support for sampler & schedular
imprsnst Jul 17, 2026
0eea429
honor interrupts during model load; clarify 1024² CFG OOM (guidance>0…
imprsnst Jul 17, 2026
f32681c
honor interrupts during model load; clarify 1024² CFG OOM (guidance>0…
imprsnst Jul 17, 2026
5f0c99b
updated readme
imprsnst Jul 17, 2026
e989900
bumped version to 1.1.2
imprsnst Jul 17, 2026
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
33 changes: 25 additions & 8 deletions .env.example
Original file line number Diff line number Diff line change
@@ -1,8 +1,25 @@
# ComfyUI backend the user points Storyline at. Falls back to this if no in-app
# setting is configured. See electron/main/comfy/ for how it is consumed.
COMFYUI_URL=http://127.0.0.1:8188

# fal.ai API key for the closed-model generation engine (openai/gpt-image-2, LTX, ...).
# Bring your own key from https://fal.ai/dashboard/keys. Overridden by the in-app setting
# (stored encrypted). See electron/main/fal/ for how it is consumed.
FAL_KEY=
# Inline Studio is configured through INLINE_* environment variables read by Inline Core (the engine
# in core/). You usually don't need a .env — the friendly `core/webui.sh` flags set these for you
# (see `./webui.sh --help` or the README's Command-line options). This file just documents them.

# --- Server bind ---
# INLINE_HOST=127.0.0.1 # 0.0.0.0 to allow other machines on the network (webui.sh --listen)
# INLINE_PORT=8848

# --- Paths ---
# INLINE_MODELS_DIR=./models # where model weights are scanned from (drop files here)
# INLINE_DATA_DIR=./.inline # runs + generated takes
# INLINE_FRONTEND_ROOT=../dist-web # serve a local SPA build instead of the installed UI package (dev)

# --- Device / memory ---
# INLINE_PROFILE= # gpu-max | lowvram | cpu (default: auto-detected)
# INLINE_VRAM_BUDGET_GB= # treat the GPU as having this many GB of usable VRAM
# INLINE_PARALLEL= # multi-GPU split, e.g. pipefusion=2 (auto with 2+ GPUs)

# --- Z-Image model overrides (optional; the model popup / dropping files under models/ is preferred) ---
# INLINE_ZIMAGE_MODEL= # a diffusion .safetensors file or a diffusers dir
# INLINE_ZIMAGE_VAE= # a local VAE file or dir
# INLINE_ZIMAGE_TEXT_ENCODER= # a local HF-format text-encoder dir

# The fal.ai API key for hosted models is NOT set here — add it in the app's Settings (stored
# server-side under Core's data dir), so it never lives in your shell environment or a checked-in file.
59 changes: 59 additions & 0 deletions .github/workflows/publish-core.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
# Publish the Inline Core engine (inline-core) to PyPI, so `pip install -r requirements.txt`
# pulls the engine + runtime with no source checkout. The prebuilt web UI is published separately by
# publish-frontend.yml — kept in its own file so each package's PyPI *pending* trusted publisher has a
# distinct GitHub config (owner + repo + workflow filename + environment), which PyPI requires.
#
# Trigger: push a tag like `v1.1.1`, publish a GitHub Release, or run manually (workflow_dispatch with
# an explicit version). The version is derived from the tag and stamped into core/pyproject.toml.
#
# Auth: PyPI Trusted Publishing (OIDC) — add a pending publisher on PyPI for project
# `inline-core`, repo, workflow `publish-core.yml`, environment blank. No secrets to store. To
# use an API token instead, drop `permissions.id-token` and pass
# `password: ${{ secrets.PYPI_API_TOKEN }}` to the publish step.
name: Publish engine to PyPI

on:
push:
tags: ['v*']
release:
types: [published]
workflow_dispatch:
inputs:
version:
description: 'Version to publish (e.g. 1.1.1). Defaults to the tag.'
required: false

jobs:
engine:
name: Publish inline-core
runs-on: ubuntu-latest
permissions:
id-token: write # PyPI Trusted Publishing (OIDC)
steps:
- uses: actions/checkout@v4

- name: Resolve version
id: ver
run: |
VERSION="${{ github.event.inputs.version }}"
if [ -z "$VERSION" ]; then VERSION="${GITHUB_REF_NAME#v}"; fi
echo "version=$VERSION" >> "$GITHUB_OUTPUT"
echo "Publishing version $VERSION"

- name: Stamp the package version
run: |
sed -i "s/^version = .*/version = \"${{ steps.ver.outputs.version }}\"/" core/pyproject.toml

- uses: actions/setup-python@v5
with:
python-version: '3.11'

- name: Build the wheel
run: |
python -m pip install --upgrade build
python -m build core --outdir dist

- name: Publish to PyPI
uses: pypa/gh-action-pypi-publish@release/v1
with:
packages-dir: dist
80 changes: 80 additions & 0 deletions .github/workflows/publish-frontend.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
# Build the SPA and publish the prebuilt-frontend wheel (inline-studio-frontend) to PyPI, so end
# users get the UI with no Node build — mirroring ComfyUI's comfyui-frontend-package. The engine
# (inline-core) is published by its own workflow, publish-core.yml. They are split into two
# files on purpose: PyPI requires each *pending* trusted publisher to have a unique GitHub config
# (owner + repo + workflow filename + environment), so two packages can't share one workflow file
# until both projects exist. See packages/frontend/README.md for the manual equivalent.
#
# Trigger: push a tag like `v1.1.1`, publish a GitHub Release, or run manually (workflow_dispatch with
# an explicit version). The version is derived from the tag (`v1.1.1` -> `1.1.1`) and stamped into the
# wheel so it version-tracks the release.
#
# Auth: PyPI Trusted Publishing (OIDC) — add a pending publisher on PyPI for project
# `inline-studio-frontend`, repo, workflow `publish-frontend.yml`, environment blank. No secrets to
# store. To use an API token instead, drop `permissions.id-token` and pass
# `password: ${{ secrets.PYPI_API_TOKEN }}` to the publish step.
name: Publish frontend to PyPI

on:
push:
tags: ['v*']
release:
types: [published]
workflow_dispatch:
inputs:
version:
description: 'Version to publish (e.g. 1.1.1). Defaults to the tag.'
required: false

jobs:
frontend:
name: Build SPA + publish inline-studio-frontend
runs-on: ubuntu-latest
permissions:
id-token: write # PyPI Trusted Publishing (OIDC)
steps:
- uses: actions/checkout@v4

- name: Resolve version
id: ver
run: |
VERSION="${{ github.event.inputs.version }}"
if [ -z "$VERSION" ]; then VERSION="${GITHUB_REF_NAME#v}"; fi
echo "version=$VERSION" >> "$GITHUB_OUTPUT"
echo "Publishing version $VERSION"

- uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'

- name: Build the SPA
run: |
npm ci
npm run build:spa # -> dist-web/

- name: Stage the build into the wheel payload
run: |
rm -rf packages/frontend/inline_studio_frontend/static
mkdir -p packages/frontend/inline_studio_frontend/static
cp -r dist-web/* packages/frontend/inline_studio_frontend/static/
test -f packages/frontend/inline_studio_frontend/static/index.html

- name: Stamp the package version
run: |
sed -i "s/^version = .*/version = \"${{ steps.ver.outputs.version }}\"/" \
packages/frontend/pyproject.toml

- uses: actions/setup-python@v5
with:
python-version: '3.11'

- name: Build the wheel
run: |
python -m pip install --upgrade build
python -m build packages/frontend --outdir dist

- name: Publish to PyPI
uses: pypa/gh-action-pypi-publish@release/v1
with:
packages-dir: dist
65 changes: 0 additions & 65 deletions .github/workflows/release.yml

This file was deleted.

4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
node_modules
out
dist
dist-web
# The built SPA copied into the PyPI frontend package at publish time (keep the .gitkeep).
packages/frontend/inline_studio_frontend/static/*
!packages/frontend/inline_studio_frontend/static/.gitkeep
*.log
.DS_Store
.env
Expand Down
Loading
Loading