Skip to content

feat(apionly): seedream provider#9054

Open
Pfannkuchensack wants to merge 64 commits intoinvoke-ai:mainfrom
Pfannkuchensack:feat/seedream-provider
Open

feat(apionly): seedream provider#9054
Pfannkuchensack wants to merge 64 commits intoinvoke-ai:mainfrom
Pfannkuchensack:feat/seedream-provider

Conversation

@Pfannkuchensack
Copy link
Copy Markdown
Collaborator

Summary

Adds BytePlus Seedream as an external image generation provider on top of the external-models base (PR #8884). Introduces four Seedream starter models (5.0 Lite, 4.5, 4.0, 3.0 T2I) with capability-driven settings visibility, reference-image support, and provider-specific UI options (watermark toggle, prompt optimization).

What:

  • New provider: invokeai/app/services/external_generation/providers/seedream.py
  • Starter models with proper capability metadata (aspect ratios at 1K/2K, reference-image limits, batch sizes)
  • Provider-specific UI: SeedreamProviderOptions.tsx — watermark & prompt-optimization toggles
  • Reference-image support wiring for external models (panel schema, graph builder, params slice)
  • Config entry for Seedream API credentials

Why:
Seedream offers high-quality multi-reference generation at 2K/4K, which fills a gap in the current external-provider lineup.

How:
Follows the external-provider pattern established in PR #8884. Capabilities on each StarterModel drive which settings panels render, so no UI-side branching is needed beyond the Seedream-only options.

Related Issues / Discussions

QA Instructions

  1. Configure a BytePlus Seedream API key in api_keys.yaml.
  2. Install a Seedream starter model (e.g. Seedream 4.5).
  3. Verify txt2img generation at multiple aspect ratios from SEEDREAM_ASPECT_RATIOS.
  4. Verify img2img with up to 14 reference images for 4.0/4.5/5.0 Lite.
  5. Toggle watermark and prompt-optimization options, confirm they are forwarded to the API.
  6. Confirm 3.0 T2I shows seed + dimensions panels only (no reference-image panel).

Merge Plan

Rebase/merge after #8884 lands. No DB migrations. Config-default changes are additive.

Checklist

  • The PR has a short but descriptive title, suitable for a changelog
  • Tests added / updated (if applicable)
  • ❗Changes to a redux slice have a corresponding migration
  • Documentation added / updated (if applicable)
  • Updated What's New copy (if doing a release after this PR)

CypherNaught-0x and others added 30 commits February 17, 2026 12:15
Add BytePlus Seedream as external image generation provider with four
models (seedream-4.5, seedream-4.0, seedream-3.0-t2i) including debug
dump support and batch generation.

Hide irrelevant canvas settings for external models by using
ExternalModelCapabilities as the source of truth for UI rendering.
Scheduler, LoRA, CFG Scale, and all Advanced settings (VAE, CLIP Skip,
Seamless, etc.) are now hidden for external models. Steps, Guidance,
and Seed controls are only shown when the model declares support via
its capability flags. Adds supports_steps capability field and gates
the graph builder accordingly.
…pi_keys.yaml

Add 'external', 'external_image_generator', and 'external_api' to Zod
enum schemas (zBaseModelType, zModelType, zModelFormat) to match the
generated OpenAPI types. Remove redundant union workarounds from
component prop types and Record definitions.

Fix type errors in ModelEdit (react-hook-form Control invariance),
parsing.tsx (model identifier narrowing), buildExternalGraph (edge
typing), and ModelSettings import/export buttons.

Move external_gemini_base_url and external_openai_base_url into
api_keys.yaml alongside the API keys so all external provider config
lives in one dedicated file, separate from invokeai.yaml.
Add combined resolution preset selector for external models that maps
aspect ratio + image size to fixed dimensions. Gemini 3 Pro and 3.1 Flash
now send imageConfig (aspectRatio + imageSize) via generationConfig instead
of text-based aspect ratio hints used by Gemini 2.5 Flash.

Backend: ExternalResolutionPreset model, resolution_presets capability field,
image_size on ExternalGenerationRequest, and Gemini provider imageConfig logic.

Frontend: ExternalSettingsAccordion with combo resolution select, dimension
slider disabling for fixed-size models, and panel schema constraint wiring
for Steps/Guidance/Seed controls.
- Remove negative_prompt, steps, guidance, reference_image_weights,
  reference_image_modes from external model nodes (unused by any provider)
- Remove supports_negative_prompt, supports_steps, supports_guidance
  from ExternalModelCapabilities
- Add provider_options dict to ExternalGenerationRequest for
  provider-specific parameters
- Add OpenAI-specific fields: quality, background, input_fidelity
- Add Gemini-specific fields: temperature, thinking_level
- Add new OpenAI starter models: GPT Image 1.5, GPT Image 1 Mini,
  DALL-E 3, DALL-E 2
- Fix OpenAI provider to use output_format (GPT Image) vs
  response_format (DALL-E) and send model ID in requests
- Add fixed aspect ratio sizes for OpenAI models (bucketing)
- Add ExternalProviderRateLimitError with retry logic for 429 responses
- Add provider-specific UI components in ExternalSettingsAccordion
- Simplify ParamSteps/ParamGuidance by removing dead external overrides
- Update all backend and frontend tests
@github-actions github-actions bot added api python PRs that change python files Root 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 Apr 14, 2026
- Gemini recall: write temperature, thinking_level, image_size to image metadata;
  wire external graph as metadata receiver; add recall handlers.
- Canvas: gate regional guidance, inpaint mask, and control layer for external models.
- Canvas: throw a clear error on outpainting for external models (was falling back to
  inpaint and hitting an API-side mask/image size mismatch).
- Workflow editor: add ui_model_provider_id filter so OpenAI and Gemini nodes only
  list their own provider's models.
- Workflow editor: silently drop seed when the selected model does not support it
  instead of raising a capability error.
- Remove the legacy external_image_generation invocation and the graph-builder
  fallback; providers must register a dedicated node.
- Regenerate schema.ts.
- remove Gemini debug dumps to outputs/external_debug
# Conflicts:
#	invokeai/app/invocations/external_image_generation.py
#	invokeai/frontend/web/src/services/api/schema.ts
- Export imageSizeChanged from paramsSlice so the metadata recall handler
  can import it.
- Build the external graph's metadata model entry via zModelIdentifierField
  (ExternalApiModelConfig is not in the AnyModelConfig union).
- Strip Seedream debug payload/image dumps.
- Regenerate schema.ts.
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 Root services PRs that change app services

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants