| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
feat(boards): share boards by role and keep project settings per member (#9797) Co-authored-by: Alexander Eichhorn <alex@eichhorn.dev> Co-authored-by: Lincoln Stein <lincoln.stein@gmail.com> | 9 天前 | |
fix(working-memory): reserve VAE working memory per dtype and allocator (#9898) | 5 小时前 | |
feat(working-memory): measure working memory in admin calibration runs (#9897) | 13 小时前 | |
feat(working-memory): measure working memory in admin calibration runs (#9897) | 13 小时前 | |
fix(models): install and start on drives without hard links (#10007) * fix(models): install and start on drives without hard links Publish install claims, repaired thumbnails, gallery archives and database copies through one helper that never replaces an existing file. It hard-links where possible, else renames atomically without replacing, else creates exclusively and copies, so exFAT/FAT32 and network drives work. Before, model installs failed with HTTP 500 there and a leftover staging directory stopped the server from starting. * test(model-install): wait for the startup restore before staging test installs Two tests wrote a resumable staging marker while the installer's startup restore could still scan it; the restore then claimed or installed the directory first, failing them on slow runners. * fix(models): keep other writers' files and source permissions in the copy fallback A failed copy removes its destination only while it is still the copy it created, and the copy gets the source's permission bits. Publishing returns the published file's signature, so the thumbnail rollback also removes a copied thumbnail and keeps one rewritten in place. --------- Co-authored-by: Josh Corbett <joshwcorbett@icloud.com> | 3 天前 | |
Add support for T2I-Adapter in node workflows (#4612) * Bump diffusers to 0.21.2. * Add T2IAdapterInvocation boilerplate. * Add T2I-Adapter model to model-management. * (minor) Tidy prepare_control_image(...). * Add logic to run the T2I-Adapter models at the start of the DenoiseLatentsInvocation. * Add logic for applying T2I-Adapter weights and accumulating. * Add T2IAdapter to MODEL_CLASSES map. * yarn typegen * Add model probes for T2I-Adapter models. * Add all of the frontend boilerplate required to use T2I-Adapter in the nodes editor. * Add T2IAdapterModel.convert_if_required(...). * Fix errors in T2I-Adapter input image sizing logic. * Fix bug with handling of multiple T2I-Adapters. * black / flake8 * Fix typo * yarn build * Add num_channels param to prepare_control_image(...). * Link to upstream diffusers bugfix PR that currently requires a workaround. * feat: Add Color Map Preprocessor Needed for the color T2I Adapter * feat: Add Color Map Preprocessor to Linear UI * Revert "feat: Add Color Map Preprocessor" This reverts commit a1119a00bf4af74a3f5f4f57a872a6d06055f677. * Revert "feat: Add Color Map Preprocessor to Linear UI" This reverts commit bd8a9b82d888cb0c8a04e83170b1dce2a8ceaac1. * Fix T2I-Adapter field rendering in workflow editor. * yarn build, yarn typegen --------- Co-authored-by: blessedcoolant <54517381+blessedcoolant@users.noreply.github.com> Co-authored-by: psychedelicious <4822129+psychedelicious@users.noreply.github.com> | 3 年前 | |
feat(working-memory): measure working memory in admin calibration runs (#9897) | 13 小时前 | |
ci(tests): cut idle waits from the python suite and skip OS-independent tests on windows (#9859) | 12 天前 | |
ci(tests): run Windows tests on Blacksmith, ffmpeg tests on GitHub (#9951) * test: mark ffmpeg-dependent tests Register an `ffmpeg` marker for tests that run an ffmpeg binary or load libav, so a runner without them can deselect those tests and another can run only them. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * ci(tests): run windows tests on Blacksmith, ffmpeg tests on GitHub windows-cpu moves to a Blacksmith Server Core runner at one worker per vCPU and skips the ffmpeg tests, which cannot start there; windows-ffmpeg runs only those on windows-2022 at two workers. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> Co-authored-by: Josh Corbett <joshwcorbett@icloud.com> | 3 天前 | |
feat(api): expose intermediates summaries, previews and operations Add /api/v1/intermediates for summaries, previews, starting, polling and retrying cleanup operations, and forward operation progress to the caller's socket room and to admins. Regenerate the legacy web OpenAPI document and types. | 1 个月前 | |
fix(model-install): preserve install tmpdir when a single multi-file part fails (#9591) * fix(model-install): preserve install tmpdir when a single multi-file part fails * fix(model-install): emit recoverable paused state Preserve partial-download validators across resumed failures.\nEmit paused events for frontend recovery and cover restart and stale-UI cases. * fix(model-install): pause only on transient part errors and keep staged data Permanent part errors fail the install again; transient ones pause it when staged bytes exist on disk, and wait_for_job returns on a settled pause. Auto-install callers resume a paused install; both UIs refetch on pause, show the failed file's cause, and offer Resume unless a range was refused. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(model-install): guard paused resume callbacks and stale status Fence stale install statuses, align event docs, and bound callback waits with actionable timeout handling. * fix(model-install): pin resumed Hugging Face installs to their first commit Multi-file HF downloads use the commit seen at install start; resume, restart and restore reuse it, and a vanished commit errors the install and clears its staging. resume_job answers conflicts immediately again; auto-install callers use resume_and_wait_for_job, which retries once a pending download callback settles. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(model-install): discard unpinnable legacy staging and keep install status fresh Restored legacy installs whose commit can't be determined re-download from the current commit instead of mixing revisions. Retry after a vanished commit resubmits a fresh install; HF metadata keeps its pinned revision through JSON. The install queue no longer lets a stale list response overwrite a newer event status. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(model-install): pin single-file Hugging Face downloads and discard branch-pinned staging Staging is resumed only when its marker names a commit; single-file HF URLs pin to the commit at install start via a HEAD through the download queue. The install queue keeps a cancelled status over stale list responses and no longer drops rows settled after a list started. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(model-install): harden install resume and queue state Pin direct Hugging Face file downloads and discard unsafe unpinned staging. Reconcile cancel and prune results against authoritative job state with regression coverage. * test(models): cover install queue race regressions Add coverage for stale progress, cancellation, and prune responses. Clarify staging retention and correct the paused install event documentation. * fix(models): preserve install queue state during races Fence delayed cancel and progress events, and refresh after failed prune responses. Clarify retry staging behavior and require fresh unpinned resume coverage. --------- Co-authored-by: lorenzozanee <lorenzozanee@users.noreply.github.com> Co-authored-by: JPPhoto <jpollack@jpollackphoto.com> Co-authored-by: Jonathan <34005131+JPPhoto@users.noreply.github.com> Co-authored-by: Lincoln Stein <lincoln.stein@gmail.com> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> | 5 天前 | |
feat(boards): share boards by role and keep project settings per member (#9797) Co-authored-by: Alexander Eichhorn <alex@eichhorn.dev> Co-authored-by: Lincoln Stein <lincoln.stein@gmail.com> | 9 天前 | |
fix(queue): preserve called-workflow previews and metadata | 1 个月前 | |
fix(rocm): default MIOPEN_FIND_MODE=FAST at startup MIOpen's default find mode benchmarks every candidate kernel the first time a convolution shape runs. On the video VAEs (many layers x spatial tiles x temporal chunks, per dtype) that is minutes of warm-up per new shape set, and torch's MIOpen chooseAlgorithm falls back to a global emptyCache whenever a candidate's workspace allocation fails, convoying the peer GPU mid-step on multi-GPU installs (the residual stall identified in #159). FAST was the recommended mitigation but was never codified, so it only applied where the operator exported it by hand. Set it with setdefault at module level in run_app.py, next to TOKENIZERS_PARALLELISM: it lands before torch is imported, an explicit export still wins, and on non-ROCm builds the variable is inert. Tests cover both the default and the override; the AMD docs section describes it. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01S4B5exWsbC2z2Uu2tA167A | 1 个月前 | |
Merge commit from fork * fix(sockets): namespace client-named queue and bulk download rooms Subscription ids from clients now map to queue:<id> and bulk_download:<id>, so a payload can no longer join admin, user:<id>, or another socket's sid room. Fixes GHSA-7c9m-7f4q-9cr5. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * test(sockets): verify private event delivery isolation Cover hostile subscriptions and unsubscriptions with real Socket.IO recipient routing. Preserve sanitized queue delivery and single-user bulk downloads. --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> Co-authored-by: Josh Corbett <joshwcorbett@icloud.com> | 1 天前 | |
fix(api): tolerate client disconnects at the socket.io mount (#9400) * fix(api): tolerate client disconnects at the socket.io mount python-engineio's ASGI driver returns an empty environ from translate_request() when the first event it receives is a disconnect rather than http.request/websocket.connect, but handle_request() then indexes environ['REQUEST_METHOD'] unconditionally and raises KeyError. A client that drops mid-poll - a flaky network, a reloaded tab, a closed tab - therefore produces a spurious traceback for a request nobody is waiting on any more. Wrap the mounted socket.io app so the first event is peeked at and the app is skipped entirely on a disconnect, preventing the KeyError instead of catching it. On the normal path the event is replayed, and lifespan scopes bypass the wrapper, so nothing downstream can tell the difference. The disconnect path must still emit a response. This mount sits below BaseHTTPMiddleware subclasses, and call_next() turns "the app I wrapped sent nothing" into RuntimeError("No response returned."), which would only trade one traceback for another. It sends an empty 499 instead; uvicorn discards writes to an already-closed transport. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * ruff --------- Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> Co-authored-by: dunkeroni <dunkeroni@gmail.com> | 2 个月前 | |
feat: support deployment behind a reverse proxy under a sub-path (#9306) * feat: support deployment behind a reverse proxy under a sub-path The web frontend derived all URLs from window.location.origin and hardcoded paths (/api, /ws/socket.io, /locales, /openapi.json), so running Invoke behind a reverse proxy under a sub-path (e.g. https://host/invoke/) broke because the prefix was lost. Frontend: add a shared helper (common/util/baseUrl.ts) that auto-detects the deployment prefix from the entry bundle URL (import.meta.url), relying on Vite's existing `base: './'`. getBaseUrl(), the socket.io path, i18n loadPath, the openapi fetch and the React Router basename now all use it. At the domain root the prefix is empty, so behavior is byte-identical to before. Covered by unit tests. Backend: add an opt-in `base_url` setting (plus `forwarded_allow_ips`). When set, the app is wrapped in SubPathASGIMiddleware which strips the prefix from the request path and advertises root_path, handling both proxy styles (preserve and strip). uvicorn's root_path is intentionally not used, as it prepends the prefix and breaks the preserve case. Default (unset) leaves existing installs unchanged. Tested end-to-end with Docker + Caddy for preserve, strip, and zero-config strip. * Chore Typegen + openapi * chore(docs): regenerate settings.json for base_url and forwarded_allow_ips * fix(proxy): handle sub-path deployment edge cases from review Address blockers from PR review for reverse-proxy sub-path support: - Auth flows: LoginPage/AdministratorSetup navigated to hardcoded '/app' and '/login', bypassing the router basename and breaking multiuser installs under a sub-path. Prefix with getBasePath(). - SubPathASGIMiddleware: invert the rewrite — prepend the prefix for strip-style requests instead of stripping it for preserve-style ones, so scope["path"] holds the full public path (ASGI-compliant) and Starlette keeps the prefix on server-generated redirects (trailing- slash 307s, ?__theme=dark). RedirectRootWithQueryStringMiddleware is now root_path-aware. - Config: reject base_url whose first segment collides with a real route prefix (api, ws, static, docs, redoc, openapi.json, locales, assets) instead of silently bricking the server. - baseUrl: fall back to the app origin when the bundle is served from a foreign (CDN) origin; use lastIndexOf('/assets/') for robustness. - run_app: move typing import to top, drop redundant proxy_headers=True. - Add backend tests for the middleware (both proxy styles) and the base_url validator; extend baseUrl frontend tests. * fix(proxy): make socket.io work behind a reverse-proxy sub-path engine.io is not root_path-aware and matches the raw scope["path"] against its configured socketio_path. Once base_url sets root_path, Starlette hands the mounted app the full public path (/invoke/ws/socket.io), so every handshake 404'd and the UI lost all real-time updates behind the proxy. Fold base_url into socketio_path. --------- Co-authored-by: Lincoln Stein <lincoln.stein@gmail.com> Co-authored-by: Claude Fable 5 <noreply@anthropic.com> | 3 个月前 | |
fix(api): log socket disconnects at the same level as connects (#9438) * fix(api): log socket disconnects at the same level as connects Socket connects for authenticated clients were logged at INFO while disconnects were logged at DEBUG. With only half the lifecycle visible, a client that reconnects in a loop — a backgrounded browser tab whose timers have been throttled, a flaky network — is indistinguishable in the log from sockets accumulating without bound. Log the disconnect at the same level as the matching connect, and include python-socketio's disconnect reason (`ping timeout`, `transport close`, ...), which is the first thing worth knowing when sockets are churning. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * test(api): exercise socket disconnect dispatch --------- Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> Co-authored-by: JPPhoto <jpollack@jpollackphoto.com> | 2 个月前 |
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 9 天前 | ||
| 5 小时前 | ||
| 13 小时前 | ||
| 13 小时前 | ||
| 3 天前 | ||
| 3 年前 | ||
| 13 小时前 | ||
| 12 天前 | ||
| 3 天前 | ||
| 1 个月前 | ||
| 5 天前 | ||
| 9 天前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 天前 | ||
| 2 个月前 | ||
| 3 个月前 | ||
| 2 个月前 |