yorukot/superfile · error
invalid renderer : %v
Error message
invalid renderer : %v
What it means
ImagePreviewWithRenderer dispatches on the renderer kind; RendererKitty and RendererANSI are handled, and any other value hits the default branch. This error reports the unrecognized renderer value, indicating a bug in the caller or an unsupported/unknown renderer constant.
Source
Thrown at src/pkg/file_preview/image_preview.go:176
return "", "", err
}
switch renderer {
case RendererKitty:
result, err := p.renderWithKittyUsingTermCap(img, path, originalWidth,
originalHeight, maxWidth, maxHeight, sideAreaWidth)
if err != nil {
slog.Error("Kitty renderer failed, falling back to ANSI", "error", err)
render, ansiErr := p.ANSIRenderer(img, defaultBGColor, maxWidth, maxHeight)
return render, "", ansiErr
}
return result.Placeholders, result.RawTransmit, nil
case RendererANSI:
render, err := p.ANSIRenderer(img, defaultBGColor, maxWidth, maxHeight)
return render, "", err
default:
return "", "", fmt.Errorf("invalid renderer : %v", renderer)
}
}
View on GitHub (pinned to b72f550bc6)
Solutions
- Pass one of the exported Renderer constants (RendererKitty or RendererANSI)
- Validate/normalize the renderer from user config before calling, defaulting to RendererANSI
- Check that the renderer variable is actually initialized (Go zero-value trap)
- If adding a new renderer, add its case to the switch in ImagePreviewWithRenderer
Example fix
// before
renderer := Renderer(cfg.PreviewRenderer) // may be 0/unknown
out, raw, err := previewer.ImagePreviewWithRenderer(path, w, h, bg, side, renderer)
// after
renderer := RendererANSI
if r, err := parseRenderer(cfg.PreviewRenderer); err == nil {
renderer = r
}
out, raw, err := previewer.ImagePreviewWithRenderer(path, w, h, bg, side, renderer) Defensive patterns
Strategy: type-guard
Validate before calling
func knownRenderer(r Renderer) bool { return r == RendererKitty || r == RendererANSI } Type guard
func isKnownRenderer(r Renderer) bool {
switch r {
case RendererKitty, RendererANSI:
return true
default:
return false
}
} Try / catch
out, raw, err := previewer.ImagePreviewWithRenderer(path, w, h, bg, side, r)
if err != nil && strings.Contains(err.Error(), "invalid renderer") {
out, raw, err = previewer.ImagePreviewWithRenderer(path, w, h, bg, side, RendererANSI)
} Prevention
- Never rely on the zero value of the Renderer enum
- Parse user config into a Renderer with a known fallback default
- Update the switch in ImagePreviewWithRenderer when adding new renderers
- Centralize renderer selection in one helper with validation
When it happens
Trigger: Calling ImagePreviewWithRenderer with a renderer value outside the defined Renderer* constants — e.g., an uninitialized zero-value enum if the valid constants start at 1, or a cast of an arbitrary int.
Common situations: Constructing the renderer from user config where the config maps to no known constant; a new renderer added upstream but the caller passes a stale/undefined value.
Understand the failure class
Background: Invalid enum value errors: "Unknown type", "Invalid scope", "must be one of" — when a string is not on the library's allowed list — this error's family across 23 libraries.
Related errors
- dimensions must be positive (maxWidth=%d, maxHeight=%d)
- invalid background color: %w
- image file too large: %d bytes
- failed to get absolute path of the first path: %w
- failed to get absolute path of the second path: %w
AI-assisted analysis of yorukot/superfile@b72f550bc6 (2026-09-01).
Data as JSON: /api/errors/0430cbcc6090a1ff.
Report an issue: GitHub.