{"record":{"id":"c55e08b4e046081e","repo":"kovidgoyal/kitty","slug":"could-not-detect-the-mime-type-for-s-use-mime","errorCode":null,"errorMessage":"Could not detect the MIME type for: %s use --mime to specify it manually","messagePattern":"Could not detect the MIME type for: (.+?) use --mime to specify it manually","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"kittens/clipboard/read.go","lineNumber":317,"sourceCode":"\toutputs := make([]*Output, len(args))\n\taliases, merr := parse_aliases(opts.Alias)\n\tif merr != nil {\n\t\treturn merr\n\t}\n\n\tfor i, arg := range args {\n\t\toutputs[i] = &Output{arg: arg, arg_is_stream: arg == \"/dev/stdout\" || arg == \"/dev/stderr\", ext: filepath.Ext(arg)}\n\t\tif len(opts.Mime) > i {\n\t\t\toutputs[i].mime_type = opts.Mime[i]\n\t\t} else {\n\t\t\tif outputs[i].arg_is_stream {\n\t\t\t\toutputs[i].mime_type = \"text/plain\"\n\t\t\t} else {\n\t\t\t\toutputs[i].mime_type = utils.GuessMimeType(outputs[i].arg)\n\t\t\t}\n\t\t}\n\t\tif outputs[i].mime_type == \"\" {\n\t\t\treturn fmt.Errorf(\"Could not detect the MIME type for: %s use --mime to specify it manually\", arg)\n\t\t}\n\t}\n\n\tdefer func() {\n\t\tfor _, o := range outputs {\n\t\t\tif o.dest != nil {\n\t\t\t\to.cleanup()\n\t\t\t}\n\t\t}\n\t}()\n\n\tbasic_metadata := map[string]string{\"type\": \"read\"}\n\tif opts.UsePrimary {\n\t\tbasic_metadata[\"loc\"] = \"primary\"\n\t}\n\tlp.OnInitialize = func() (string, error) {\n\t\tlp.QueueWriteString(encode(basic_metadata, \".\"))\n\t\tif opts.Password != \"\" {","sourceCodeStart":299,"sourceCodeEnd":335,"githubUrl":"https://github.com/kovidgoyal/kitty/blob/6d5d0c440603ad9bdf6dcd599f73f6dde21acb44/kittens/clipboard/read.go#L299-L335","documentation":"In run_get_loop, when no --mime was supplied the kitten guesses the MIME type of the destination argument (e.g. from its extension via utils.GuessMimeType, with special handling for kitty-supported text types). If guessing yields an empty string, it errors asking you to specify --mime manually.","triggerScenarios":"`kitten clipboard get data.bin` where .bin (or no extension) has no known MIME mapping; destination files with unusual or missing extensions that GuessMimeType does not recognize.","commonSituations":"Downloading clipboard blobs to extensionless temp files; custom binary formats; tools scripting getfile with generated filenames like /tmp/clip.$$.","solutions":["Pass --mime explicitly: `kitten clipboard get --mime application/octet-stream data.bin`","Name the destination with a recognized extension (e.g. .png, .txt, .json)","When scripting, first query available types and map them yourself before calling get"],"exampleFix":"# before\nkitten clipboard get /tmp/clip.blob\n# after\nkitten clipboard get --mime image/png /tmp/clip.blob","handlingStrategy":"validation","validationCode":"# require a known extension or explicit --mime\ncase \"$DEST\" in *.png|*.txt|*.json) ;; *) MIME=\"${MIME:-application/octet-stream}\";; esac\n[ -n \"$MIME\" ] && set -- --mime \"$MIME\" \"$@\"","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Always pass --mime for extensionless destinations","Use recognized extensions for output files"],"tags":["kitty","clipboard","mime-type","content-detection"],"backgroundTag":"mime-type-detection-failed","analyzedSha":"6d5d0c440603ad9bdf6dcd599f73f6dde21acb44","analyzedAt":"2026-08-27T14:20:20.142Z","schemaVersion":2},"datasetVersion":"2026-08-27T19:17:21.184Z"}