Federico Mariani created CAMEL-23967:
----------------------------------------
Summary: camel-openai: add image generation and edit operations
Key: CAMEL-23967
URL: https://issues.apache.org/jira/browse/CAMEL-23967
Project: Camel
Issue Type: New Feature
Components: camel-openai
Affects Versions: 4.21.0
Reporter: Federico Mariani
The pinned SDK (4.41.0) exposes {{images().generate(...)}},
{{images().edit(...)}} and {{images().createVariation(...)}} (plus streaming
variants), none of which are reachable from camel-openai. Image generation is a
common integration step (product imagery pipelines, notification enrichment)
that chains naturally into Camel's file/storage/messaging components.
Proposal: new operation {{openai:image-generation}} (and optionally
{{image-edit}}):
* body: prompt String (edit: image file/byte[] with prompt via option/header,
reusing the vision-input body handling and {{MimeTypeHelper}});
* options/headers: {{imageModel}} (e.g. {{gpt-image-1}}), {{imageSize}},
{{imageQuality}}, {{imageResponseFormat}} (b64_json/url), {{imageCount}} (n);
* output: {{byte[]}} body for a single b64 image, {{List<byte[]>}} or URLs for
multiple; response metadata via headers and {{storeFullResponse}}.
Intended usage:
{code:java}
// generate a product image from a description and store it
from("direct:product-image")
.setBody(simple("Studio photo of ${header.productName} on a white
background"))
.to("openai:image-generation?imageModel=gpt-image-1&imageSize=1024x1024")
.to("file:target/images?fileName=${header.productName}.png");
// edit an existing image coming from S3
from("aws2-s3:marketing-assets")
.setHeader(OpenAIConstants.USER_MESSAGE, constant("Add a red SALE banner in
the top-right corner"))
.to("openai:image-edit?imageModel=gpt-image-1")
.to("aws2-s3:marketing-assets-processed");
{code}
Variations can be a follow-up. Skip suggestion for the same review:
{{videos()}} and {{containers()}} services — too niche for now.
Testing note: unit tests should extend {{camel-test-infra-openai-mock}} with an
image-generation expectation (e.g.
{{whenImageGeneration()}}/{{replyWithImage(byte[])}} serving a {{b64_json}}
payload), like the existing embeddings/transcription mocking — no real model or
GPU needed. No mainstream local OpenAI-compatible image backend is CI-suitable
today (Ollama's image generation is experimental, macOS-only and has no
OpenAI-compatible endpoint; LocalAI works but is heavyweight and
amd64-oriented, so an optional IT would need
{{skipITs.ppc64le}}/{{skipITs.s390x}}).
_This issue was drafted by Claude Code on behalf of Federico Mariani_
--
This message was sent by Atlassian Jira
(v8.20.10#820010)