• Stars
    star
    646
  • Rank 67,451 (Top 2 %)
  • Language
    Rust
  • License
    MIT License
  • Created almost 5 years ago
  • Updated 3 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

A minimalistic crossplatform image viewer written in rust

Oculante

A no-nonsense hardware-accelerated image viewer

Oculante's vision is to be a fast, unobtrusive, portable image viewer with wide image format support, offering image analysis and basic editing tools.

  • Free of charge, bloat-free, ad-free, privacy-respecting open source application
  • Fast opening of images, fast startup
  • Available for Win, Mac, Linux and NetBSD
  • Supports a wide range of images and SVG
  • Caches images for faster reloading
  • Can display unassociated channels correctly (If your image uses alpha and color channels to encode data in a special way)
  • Lets you pick pixels, display location and color values
  • Offers basic nondestructive editing: Crop, resize, paint, contrast, HSV, rotate, blur, noise, ...
  • SIMD-accelerated image editing

OSX NetBSD Ubuntu Windows ARM v7

GitHub all releases Crates.io

Screenshot

Flipbook

With configurable caching, Oculante can quickly step through image sequences: Screenshot

Inspection

Get info about pixel values and position, with precise picking: Screenshot

Network

Raw image data can be sent to Oculante and will be loaded if possible, regardless of format. Streams of images will be played as a video. You can send images from cameras or headless systems such as a Raspberry Pi for example. Screenshot

Correct color channel display:

Images may contain color information that is masked by the alpha channel. Although it is present you will not see it since usually RGB values are multiplied with the A channel when displayed. Oculante allows you to inspect all channels individually and see color data without transparency applied. Screenshot

Installation

Oculante needs no installation, as it is just one executable. Just download it for your system from the releases tab (https://github.com/woelper/oculante/releases). In order to open images you can configure your system to open your desired image formats with oculante, drag them onto the executable or into the window. Right now the executables are roughly 20MB, as the default is to statically link dependencies. Minimal versions with less image formats are provided for older computers/tiny systems. Packages for Arm linux are also built. Please open an issue if you want your operating system of choice supported.

On NetBSD, a pre-compiled binary is available through the native package manager. To install it, simply run

pkgin install oculante

Features

Image format support:

  • bmp
  • gif (animation support and correct timing)
  • hdr, tonemapped
  • ico
  • jpeg
  • png
  • pnm
  • tga
  • jxl (JPEG XL, via jxl-oxide)
  • avif
  • tiff (via tiff with additional float/half support)
  • webp (via libwebp-sys - image had very limited format support)
  • farbfeld
  • DDS (DXT1-5, via dds-rs)
  • psd (via psd)
  • svg (via resvg)
  • exr (via exr-rs), tonemapped
  • RAW (via quickraw - nef, cr2, dng, mos, erf, raf, arw, 3fr, ari, srf, sr2, braw, r3d, nrw, raw). Since raw is a complex field without true standards, not all camera models are supported.

Platform support:

  • Linux
  • Mac
  • Windows
  • NetBSD

Misc features

  • Image info (i) (pixel position, color info)
  • Threaded image loading
  • Fit image to view
  • Window can be configured to be always on top - helpful to keep image as reference
  • Low cpu usage
  • Non-destructive painting and operator stack - edit very large images interactively by scaling them down first, then deleting the downscale operator once you want to export.
  • Metafile support: Edit stack can be saved into a metafile which will be auto-loaded and applied when loading the original.
  • Pretty fast startup / loading time
  • Configurable image caching (Select how many images to keep in memory)
  • Display unassociated / unpremultiplied alpha (u)
  • Lossless JPEG editing: Crop, rotate, mirror without recompressing data
  • Network listen mode: Start with oculante -l port and oculante will switch to receive mode. You can then pipe raw image data to that port, for example using nc localhost 8888 < image.jpg. Image types will be auto-detected. If you pipe image sequences, these will be played at about 30 fps so you can pipe videos to it. This can be useful to visualize images from a headless system.

Misc examples:

EXIF display

Screenshot

Extract a signature

signature example

Roadmap:

  • Image loading time is still worse than feh or xv This is now very close, in particular after switching to turbojpeg
  • Tests and benchmarks
  • Image rotation (and read EXIF for that)
  • Investigate PVR / ETC support
  • Brighness/gamma adjust for HDR
  • SVG support
  • Custom display for images with unassociated channels
  • EXR support
  • Read next image(s) in dir and advance to them

Privacy pledge

Oculante does in no way collect or send anonymous or non-anonynmous user data or statistics. Oculante is and will remain free and open source. There will never be ads. There are only two instances where oculante interacts with the network, and both never happen without being triggered by the user:

  • Updating the application (must be triggered manually from settings)
  • Listening for incoming images on a custom port (must be set on command line)

In addition, oculante saves some settings locally, for example:

  • UI accent color
  • Keybindings
  • Vsync preferences
  • Keep view offset/scale
  • Whether the directory index bar is displayed
  • Recent files

Attribution

Test / benchmark pictures:

https://unsplash.com/@mohsen_karimi

https://unsplash.com/@frstvisuals

Building

Linux:

sudo apt-get install libxcb-shape0-dev libxcb-xfixes0-dev libgtk-3-dev libasound2-dev nasm cmake

Win: Install Nasm from https://www.nasm.us/pub/nasm/releasebuilds/2.15.05/win64/

Mac brew install nasm

Cargo Features

If you disable turbo (on by default), the turbojpeg library will not be used to open jpeg images. You won't need Nasm to be installed. The feature file_open will enable/disable a file open dialog. This pulls in additional dependencies and is enabled by default.

Shortcuts:

mouse wheel = zoom

left mouse,middle mouse = pan

ctrl + mouse wheel = prev/next image in folder

Right mouse pick color from image (in paint mode)

T = AlwaysOnTop

F = Fullscreen

I = InfoMode

E = EditMode

Right = NextImage

Home = FirstImage

End = LastImage

Left = PreviousImage

R = RedChannel

G = GreenChannel

B = BlueChannel

A = AlphaChannel

U = RGBChannel

C = RGBAChannel

V = ResetView

Minus = ZoomOut

Equals = ZoomIn

Key1 = ZoomActualSize

Key2 = ZoomDouble

Key3 = ZoomThree

Key4 = ZoomFour

Key5 = ZoomFive

LShift + C = CompareNext

LShift + Left = PanLeft

LShift + Right = PanRight

LShift + Up = PanUp

LShift + Down = PanDown

RBracket = LosslessRotateRight

LBracket = LosslessRotateLeft

LControl + C = Copy

LControl + V = Paste

LControl + O = Browse

Q = Quit

More Repositories

1

dircpy

A library to recursively copy directories, with some convenience added.
Rust
16
star
2

egui_pick_file

Demo to show how to pick file on web and native
HTML
10
star
3

houdini-lab

A place for all kind of experiments related to Houdini.
8
star
4

theme-lifeonmars

Textmate/vscode theme
4
star
5

lynx

A minimal audio player
Rust
4
star
6

partun

Rust
3
star
7

linetest

Test internet connections
Rust
3
star
8

woodpacker

calculate wood/material consumption from templates and pieces
Rust
3
star
9

knives

A place to host knife blueprints.
3
star
10

birdseye

Get an overview of the biggest files on your computer
Rust
2
star
11

ftl_save_manager

Rust
2
star
12

leukosia

Python-based mpd interface for the sphisticated guy who likes to party.
JavaScript
2
star
13

meteora

Rust
2
star
14

vaportrail

Vapor Trail - Pipe your logs and data to visualize
SCSS
2
star
15

meta-desktop

A meta desktop environment.
CSS
1
star
16

tracktools

cut gps records in chunks
Rust
1
star
17

env

A base and comfortable $HOME for linux/unix environments
Vim Script
1
star
18

smartplug

Configure custom actions when you plug in a drive
Python
1
star
19

cortexa

A note keeping experiment
Rust
1
star
20

egui-scroll

Rust
1
star
21

lilac

Webapp default components
CSS
1
star
22

micron

Rust
1
star
23

fastgraph

A primitive but simple and fast graphing system.
JavaScript
1
star
24

egui_todo

Rust
1
star
25

plantcal

JavaScript
1
star
26

theme-miami

A VS code color theme with retro colors
1
star
27

xmldiff

Visual XML diff tool
Rust
1
star
28

rust-gui-rocket

A very simple example how to use rocket and vue to communicate.
Rust
1
star
29

iotsync

pre-configured syncthing release for small devices
Standard ML
1
star
30

pvcalc

Rust
1
star