{"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":"warning","filePath":"kernel/model/assets.go","lineNumber":429,"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,\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":411,"sourceCodeEnd":447,"githubUrl":"https://github.com/siyuan-note/siyuan/blob/251596fc0de2f9528c00c224252fd073a99973f4/kernel/model/assets.go#L411-L447","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","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."],"exampleFix":"// before\nreq.OutputFormat = \"jpg\" // rejected\nres, err := model.GenerateImage(ctx, req)\n\n// after\nswitch strings.ToLower(strings.TrimSpace(req.OutputFormat)) {\ncase \"jpg\": req.OutputFormat = \"jpeg\"\ncase \"\", \"png\", \"jpeg\", \"webp\": // ok\ndefault: return fmt.Errorf(\"bad format %q\", req.OutputFormat)\n}\nres, err := model.GenerateImage(ctx, req)","handlingStrategy":"validation","validationCode":"switch strings.ToLower(strings.TrimSpace(request.OutputFormat)) {\ncase \"\", \"png\", \"jpeg\", \"webp\": // ok\ncase \"jpg\": request.OutputFormat = \"jpeg\"\ndefault:\n    return fmt.Errorf(\"unsupported output format %q\", request.OutputFormat)\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["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."],"tags":["validation","ai","input-validation"],"backgroundTag":null,"analyzedSha":"251596fc0de2f9528c00c224252fd073a99973f4","analyzedAt":"2026-08-12T21:18:37.123Z","schemaVersion":2},"datasetVersion":"2026-08-12T23:17:12.415Z"}