{"record":{"id":"15516d1c1bf4266a","repo":"siyuan-note/siyuan","slug":"unsupported-image-output-format","errorCode":null,"errorMessage":"unsupported image output format","messagePattern":"unsupported image output format","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"kernel/model/assets.go","lineNumber":537,"sourceCode":"\n// GenerateImage 使用全局图片生成配置创建图片字节，可供文档资源、编辑器和其他图片入口复用。\nfunc GenerateImage(ctx context.Context, request GenerateImageRequest) (GenerateImageResult, error) {\n\tif Conf == nil || Conf.AI == nil {\n\t\treturn GenerateImageResult{}, errors.New(\"AI configuration is unavailable\")\n\t}\n\tprovider, generationModel := Conf.AI.GetImageGenerationModel()\n\tif err := validateImageModel(provider, generationModel); err != nil {\n\t\treturn GenerateImageResult{}, err\n\t}\n\tprompt := strings.TrimSpace(request.Prompt)\n\tif prompt == \"\" {\n\t\treturn GenerateImageResult{}, errors.New(\"prompt is required for image generation\")\n\t}\n\tsize := multimodalValueOrDefault(request.Size, Conf.AI.ImageGeneration.Size)\n\tquality := multimodalValueOrDefault(request.Quality, Conf.AI.ImageGeneration.Quality)\n\toutputFormat := strings.ToLower(multimodalValueOrDefault(request.OutputFormat, Conf.AI.ImageGeneration.OutputFormat))\n\tif outputFormat != \"png\" && outputFormat != \"jpeg\" && outputFormat != \"webp\" {\n\t\treturn GenerateImageResult{}, errors.New(\"unsupported image output format\")\n\t}\n\tgenerated, err := util.NewOpenAIImageAdapter(\n\t\tprovider.APIKey, provider.BaseURL, generationModel.Name, Conf.AI.ImageGeneration.RequestTimeout, ResolveAIProviderHeaders(provider),\n\t).Generate(ctx, util.GenerateImageRequest{\n\t\tPrompt: prompt, Size: size, Quality: quality, OutputFormat: outputFormat,\n\t})\n\tif err != nil {\n\t\treturn GenerateImageResult{}, markImageExecutionUnknown(fmt.Errorf(\"generate image failed: %w\", err))\n\t}\n\tif ctx.Err() != nil {\n\t\treturn GenerateImageResult{}, markImageExecutionUnknown(errors.New(\"image generation was cancelled\"))\n\t}\n\treturn GenerateImageResult{\n\t\tData: generated.Data, MIMEType: generated.MIMEType, Extension: generated.Extension, RevisedPrompt: generated.RevisedPrompt,\n\t}, nil\n}\n\n// GenerateDocumentImage 使用通用图片生成能力创建文档资源。","sourceCodeStart":519,"sourceCodeEnd":555,"githubUrl":"https://github.com/siyuan-note/siyuan/blob/9f775e8a12daef8255556097396f9b2739078892/kernel/model/assets.go#L519-L555","documentation":"GenerateImage normalizes request.OutputFormat (falling back to the configured Conf.AI.ImageGeneration.OutputFormat) with strings.ToLower, then requires it to be exactly \"png\", \"jpeg\", or \"webp\". Any other value — or a case that lower-cases to something else — is rejected with \"unsupported image output format\".","triggerScenarios":"Passing OutputFormat values such as \"jpg\", \"gif\", \"PNG \" (with whitespace), \"svg\", or an empty string when the configured default OutputFormat is also invalid.","commonSituations":"Users typing \"jpg\" assuming JPEG aliasing; storing a format from an older config schema; copying adapter code that passes a MIME type like \"image/png\" instead of the bare format name.","solutions":["Change OutputFormat to one of \"png\", \"jpeg\", or \"webp\" (use \"jpeg\", not \"jpg\")","Fix the default in Settings - AI - Image generation so the fallback value is a supported format","Normalize/whitelist user-provided format strings (e.g. map \"jpg\" -> \"jpeg\") before calling"],"exampleFix":"// before\nreq.OutputFormat = \"jpg\" // rejected\n// after\nreq.OutputFormat = \"jpeg\"","handlingStrategy":"validation","validationCode":"var allowed = map[string]bool{\"png\": true, \"jpeg\": true, \"webp\": true}\nfmt_ := strings.ToLower(strings.TrimSpace(req.OutputFormat))\nif !allowed[fmt_] { return errors.New(\"output format must be png, jpeg, or webp\") }","typeGuard":null,"tryCatchPattern":"_, err := model.GenerateImage(ctx, req)\nif err != nil && strings.Contains(err.Error(), \"unsupported image output format\") {\n    req.OutputFormat = \"png\" // safe default, retry once\n}","preventionTips":["Map \"jpg\" to \"jpeg\" in any user-facing format selector","Never pass MIME types like \"image/png\" as OutputFormat","Keep Conf.AI.ImageGeneration.OutputFormat within the supported trio"],"tags":["validation","image-format","ai"],"backgroundTag":"unsupported-enum-value","analyzedSha":"9f775e8a12daef8255556097396f9b2739078892","analyzedAt":"2026-09-19T03:17:15.984Z","contentChangedAt":"2026-09-19T03:17:15.984Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}