ggand0/viewskater

A fast image viewer for browsing large collections of images.

Rust

239

809 commits

updated Sep 13, 2026

See the code

README

Development has moved to the egui version

This repo is in maintenance mode and new features will be added to the egui version. If you rely on something in the iced version that it lacks, please open an issue at: https://github.com/ggand0/viewskater-egui/issues

Alt text

ViewSkater

ViewSkater is a fast, cross-platform image viewer written in Rust & Iced. It aims to alleviate the challenges of exploring and comparing numerous images. Linux, macOS and Windows are currently supported.

Features

  • GPU-based image rendering powered by wgpu
  • Dynamic image caching on CPU or GPU memory
  • Continuous image rendering via key presses and the slider UI
  • Dual pane view for side-by-side image comparison
  • Supports image formats supported by the image crate (JPG, PNG, GIF, BMP, TIFF, WebP, QOI, TGA, etc.)
  • JPEG 2000 support (optional feature): View JP2, J2K, and J2C files
  • Supports viewing images inside ZIP, RAR, and 7z (LZMA2 codec) files
  • Renders images up to 8192×8192 px (larger images are resized to fit)
  • COCO annotation support (optional feature): Display bounding boxes and segmentation masks with dual rendering modes (polygon/pixel)
  • Selection feature (optional feature): Select and export subsets of images from large datasets

Installation

Download the latest builds from the egui version releases. Builds of this iced version are on the releases page, or build it locally:

cargo run

To see debug logs while running, set the RUST_LOG environment variable:

RUST_LOG=viewskater=debug cargo run

To build a full release binary for packaging or distribution:

cargo build --release

Building with optional features:

# Build with COCO annotation support
cargo build --release --features coco

# Build with selection feature
cargo build --release --features selection

# Build with JPEG 2000 support
cargo build --release --features jp2

# Build with multiple features
cargo build --release --features coco,selection,jp2

See docs/bundling.md for full packaging instructions.

Linux icon setup

On GNOME 46+ (Ubuntu 24.04+), the taskbar icon requires installing a .desktop file and icon:

mkdir -p ~/.local/share/icons/hicolor/256x256/apps
cp assets/icon_256.png ~/.local/share/icons/hicolor/256x256/apps/viewskater.png
gtk-update-icon-cache -f ~/.local/share/icons/hicolor/
cp resources/linux/viewskater.desktop ~/.local/share/applications/

Edit the Exec= line in the installed .desktop file to point to your binary:

sed -i "s|Exec=.*|Exec=/path/to/viewskater %f|" \
    ~/.local/share/applications/viewskater.desktop

For the AppImage, use the AppImage path instead:

sed -i "s|Exec=.*|Exec=/path/to/ViewSkater.AppImage %f|" \
    ~/.local/share/applications/viewskater.desktop

Usage

Drag and drop an image or a directory of images onto a pane, and navigate through the images using the A / D keys or the slider UI. Use the mouse wheel to zoom in/out of an image.

In dual-pane mode (Ctrl + 2), the slider syncs images in both panes by default. You can switch to per-pane sliders by selecting the "Controls -> Controls -> Toggle Slider" menu item or pressing the Space bar.

COCO Annotations (when built with --features coco): Drag and drop a COCO-format JSON annotation file onto the app. The app will automatically search for the image directory in common locations:

  • Same directory as the JSON file
  • images/, img/, val2017/, or train2017/ subdirectories
  • Single subdirectory if only one exists in the JSON's parent directory

If the image directory is not found automatically, a folder picker will prompt you to select the image directory manually.

Image Selection (when built with --features selection): Mark images for dataset curation while browsing. Press S to mark an image as selected (green badge), X to exclude it (red badge), or U to clear the mark. Export your selections to JSON using Cmd+E (macOS) or Ctrl+E (Windows/Linux). Selection states are automatically saved and persist across sessions.

Shortcuts

ActionmacOS ShortcutWindows/Linux Shortcut
Show previous / next imageLeft / Right or A / DLeft / Right or A / D
Continuous scroll ("skate" mode)Shift + Left / Right or Shift + A / DShift + Left / Right or Shift + A / D
Jump to first / last imageCmd + Left / RightCtrl + Left / Right
Toggle UI (slider + footer)TabTab
Toggle single / dual sliderSpaceSpace
Select Pane 1 / 2 (Dual slider)1 / 21 / 2
Open folder in Pane 1 / 2Alt + 1 / 2Alt + 1 / 2
Open file in Pane 1 / 2Shift + Alt + 1 / 2Shift + Alt + 1 / 2
Open file (Single pane)Cmd + OCtrl + O
Open folder (Single pane)Cmd + Shift + OCtrl + Shift + O
Toggle single / dual pane modeCmd + 1 / 2Ctrl + 1 / 2
Toggle fullscreen modeF11F11
Close all panesCmd + WCtrl + W
ExitCmd + QCtrl + Q

Documentation

Resources

Issues moved to the egui version

These issues were opened here and transferred to the egui repository on 2026-09-11. The old links redirect.

HereNowTitle
#92viewskater-egui#36Image deletion
#86viewskater-egui#37Dragging the image outside the app
#78viewskater-egui#38Intel Mac support
#73viewskater-egui#39Performance drops over NFS with 1.6k images
#40viewskater-egui#40Tool window with image properties
#25viewskater-egui#41Package manager distribution
#7viewskater-egui#42WASM support example

Acknowledgments

ViewSkater's slider UI was inspired by the open-source project emulsion.

License

ViewSkater is licensed under either of

at your option.

Contributors

ggand0

773 commits

hml-pip

27 commits

bzdula

8 commits

eye-wave

1 commits

ggand0/viewskater

A fast image viewer for browsing large collections of images.

Rust

239

809 commits

updated Sep 13, 2026

See the code

README

Development has moved to the egui version

This repo is in maintenance mode and new features will be added to the egui version. If you rely on something in the iced version that it lacks, please open an issue at: https://github.com/ggand0/viewskater-egui/issues

Alt text

ViewSkater

ViewSkater is a fast, cross-platform image viewer written in Rust & Iced. It aims to alleviate the challenges of exploring and comparing numerous images. Linux, macOS and Windows are currently supported.

Features

  • GPU-based image rendering powered by wgpu
  • Dynamic image caching on CPU or GPU memory
  • Continuous image rendering via key presses and the slider UI
  • Dual pane view for side-by-side image comparison
  • Supports image formats supported by the image crate (JPG, PNG, GIF, BMP, TIFF, WebP, QOI, TGA, etc.)
  • JPEG 2000 support (optional feature): View JP2, J2K, and J2C files
  • Supports viewing images inside ZIP, RAR, and 7z (LZMA2 codec) files
  • Renders images up to 8192×8192 px (larger images are resized to fit)
  • COCO annotation support (optional feature): Display bounding boxes and segmentation masks with dual rendering modes (polygon/pixel)
  • Selection feature (optional feature): Select and export subsets of images from large datasets

Installation

Download the latest builds from the egui version releases. Builds of this iced version are on the releases page, or build it locally:

cargo run

To see debug logs while running, set the RUST_LOG environment variable:

RUST_LOG=viewskater=debug cargo run

To build a full release binary for packaging or distribution:

cargo build --release

Building with optional features:

# Build with COCO annotation support
cargo build --release --features coco

# Build with selection feature
cargo build --release --features selection

# Build with JPEG 2000 support
cargo build --release --features jp2

# Build with multiple features
cargo build --release --features coco,selection,jp2

See docs/bundling.md for full packaging instructions.

Linux icon setup

On GNOME 46+ (Ubuntu 24.04+), the taskbar icon requires installing a .desktop file and icon:

mkdir -p ~/.local/share/icons/hicolor/256x256/apps
cp assets/icon_256.png ~/.local/share/icons/hicolor/256x256/apps/viewskater.png
gtk-update-icon-cache -f ~/.local/share/icons/hicolor/
cp resources/linux/viewskater.desktop ~/.local/share/applications/

Edit the Exec= line in the installed .desktop file to point to your binary:

sed -i "s|Exec=.*|Exec=/path/to/viewskater %f|" \
    ~/.local/share/applications/viewskater.desktop

For the AppImage, use the AppImage path instead:

sed -i "s|Exec=.*|Exec=/path/to/ViewSkater.AppImage %f|" \
    ~/.local/share/applications/viewskater.desktop

Usage

Drag and drop an image or a directory of images onto a pane, and navigate through the images using the A / D keys or the slider UI. Use the mouse wheel to zoom in/out of an image.

In dual-pane mode (Ctrl + 2), the slider syncs images in both panes by default. You can switch to per-pane sliders by selecting the "Controls -> Controls -> Toggle Slider" menu item or pressing the Space bar.

COCO Annotations (when built with --features coco): Drag and drop a COCO-format JSON annotation file onto the app. The app will automatically search for the image directory in common locations:

  • Same directory as the JSON file
  • images/, img/, val2017/, or train2017/ subdirectories
  • Single subdirectory if only one exists in the JSON's parent directory

If the image directory is not found automatically, a folder picker will prompt you to select the image directory manually.

Image Selection (when built with --features selection): Mark images for dataset curation while browsing. Press S to mark an image as selected (green badge), X to exclude it (red badge), or U to clear the mark. Export your selections to JSON using Cmd+E (macOS) or Ctrl+E (Windows/Linux). Selection states are automatically saved and persist across sessions.

Shortcuts

ActionmacOS ShortcutWindows/Linux Shortcut
Show previous / next imageLeft / Right or A / DLeft / Right or A / D
Continuous scroll ("skate" mode)Shift + Left / Right or Shift + A / DShift + Left / Right or Shift + A / D
Jump to first / last imageCmd + Left / RightCtrl + Left / Right
Toggle UI (slider + footer)TabTab
Toggle single / dual sliderSpaceSpace
Select Pane 1 / 2 (Dual slider)1 / 21 / 2
Open folder in Pane 1 / 2Alt + 1 / 2Alt + 1 / 2
Open file in Pane 1 / 2Shift + Alt + 1 / 2Shift + Alt + 1 / 2
Open file (Single pane)Cmd + OCtrl + O
Open folder (Single pane)Cmd + Shift + OCtrl + Shift + O
Toggle single / dual pane modeCmd + 1 / 2Ctrl + 1 / 2
Toggle fullscreen modeF11F11
Close all panesCmd + WCtrl + W
ExitCmd + QCtrl + Q

Documentation

Resources

Issues moved to the egui version

These issues were opened here and transferred to the egui repository on 2026-09-11. The old links redirect.

HereNowTitle
#92viewskater-egui#36Image deletion
#86viewskater-egui#37Dragging the image outside the app
#78viewskater-egui#38Intel Mac support
#73viewskater-egui#39Performance drops over NFS with 1.6k images
#40viewskater-egui#40Tool window with image properties
#25viewskater-egui#41Package manager distribution
#7viewskater-egui#42WASM support example

Acknowledgments

ViewSkater's slider UI was inspired by the open-source project emulsion.

License

ViewSkater is licensed under either of

at your option.

Contributors

ggand0

773 commits

hml-pip

27 commits

bzdula

8 commits

eye-wave

1 commits

Languages

Rust

99.4%