{"record":{"id":"c317c3a39cd129a2","repo":"kovidgoyal/kitty","slug":"failed-to-render-the-preview-with-error-w","errorCode":null,"errorMessage":"Failed to render the preview with error: %w","messagePattern":"Failed to render the preview with error: %w","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"kittens/choose_files/image_preview.go","lineNumber":162,"sourceCode":"}\n\nfunc (p *ImagePreview) Render(h *Handler, x, y, width, height int) {\n\tif p.render_channel == nil {\n\t\tif p.render_err == nil {\n\t\t\tp.render_image(h, x, y, width, height)\n\t\t} else {\n\t\t\tp.render_err.Render(h, x, y, width, height)\n\t\t}\n\t\treturn\n\t}\n\tselect {\n\tcase hd := <-p.render_channel:\n\t\tp.render_channel = nil\n\t\tp.cached_data = hd.cached_data\n\t\tp.source_img = hd.img\n\t\tp.custom_metadata = hd.metadata\n\t\tif hd.err != nil {\n\t\t\tp.render_err = NewFileMetadataPreviewWithError(p.abspath, p.metadata, fmt.Errorf(\"Failed to render the preview with error: %w\", hd.err))\n\t\t}\n\t\tp.Render(h, x, y, width, height)\n\t\treturn\n\tdefault:\n\t}\n\tif p.file_metadata_preview == nil {\n\t\tp.file_metadata_preview = NewFileMetadataPreview(p.abspath, p.metadata)\n\t\tm := p.file_metadata_preview.(*MessagePreview)\n\t\tm.trailers = append(m.trailers, \"\", \"Rendering image preview, please wait…\")\n\t}\n\tp.file_metadata_preview.Render(h, x, y, width, height)\n}\n\nfunc (p *ImagePreview) start_rendering() {\n\tdefer func() {\n\t\tif r := recover(); r != nil {\n\t\t\tp.render_channel <- render_data{err: parallel.Format_stacktrace_on_panic(r, 1)}\n\t\t}","sourceCodeStart":144,"sourceCodeEnd":180,"githubUrl":"https://github.com/kovidgoyal/kitty/blob/6d5d0c440603ad9bdf6dcd599f73f6dde21acb44/kittens/choose_files/image_preview.go#L144-L180","documentation":"The asynchronous image rendering goroutine reported an error, which Render wraps as 'Failed to render the preview with error'. The underlying hd.err comes from the actual image decode/render pipeline (e.g. unsupported format, ffmpeg failure for videos, OOM on huge images).","triggerScenarios":"Render receives from p.render_channel with hd.err != nil after start_rendering's worker failed; the preview is replaced with an error FileMetadataPreview.","commonSituations":"Previewing a corrupt or unsupported image/video; missing ffmpeg for video previews; extremely large images exceeding memory limits.","solutions":["Inspect the wrapped inner error to find the real cause (decode failure vs tooling missing)","Verify the source file is a valid supported image (or that ffmpeg exists for video)","Update kitty / reinstall missing image-format support"],"exampleFix":"// before\np.render_err = NewFileMetadataPreviewWithError(p.abspath, p.metadata, fmt.Errorf(\"Failed to render the preview with error: %w\", hd.err))\n// after (surface inner cause clearly)\nlog.Printf(\"preview render failed for %s: %v\", p.abspath, hd.err)\np.render_err = NewFileMetadataPreviewWithError(p.abspath, p.metadata, fmt.Errorf(\"Failed to render the preview with error: %w\", hd.err))","handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"Capture hd.err, log it, and degrade gracefully to a text metadata preview instead of crashing the chooser.","preventionTips":["Pre-validate that the file is a decodable image before previewing","Ensure ffmpeg is installed when video previews are enabled"],"tags":["kitty","image-render","async","choose-files"],"backgroundTag":"image-decode-failed","analyzedSha":"6d5d0c440603ad9bdf6dcd599f73f6dde21acb44","analyzedAt":"2026-08-27T14:20:20.142Z","schemaVersion":2},"datasetVersion":"2026-08-27T19:17:21.184Z"}