siyuan-note/siyuan · warning
unsupported image output format
Error message
unsupported image output format
What it means
Returned by GenerateImage when outputFormat (after lowercasing and fallback to config default) is not one of png, jpeg, webp. The OpenAI image-generation API only accepts these three formats, so any other value is rejected before the network call.
Source
Thrown at kernel/model/assets.go:429
// GenerateImage 使用全局图片生成配置创建图片字节,可供文档资源、编辑器和其他图片入口复用。
func GenerateImage(ctx context.Context, request GenerateImageRequest) (GenerateImageResult, error) {
if Conf == nil || Conf.AI == nil {
return GenerateImageResult{}, errors.New("AI configuration is unavailable")
}
provider, generationModel := Conf.AI.GetImageGenerationModel()
if err := validateImageModel(provider, generationModel); err != nil {
return GenerateImageResult{}, err
}
prompt := strings.TrimSpace(request.Prompt)
if prompt == "" {
return GenerateImageResult{}, errors.New("prompt is required for image generation")
}
size := multimodalValueOrDefault(request.Size, Conf.AI.ImageGeneration.Size)
quality := multimodalValueOrDefault(request.Quality, Conf.AI.ImageGeneration.Quality)
outputFormat := strings.ToLower(multimodalValueOrDefault(request.OutputFormat, Conf.AI.ImageGeneration.OutputFormat))
if outputFormat != "png" && outputFormat != "jpeg" && outputFormat != "webp" {
return GenerateImageResult{}, errors.New("unsupported image output format")
}
generated, err := util.NewOpenAIImageAdapter(
provider.APIKey, provider.BaseURL, generationModel.Name, Conf.AI.ImageGeneration.RequestTimeout,
).Generate(ctx, util.GenerateImageRequest{
Prompt: prompt, Size: size, Quality: quality, OutputFormat: outputFormat,
})
if err != nil {
return GenerateImageResult{}, markImageExecutionUnknown(fmt.Errorf("generate image failed: %w", err))
}
if ctx.Err() != nil {
return GenerateImageResult{}, markImageExecutionUnknown(errors.New("image generation was cancelled"))
}
return GenerateImageResult{
Data: generated.Data, MIMEType: generated.MIMEType, Extension: generated.Extension, RevisedPrompt: generated.RevisedPrompt,
}, nil
}
// GenerateDocumentImage 使用通用图片生成能力创建文档资源。View on GitHub (pinned to 251596fc0d)
Solutions
- Normalize "jpg" to "jpeg" at the call site before passing the request.
- Constrain the UI dropdown to exactly png/jpeg/webp.
- If the config default is wrong, reset ImageGeneration.OutputFormat to one of the three accepted values.
Example fix
// before
req.OutputFormat = "jpg" // rejected
res, err := model.GenerateImage(ctx, req)
// after
switch strings.ToLower(strings.TrimSpace(req.OutputFormat)) {
case "jpg": req.OutputFormat = "jpeg"
case "", "png", "jpeg", "webp": // ok
default: return fmt.Errorf("bad format %q", req.OutputFormat)
}
res, err := model.GenerateImage(ctx, req) Defensive patterns
Strategy: validation
Validate before calling
switch strings.ToLower(strings.TrimSpace(request.OutputFormat)) {
case "", "png", "jpeg", "webp": // ok
case "jpg": request.OutputFormat = "jpeg"
default:
return fmt.Errorf("unsupported output format %q", request.OutputFormat)
} Prevention
- Constrain the UI format dropdown to png/jpeg/webp only.
- Normalize the common alias "jpg" to "jpeg" before calling.
- Audit conf.json: ImageGeneration.OutputFormat must be one of the three accepted values.
When it happens
Trigger: Passing request.OutputFormat = "gif", "jpg", "bmp", "tiff", or a typo like "PNG " (note: leading/trailing space is not trimmed for format, only lowercased); the config default itself was set to an unsupported value.
Common situations: A caller maps a generic mime type to extension and passes "jpg" instead of "jpeg"; a user-edited conf.json has ImageGeneration.OutputFormat = "gif"; a copy/paste typo.
Related errors
- prompt is required for image generation
- assetPath is required for analyze
- only local assets/... images are supported
- asset path is required
- block updates are empty
AI-assisted analysis of siyuan-note/siyuan@251596fc0d (2026-08-12).
Data as JSON: /api/errors/15516d1c1bf4266a.
Report an issue: GitHub.