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

  1. Pass one of the exported Renderer constants (RendererKitty or RendererANSI)
  2. Validate/normalize the renderer from user config before calling, defaulting to RendererANSI
  3. Check that the renderer variable is actually initialized (Go zero-value trap)
  4. 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

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


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