Repository navigation
feat(external): add UberLLM image provider - #10251
Open
PSA-Team-source wants to merge 1 commit into
Open
PSA-Team-source wants to merge 1 commit into
PSA-Team-source wants to merge 1 commit into
Conversation
Adds UberLLM as an external provider with an image generation node, API key/base URL settings and eight txt2img starter models. Requests go to the synchronous /v1/images/generations route with b64_json output, and each model declares the five pixel sizes UberLLM accepts, so the service snaps every request to one of them.
Pfannkuchensack
self-requested a review
November 12, 2026 21:22
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Adds UberLLM as an external image provider, so one API key reaches image models from several makers in Invoke: Z-Image Turbo, FLUX.2 Klein 4B, FLUX.2 Pro, Qwen Image 3, Seedream 4.5, Krea 2 Turbo, Ideogram V4 and Nano Banana 2.
UberLLMProvidercallsPOST /v1/images/generationswithresponse_format: "b64_json". UberLLM answers image requests synchronously, so there is no submit/poll/download step. Its errors ({"error": {"message"}}) are surfaced as-is; 429 becomes a rate-limit error withRetry-After.external_uberllm_api_key/external_uberllm_base_urlsettings, provider registration,uberllm_image_generationnode, and the node mapping in both frontends plus a key card.sizevalues (1024x1024, 1024x768, 768x1024, 1536x1024, 1024x1536), so each starter declares them asaspect_ratio_sizesandExternalGenerationServicesnaps any request to one of them (e.g. a 1368x768 preset goes out as 1536x1024). This is also why the existing OpenAI provider with a base URL override is not a good fit: it sends the raw width/height and only ships OpenAI starter models.openapi.json/schema.tsanddocs/src/generated/settings.json; added UberLLM to the API Keys provider list in the models guide.Mirrors #9476 (Atlas Cloud), including the follow-ups there: node types registered in both frontends, and a test that goes through
ExternalGenerationService.Related Issues / Discussions
None.
QA Instructions
uv run --no-sync pytest tests/app/services/external_generation/test_uberllm_provider.py— 16 passed.uv run --no-sync pytest -n 4 tests/app/services/external_generation tests/app/invocations/test_external_image_generation.py tests/app/invocations/test_frontend_external_canvas_graphs.py tests/app/routers/test_app_info.py tests/app/routers/test_starter_model_is_installed.py tests/app/routers/test_model_manager_authorization.py tests/backend/model_manager/test_external_api_config.py tests/backend/model_manager/test_starter_models.py tests/backend/model_manager/test_starter_models_package.py tests/test_config.py tests/app/util/test_custom_openapi.py tests/app/test_api_dependencies.py— 754 passed.uv tool run ruff@0.11.2 checkandformat --checkon the changed Python files — clean.make frontend-openapi,make frontend-typegenandgenerate-docs-data(scripts/generate_docs_json.py); a second run gives no diff;pnpm lintandpnpm testininvokeai/frontend/apipass.node --test scripts/mock-backend-fixtures.test.mjsin webv2 — 51 passed (provider list and count updated).tsc/eslint and a browser check of the new key card (no full frontend install on this machine). The frontend changes are one map entry each, plus the key card entry.ExternalGenerationService+UberLLMProviderwith a 1368x768 request (snapped to 1536x1024), and one with an invalid key, which fails withstatus 401: Invalid, revoked, or expired API key.Tested with venice/z-image-turbo: one 1536x1024 PNG returned in 7.5 s,
usage.cost_usd0.0079.Review
No material findings. Limits: txt2img only (UberLLM's edit models are separate model ids, so img2img is left for a follow-up); no seed or negative prompt, since the models' request schemas do not take them.
Compatibility / Rollout
Additive: two new optional settings and one new invocation. Existing configs and graphs are unchanged.
Checklist
What's Newcopy (if doing a release after this PR)Model prices (below list price): https://uberllm.dev/models
I work on UberLLM.
Open in [code]smith · Need help on this PR? Tag
@codesmith-botwith what you need.