Skip to content

feat(external): add UberLLM image provider - #10251

Open
PSA-Team-source wants to merge 1 commit into
invoke-ai:mainfrom
PSA-Team-source:add-uberllm-provider
Open

PSA-Team-source wants to merge 1 commit into
invoke-ai:mainfrom
PSA-Team-source:add-uberllm-provider

Conversation

@PSA-Team-source

@PSA-Team-source PSA-Team-source commented Nov 12, 2026 •

Copy link
Copy Markdown

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.

  • UberLLMProvider calls POST /v1/images/generations with response_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 with Retry-After.
  • external_uberllm_api_key / external_uberllm_base_url settings, provider registration, uberllm_image_generation node, and the node mapping in both frontends plus a key card.
  • Eight txt2img starter models. Every UberLLM image model takes the same five size values (1024x1024, 1024x768, 768x1024, 1536x1024, 1024x1536), so each starter declares them as aspect_ratio_sizes and ExternalGenerationService snaps 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.
  • Regenerated openapi.json / schema.ts and docs/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 check and format --check on the changed Python files — clean.
  • Regenerated with the commands behind make frontend-openapi, make frontend-typegen and generate-docs-data (scripts/generate_docs_json.py); a second run gives no diff; pnpm lint and pnpm test in invokeai/frontend/api pass.
  • node --test scripts/mock-backend-fixtures.test.mjs in webv2 — 51 passed (provider list and count updated).
  • Not run: webv1/webv2 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.
  • Live: one generation through ExternalGenerationService + UberLLMProvider with a 1368x768 request (snapped to 1536x1024), and one with an invalid key, which fails with status 401: Invalid, revoked, or expired API key.

Tested with venice/z-image-turbo: one 1536x1024 PNG returned in 7.5 s, usage.cost_usd 0.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

  • The PR has a short but descriptive title, suitable for a changelog
  • Meaningful regression coverage added / updated where needed; obsolete tests/code removed
  • Persisted-state and API changes include required migrations / compatibility validation
  • Relevant performance/efficiency opportunities considered; material claims have evidence
  • Material review findings resolved and relevant checks rerun
  • Documentation added / updated (if applicable)
  • Updated What's New copy (if doing a release after this PR)

Model prices (below list price): https://uberllm.dev/models

I work on UberLLM.


Autofix with [code]smith
Open in [code]smith · Need help on this PR? Tag @codesmith-bot with what you need.

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.
@github-actions github-actions Bot added api python PRs that change python files invocations PRs that change invocations backend PRs that change backend files services PRs that change app services frontend PRs that change frontend files python-tests PRs that change python tests docs PRs that change docs labels Nov 12, 2026
@Pfannkuchensack Pfannkuchensack self-assigned this Nov 12, 2026
@Pfannkuchensack
Pfannkuchensack self-requested a review November 12, 2026 21:22

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

api backend PRs that change backend files docs PRs that change docs frontend PRs that change frontend files invocations PRs that change invocations python PRs that change python files python-tests PRs that change python tests services PRs that change app services

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants