siyuan-note/siyuan · error
generated image exceeds size limit
Error message
generated image exceeds size limit
What it means
Thrown by ValidateGeneratedImage (kernel/util/openai.go:701) when len(data) exceeds maxGeneratedImageBytes, which is 50 * 1024 * 1024 (openai.go:51). It is a hard ceiling on a single generated image to protect kernel memory and disk. The check fires after the empty-bytes guard and before MIME detection.
Source
Thrown at kernel/util/openai.go:701
if maxBytes > 0 && output.Len() > maxBytes {
return PreparedImage{}, fmt.Errorf("prepared image exceeds size limit: %d bytes", maxBytes)
}
return PreparedImage{
Data: output.Bytes(),
MIMEType: "image/jpeg",
Width: bounds.Dx(),
Height: bounds.Dy(),
SourceSize: len(data),
}, nil
}
// ValidateGeneratedImage 校验生成图片的格式、尺寸和体积。
func ValidateGeneratedImage(data []byte) (mimeType, extension string, err error) {
if len(data) == 0 {
return "", "", errors.New("generated image is empty")
}
if len(data) > maxGeneratedImageBytes {
return "", "", errors.New("generated image exceeds size limit")
}
mimeType = mimetype.Detect(data).String()
switch mimeType {
case "image/png":
extension = ".png"
case "image/jpeg":
extension = ".jpg"
case "image/webp":
extension = ".webp"
default:
return "", "", fmt.Errorf("unsupported generated image type: %s", mimeType)
}
config, _, decodeErr := image.DecodeConfig(bytes.NewReader(data))
if decodeErr != nil || config.Width < 1 || config.Height < 1 || config.Width > 16384 || config.Height > 16384 ||
int64(config.Width)*int64(config.Height) > maxGeneratedImagePixels {
return "", "", errors.New("generated image is invalid")
}
return mimeType, extension, nilView on GitHub (pinned to 251596fc0d)
Solutions
- Lower the requested Size / Quality in GenerateImageRequest so the model emits a smaller payload.
- Pre-check the buffer length before calling ValidateGeneratedImage and reject early with a domain-clear message.
- If the model genuinely must emit large images, re-encode/shrink (jpeg quality, downscale) on your side before validation.
- Verify no middleware (proxy, gateway) is re-encoding the response to a larger format.
Example fix
// before
mimeType, ext, err := ValidateGeneratedImage(data)
// after
const limit = 50 * 1024 * 1024
if len(data) > limit {
return GeneratedImage{}, fmt.Errorf("image payload %d bytes exceeds %d limit; lower size/quality", len(data), limit)
}
mimeType, ext, err := ValidateGeneratedImage(data) Defensive patterns
Strategy: validation
Validate before calling
const imageLimit = 50 * 1024 * 1024 // matches maxGeneratedImageBytes
if len(data) > imageLimit {
return fmt.Errorf("image %d bytes over %d limit; reduce size/quality", len(data), imageLimit)
} Try / catch
if _, _, err := ValidateGeneratedImage(data); err != nil {
if strings.Contains(err.Error(), "exceeds size limit") {
// lower Size/Quality, or downscale data, then retry
}
return err
} Prevention
- Default to moderate Size values (e.g. 1024x1024) unless the model truly needs larger.
- Pre-check len(data) against 50 MiB before calling ValidateGeneratedImage for a clearer error.
- If you control the source encoder, cap its output bitrate.
When it happens
Trigger: Calling ValidateGeneratedImage with a buffer > 50 MiB. Typically reached after downloading a URL-served image or decoding a large base64 PNG returned by dall-e or a compatible image model.
Common situations: Requesting very large size/quality (e.g. 1024x1024 high-quality PNG, or 4K via newer models); model returning an uncompressed PNG; misconfigured proxy that re-encodes at higher bitrate; adversarial/buggy provider inflating output.
Related errors
- generated image is empty
- unsupported generated image type: %s
- generated image is invalid
- image prompt is required
- image model returned no image
AI-assisted analysis of siyuan-note/siyuan@251596fc0d (2026-08-12).
Data as JSON: /api/errors/b21186ee8508e8b9.
Report an issue: GitHub.