yorukot/superfile · error

image file too large: %d bytes

Error message

image file too large: %d bytes

What it means

ImagePreviewWithRenderer stats the image file before reading and enforces a 100MB hard limit to prevent loading enormous files into memory. This error reports the actual file size in bytes when it exceeds maxFileSize (100*1024*1024). Reading and decoding such files is refused by design.

Source

Thrown at src/pkg/file_preview/image_preview.go:147

	)
	if err == nil {
		// Cache the successful result
		p.cache.Set(getPreviewObjKey(path, dimensions, RendererANSI), preview)
	}
	return preview, "", err
}

// ImagePreviewWithRenderer generates an image preview using the specified renderer.
// Returns (render, rawTransmit, error).
func (p *ImagePreviewer) ImagePreviewWithRenderer(path string, maxWidth int, maxHeight int,
	defaultBGColor string, renderer ImageRenderer, sideAreaWidth int) (string, string, error) {
	info, err := os.Stat(path)
	if err != nil {
		return "", "", err
	}
	const maxFileSize = 100 * 1024 * 1024 // 100MB limit
	if info.Size() > maxFileSize {
		return "", "", fmt.Errorf("image file too large: %d bytes", info.Size())
	}

	data, err := os.ReadFile(path)
	if err != nil {
		return "", "", err
	}

	// Use the new image preparation pipeline
	img, originalWidth, originalHeight, err := prepareImageForPreview(data)
	if err != nil {
		return "", "", err
	}

	switch renderer {
	case RendererKitty:
		result, err := p.renderWithKittyUsingTermCap(img, path, originalWidth,
			originalHeight, maxWidth, maxHeight, sideAreaWidth)
		if err != nil {

View on GitHub (pinned to b72f550bc6)

Solutions

  1. Check os.Stat(path).Size() before calling and skip/show a placeholder for files > 100MB
  2. Generate a downscaled thumbnail with an external tool for very large images
  3. Filter the file listing to exclude files above a size threshold
  4. If legitimately needed, raise the limit in a fork — but beware memory use

Example fix

// before
out, raw, err := previewer.ImagePreview(largePath, w, h, bg, side)
// after
if info, err := os.Stat(largePath); err == nil && info.Size() > 100*1024*1024 {
	return "[image too large to preview]", "", nil
}
out, raw, err := previewer.ImagePreview(largePath, w, h, bg, side)
Defensive patterns

Strategy: validation

Validate before calling

info, err := os.Stat(path)
if err == nil && info.Size() > 100*1024*1024 { return ErrTooLarge }

Try / catch

out, raw, err := previewer.ImagePreviewWithRenderer(path, w, h, bg, side, r)
if err != nil && strings.HasPrefix(err.Error(), "image file too large") {
	return "[image exceeds 100MB preview limit]", "", nil
}

Prevention

When it happens

Trigger: Calling ImagePreview/ImagePreviewWithRenderer on an image whose os.Stat size is greater than 100MB (1073741824... exactly 104857600) bytes.

Common situations: Previewing large raw photos (e.g., uncompressed TIFFs, huge PNGs), scanned documents, or files in a downloads folder; accidentally pointing the previewer at a video or archive.

Understand the failure class

Background: "File too large" / "file size exceeds limit" errors: why libraries cap file sizes and how to fix them — this error's family across 46 libraries.

Related errors


AI-assisted analysis of yorukot/superfile@b72f550bc6 (2026-09-01). Data as JSON: /api/errors/4724f5291153c3a5. Report an issue: GitHub.