Thumbnails: Difference between revisions
consolidated repeated code from various code blocks into a single block in new 'troubleshooting sub-sesction' |
Added a header so the newer image format section is more visible |
||
| (10 intermediate revisions by 3 users not shown) | |||
| Line 4: | Line 4: | ||
On minimal / custom desktop environments thumbnails in file explorers may not work by default. For example: | On minimal / custom desktop environments thumbnails in file explorers may not work by default. For example: | ||
* GNOME environments with the option <code>services.gnome.core-utilities.enable = false;</code> | * [[GNOME]] environments with the option <code>services.gnome.core-utilities.enable = false;</code> | ||
* Custom environments built from ground-up using window managers like | * Custom environments built from ground-up using window managers like [[Sway]] or [[Hyprland]] | ||
=== Save yourself hours of troubleshooting!! === | === Save yourself hours of troubleshooting!! === | ||
| Line 30: | Line 30: | ||
<syntaxhighlight lang="nix"> | <syntaxhighlight lang="nix"> | ||
# configuration.nix | # configuration.nix | ||
{ pkgs, ... }: | { pkgs, ... }: | ||
{ | { | ||
environment.systemPackages = [ | |||
environment.systemPackages = | pkgs.ffmpeg-headless | ||
ffmpeg-headless | pkgs.ffmpegthumbnailer | ||
ffmpegthumbnailer | |||
]; | ]; | ||
# 'ffmpegthumbnailer.thumbnailer' is created in '/run/current-system/sw/share/thumbnailers' | # 'ffmpegthumbnailer.thumbnailer' is created in '/run/current-system/sw/share/thumbnailers' | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
| Line 48: | Line 47: | ||
Thumbnails for the following MimeTypes are enabled: ''image/png; image/jpeg; image/bmp; image/x-bmp; image/x-MS-bmp; image/gif; image/x-icon; image/x-ico; image/x-win-bitmap; image/vnd.microsoft.icon; application/ico; image/ico; image/icon; text/ico; image/x-portable-anymap; image/x-portable-bitmap; image/x-portable-graymap; image/x-portable-pixmap; image/tiff; image/x-xpixmap; image/x-xbitmap; image/x-tga; image/x-icns; image/x-quicktime; image/qtif.'' | Thumbnails for the following MimeTypes are enabled: ''image/png; image/jpeg; image/bmp; image/x-bmp; image/x-MS-bmp; image/gif; image/x-icon; image/x-ico; image/x-win-bitmap; image/vnd.microsoft.icon; application/ico; image/ico; image/icon; text/ico; image/x-portable-anymap; image/x-portable-bitmap; image/x-portable-graymap; image/x-portable-pixmap; image/tiff; image/x-xpixmap; image/x-xbitmap; image/x-tga; image/x-icns; image/x-quicktime; image/qtif.'' | ||
<syntaxhighlight lang="nix"> | <syntaxhighlight lang="nix"># configuration.nix | ||
# configuration.nix | { pkgs, ... }: | ||
{ pkgs, ... }: | |||
{ | { | ||
environment.systemPackages = [ | |||
environment.systemPackages = | pkgs.gdk-pixbuf | ||
gdk-pixbuf | |||
]; | ]; | ||
# 'gdk-pixbuf-thumbnailer.thumbnailer' is created in '/run/current-system/sw/share/thumbnailers' | # 'gdk-pixbuf-thumbnailer.thumbnailer' is created in '/run/current-system/sw/share/thumbnailers' | ||
}</syntaxhighlight> | }</syntaxhighlight> | ||
=== | ==== Thumbnails for newer image formats such as AVIF and JPEG XL ==== | ||
For newer image formats not included in <code>gdk-pixbuf</code> you can enable thumbnails by adding their specific image libraries into the system packages as seen below<syntaxhighlight lang="nix"># configuration.nix | |||
{ pkgs, ... }: | |||
{ | { | ||
environment.systemPackages = [ | |||
# For general HEIF container support (this includes the AVIF file format) | |||
pkgs.libheif.bin # provides heif-thumbnailer (the program that generates HEIF thumbnails) | |||
pkgs.libheif.out # provides heif.thumbnailer (allows for the viewing of HEIF thumbnails) | |||
# For more newer AVIF specific support usually not needed if libheif is installed | |||
pkgs.libavif | |||
# For JXL(JPEG XL) support | |||
pkgs.libjxl | |||
# For WebP support | |||
pkgs.webp-pixbuf-loader | |||
]; | ]; | ||
# All of the thumbnailers are created in '/run/current-system/sw/share/thumbnailers' | |||
}</syntaxhighlight> | |||
=== Enable 3D Model Thumbnails === | |||
Thumbnails for various 3D model files can be enabled by installing f3d:<syntaxhighlight lang="nix"> | |||
# configuration.nix | |||
{ pkgs, ... }: | |||
{ | |||
environment.systemPackages = [ | |||
pkgs.f3d | |||
]; | |||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
=== Enable RAW (Camera) Image Thumbnails === | === Enable RAW (Camera) Image Thumbnails === | ||
==== gdk-pixbuf thumbnailer ==== | |||
gdk-pixbuf can be used to generate thumbnails for RAW camera image formats by reading the embedded jpeg. This embedded jpeg is typically generated in the camera or overwritten by your RAW editing software, and may not match what the photo looks like when opened in a viewer or editor. | |||
<syntaxhighlight lang="nix"> | |||
# configuration.nix | |||
{ pkgs, ... }: | |||
{ | |||
environment.systemPackages = [ | |||
pkgs.gdk-pixbuf | |||
# Allow gdk-pixbuf to thumbnail RAW photos by extracting the embedded jpeg | |||
(pkgs.writeTextFile { | |||
name = "raw-embedded-jpeg-thumbnailer"; | |||
destination = "/share/thumbnailers/raw-embedded-jpeg.thumbnailer"; | |||
text = '' | |||
[Thumbnailer Entry] | |||
TryExec=gdk-pixbuf-thumbnailer | |||
Exec=gdk-pixbuf-thumbnailer -s %s %u %o | |||
MimeType=image/x-canon-crw;image/x-canon-cr2;image/x-canon-cr3;image/x-adobe-dng;image/x-dng; | |||
''; | |||
}) | |||
# Other MimeTypes that include embedded jpeg may work as well (e.g. Nikon .nef, Sony .arf, etc) | |||
# Test other formats by adding them above | |||
]; | |||
} | |||
</syntaxhighlight> | |||
==== nufraw-thumbnailer ==== | ==== nufraw-thumbnailer ==== | ||
{{Warning|nufraw has not been updated since March 2nd, 2020, and may be insecure.}} | |||
To enable thumbnails for camera RAW format use <code>nufraw</code> to decode RAW images and <code>nufraw-thumbnailer</code> to generate thumbnails. | To enable thumbnails for camera RAW format use <code>nufraw</code> to decode RAW images and <code>nufraw-thumbnailer</code> to generate thumbnails. | ||
| Line 89: | Line 128: | ||
<syntaxhighlight lang="nix"># configuration.nix | <syntaxhighlight lang="nix"># configuration.nix | ||
{ pkgs, ... }: | { pkgs, ... }: | ||
{ | { | ||
environment.systemPackages = [ | |||
environment.systemPackages = | pkgs.nufraw | ||
nufraw | pkgs.nufraw-thumbnailer | ||
nufraw-thumbnailer | |||
]; | ]; | ||
# 'nufraw.thumbnailer' is created in '/run/current-system/sw/share/thumbnailers' | # 'nufraw.thumbnailer' is created in '/run/current-system/sw/share/thumbnailers' | ||
}</syntaxhighlight> | }</syntaxhighlight> | ||
| Line 108: | Line 146: | ||
Output of <code>cat /run/current-system/sw/share/thumbnailers/nufraw.thumbnailer</code>: | Output of <code>cat /run/current-system/sw/share/thumbnailers/nufraw.thumbnailer</code>: | ||
<syntaxhighlight lang=" | <syntaxhighlight lang="desktop"> | ||
[Thumbnailer Entry] | [Thumbnailer Entry] | ||
TryExec=/nix/store/piss9dl8i5xnfm5yagdffgxycm8lsqpl-nufraw-0.43-3/bin/nufraw-batch | TryExec=/nix/store/piss9dl8i5xnfm5yagdffgxycm8lsqpl-nufraw-0.43-3/bin/nufraw-batch | ||
| Line 119: | Line 157: | ||
Eg: Generate thumbnails from 'raw' data (not 'embedded jpeg') + respect EXIF (eg: rotation) metadata + add support for additional camera formats | Eg: Generate thumbnails from 'raw' data (not 'embedded jpeg') + respect EXIF (eg: rotation) metadata + add support for additional camera formats | ||
<syntaxhighlight lang="nix"> | <syntaxhighlight lang="nix"># configuration.nix | ||
# configuration.nix | |||
{ pkgs, ... }: | { pkgs, ... }: | ||
{ | { | ||
environment.systemPackages = [ | environment.systemPackages = [ | ||
nufraw | pkgs.nufraw | ||
nufraw-thumbnailer | pkgs.nufraw-thumbnailer | ||
# Thumbnails | # Thumbnails from 'raw' data and include EXIF tags for Adobe-DNG images | ||
( | (pkgs.writeTextFile { | ||
name = "my-custom-nufraw-thumbnailer"; | |||
destination = "/share/thumbnailers/my-custom-nufraw.thumbnailer"; | |||
text = '' | |||
[Thumbnailer Entry] | |||
TryExec=nufraw-batch | |||
Exec=nufraw-batch --silent --size %s --out-type=png --output=%o %i | |||
MimeType=image/x-adobe-dng;image/x-dng; | |||
''; | |||
}) | |||
# MimeTypes not listed here but listed in the default nufraw.thumbnailer will continue displaying | # MimeTypes not listed here but listed in the default nufraw.thumbnailer will continue displaying | ||
# thumbnails generated from the 'embedded jpeg' without the EXIF metadata | |||
]; | ]; | ||
}</syntaxhighlight> | |||
} | |||
</syntaxhighlight> | |||
== '''Creating Custom Thumbnailers''' == | == '''Creating Custom Thumbnailers''' == | ||
| Line 192: | Line 208: | ||
<syntaxhighlight lang="nix"># configuration.nix | <syntaxhighlight lang="nix"># configuration.nix | ||
{ pkgs, ... }: { | { pkgs, ... }: | ||
{ | |||
environment.systemPackages = [ | environment.systemPackages = [ | ||
( | (pkgs.writeTextFile { | ||
# This can be anything, it's just the name of the derivation in the nix store | |||
name = "krita-thumbnailer"; | |||
# This is the important part, the path under which this will be installed | |||
destination = "/share/thumbnailers/kra.thumbnailer"; | |||
# The contents of your thumbnailer, don't forget to specify the full path to executables | |||
text = '' | |||
[Thumbnailer Entry] | |||
Exec=sh -c "${pkgs.unzip}/bin/unzip -p %i preview.png > %o" | |||
MimeType=application/x-krita; | |||
''; | |||
}) | |||
]; | ]; | ||
}</syntaxhighlight> | }</syntaxhighlight> | ||