{"id":13453876,"url":"https://github.com/woelper/oculante","last_synced_at":"2025-05-13T16:08:28.498Z","repository":{"id":42482641,"uuid":"202965675","full_name":"woelper/oculante","owner":"woelper","description":"A fast and simple image viewer / editor for many operating systems","archived":false,"fork":false,"pushed_at":"2025-04-19T15:38:29.000Z","size":137958,"stargazers_count":1244,"open_issues_count":159,"forks_count":51,"subscribers_count":13,"default_branch":"master","last_synced_at":"2025-05-13T00:49:04.497Z","etag":null,"topics":["dds","editor","exr","hdr","image","image-viewer","jpg","ktx","linux","mac","macos","png","psd","rust","tiff","viewer","windows10"],"latest_commit_sha":null,"homepage":"https://github.com/woelper/oculante","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/woelper.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2019-08-18T05:56:52.000Z","updated_at":"2025-05-12T07:26:10.000Z","dependencies_parsed_at":"2022-09-01T02:02:17.020Z","dependency_job_id":"24718db2-a9c8-49f2-ba4f-b1d25dd0dd67","html_url":"https://github.com/woelper/oculante","commit_stats":{"total_commits":1409,"total_committers":15,"mean_commits":93.93333333333334,"dds":0.04116394606103624,"last_synced_commit":"468fd4bfcba257894bf6cf64a66adc6ad7ae0817"},"previous_names":[],"tags_count":356,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/woelper%2Foculante","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/woelper%2Foculante/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/woelper%2Foculante/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/woelper%2Foculante/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/woelper","download_url":"https://codeload.github.com/woelper/oculante/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253980052,"owners_count":21994042,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dds","editor","exr","hdr","image","image-viewer","jpg","ktx","linux","mac","macos","png","psd","rust","tiff","viewer","windows10"],"created_at":"2024-07-31T08:00:48.757Z","updated_at":"2025-05-13T16:08:23.488Z","avatar_url":"https://github.com/woelper.png","language":"Rust","funding_links":[],"categories":["Unsorted","rust","Rust","Image Viewers","Graphics","Gaming","File"],"sub_categories":["Other"],"readme":"\u003ch1 align=\"center\"\u003e\n    \u003cimg alt=\"banner\" src=\"res/banner.avif\"\u003e\n\u003c/h1\u003e\n\n _A no-nonsense hardware-accelerated image viewer_\n\n[\u003cimg src=\"res/download.svg\" height=\"50\"\u003e](https://github.com/woelper/oculante/releases/latest)\n\nOculante's vision is to be a fast, unobtrusive, portable image viewer with a wide range of supported image formats while also offering image analysis and basic editing tools.\n- Free of charge, bloat-free, ad-free, privacy-respecting open source application\n- Fast opening of images, fast startup\n- Available for Windows, Mac, Linux, FreeBSD, and NetBSD\n- Supports a wide range of image formats\n- Caches images for faster reloading\n- Can display unassociated channels correctly (If your image uses alpha and color channels to encode data in a special way)\n- Lets you pick pixels to see their location and color values.\n- Offers basic nondestructive editing such as cropping, resizing, painting, rotating, blur, and more!\n- SIMD-accelerated image editing\n\n[![](https://dcbadge.limes.pink/api/server/https://discord.gg/2Q6cF5ZWe7)](https://discord.gg/https://discord.gg/2Q6cF5ZWe7)\n---\n[![OSX](https://github.com/woelper/oculante/actions/workflows/check_osx.yml/badge.svg)](https://github.com/woelper/oculante/actions/workflows/check_osx.yml)\n[![NetBSD](https://github.com/woelper/oculante/actions/workflows/check_netbsd_minimal.yml/badge.svg)](https://github.com/woelper/oculante/actions/workflows/check_netbsd_minimal.yml)\n[![Ubuntu](https://github.com/woelper/oculante/actions/workflows/check_ubuntu_no_default_features.yml/badge.svg)](https://github.com/woelper/oculante/actions/workflows/check_ubuntu_no_default_features.yml)\n[![Check Windows](https://github.com/woelper/oculante/actions/workflows/check_windows.yml/badge.svg)](https://github.com/woelper/oculante/actions/workflows/check_windows.yml)\n[![ARM](https://github.com/woelper/oculante/actions/workflows/check_arm7.yml/badge.svg)](https://github.com/woelper/oculante/actions/workflows/check_arm7.yml)\n---\n![GitHub all releases](https://img.shields.io/github/downloads/woelper/oculante/total?label=release%20downloads)\n![Crates.io](https://img.shields.io/crates/d/oculante?label=crates.io%20downloads)\n![Screenshot](res/previews/front.png \"Screenshot\")\n\n## Flipbook\nWith configurable caching, Oculante can quickly step through image sequences:\n\n![Screenshot](res/previews/flipbook.avif \"Screenshot\")\n\n## Inspection\nGet information about pixel values and position, with precise picking:\n\n![Screenshot](res/picker.gif \"Screenshot\")\n\n## File Management\nYou can use the File Manager built into Oculante to do basic tasks such as accessing recent images or stepping through a virtual list of files so you can compare easily. There is also a dedicated compare option to flip between images, remembering zoom level and position.\n\n![Screenshot](res/previews/file_manager.png \"Screenshot\")\n\n## Correct color channel display:\nImages 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.\n\n![Screenshot](res/premult.png \"Screenshot\")\n\n## Installation\nGet started with Oculante by downloading the executable relevant to your platform from the [releases](https://github.com/woelper/oculante/releases/latest) page. The download size is kept small (currently around 25MB) by linking dependencies statically by default. Packages for ARM Linux are also built, please feel free to open an issue if you want your operating system of choice supported!\n\nFor those looking to manage Oculante through a package manager, please see the options below.\n\n### Cargo\n\n```sh\ncargo install oculante\n```\n\n### Linux\n\n- Arch Linux \n\n```sh\npacman -S oculante\n```\n\n```sh\nparu -S oculante-git\n```\n\n- NixOS\n\n```sh\nenvironment.systemPackages = [\n    pkgs.oculante\n];\n```\n\n- openSUSE\n\n```sh\nzypper install oculante\n```\n\n- Flatpak\n\n```sh\nflatpak install flathub io.github.woelper.Oculante\n```\n\n### BSD\n\n- FreeBSD\n\n```sh\npkg install oculante\n```\n\n- NetBSD\n\n```sh\npkgin install oculante\n```\n\n### Windows\n\n- Scoop\n\n```sh\nscoop install extras/oculante\n```\n\n## Build Dependencies\n\nLinux (Debian):\n\n`sudo apt-get install libxcb-shape0-dev libxcb-xfixes0-dev libgtk-3-dev libasound2-dev nasm cmake`\n\nWindows:\nInstall Nasm from https://www.nasm.us/pub/nasm/releasebuilds/2.15.05/win64/\n\nMac:\n`brew install nasm cmake`\n\n## Updates\n\nOculante only gets updated when it improves something for you. You'll still see new releases about every month or two! To stay up to date you can use the update button in settings, or download the new releases executable! Updates are also managed through your package manager if you installed through one.\n\n## Uninstalling\n\nUninstalling Oculante is a quick process, just delete the executable and delete the data folder. You can find the data folder in the relevant location for your operating system below.\n\n- Windows: `~/AppData/Local/.oculante`\n- Mac: `~/Library/Application Support/oculante`\n- Linux \u0026 BSD: `~/.local/share/oculante`\n\n## Features\n\n### Image format support\n\n- bmp\n- gif (animation support and correct timing)\n- hdr, tonemapped\n- ico\n- icns (via `rust-icns`)\n- jpeg\n- jpeg2000 (via `jpeg2k`, feature \"j2k\", on by default)\n- png\n- pnm\n- tga\n- jxl (JPEG XL, via `jxl-oxide`)\n- avif\n- tiff (via `tiff` with additional float/half support)\n- webp (via `libwebp-sys` - `image` had _very_ limited format support)\n- farbfeld\n- DDS (DXT1-5, via `dds-rs`)\n- DICOM (via dicom-rs) - Some metadata supported, too.\n- psd (via `psd`)\n- svg (via `resvg`)\n- exr (via `exr-rs`), tonemapped\n- 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.\n- ppm\n- HEIC/HEIF (via `libheif-rs`). Enabled on Windows builds, but optional dependency on MacOS and Linux - available behind `heif` flag.\n- qoi\n- kra (Krita files)\n\n### Platform support\n\n- Linux\n- Mac\n- Windows\n- FreeBSD\n- NetBSD\n\n### Misc features\n\n- Image info (\u003ckbd\u003ei\u003c/kbd\u003e) (pixel position, color info)\n- Threaded image loading\n- Fit image to view\n- Window can be configured to be always on top - helpful to keep image as reference\n- Low cpu usage\n- 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.\n- Metafile support: Edit stack can be saved into a metafile which will be auto-loaded and applied when loading the original.\n- Pretty fast startup / loading time\n- Configurable image caching (Select how many images to keep in memory)\n- Display unassociated / unpremultiplied alpha (\u003ckbd\u003eu\u003c/kbd\u003e)\n- Lossless JPEG editing: Crop, rotate, mirror without recompressing data\n- Light/Dark theme and follow system theme mode\n- 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 \u003c 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.\n- EXIF support: Load metadata if present \n- Load files from stdin: pipe your data with `cat image | oculante -s`\n\n### Misc examples:\n\nViewing EXIF data\n\n![Screenshot](res/screenshot_exif.png \"Screenshot\")\n\nExtracting a signature\n\n![signature example](res/ex-signature.gif \"Extracting a signature\")\n\n## Roadmap\n\n- Tests and benchmarks\n- Read EXIF for image rotation\n- Investigate PVR / ETC support\n- Brighness/gamma adjust for HDR\n- Redesigning the User Interface\n\n## Attribution\n\nTest / benchmark / screenshot pictures:\n\nhttps://unsplash.com/@mohsen_karimi\n\nhttps://unsplash.com/@frstvisuals\n\nhttps://unsplash.com/@eberhardgross\n\n## Privacy pledge\n\nOculante does in no way collect or send anonymous or non-anonynmous user data or statistics.\nOculante is and will remain free and open source.\nThere will never be ads.\nThere are only two instances where oculante interacts with the network, and both never happen without being triggered by the user:\n- Updating the application (must be triggered manually from settings)\n- Listening for incoming images on a custom port (must be set on command line)\n\nIn addition, Oculante saves some settings locally, for example:\n- UI accent color\n- Keybindings\n- Vsync preferences\n- Keep view offset/scale\n- Whether the directory index bar is displayed\n- Recent files\n\n## License\nThis project is MIT licensed, but some parts such as the LUTs in res/LUT are under the GPL license. As a result, we're making our entire source code public. If you would like to use Oculante without publishing your source code, please remove any GPL-licensed components and their references.\n\n\n### Extras\n\u003cdetails\u003e\n\u003csummary\u003eCargo Features\u003c/summary\u003e\n\n- `turbo` (on by default), the turbojpeg library will not be used to open jpeg images. You won't need Nasm to be installed.\n\n- `file_open` will enable/disable a OS-native file open dialog. This pulls in additional dependencies and is enabled by default. Disabling it will enable a custom file dialog. This will probably the default in the future.\n\n- `notan/glsl-to-spirv` (on by default) uses the spirv shader compiler\n\n- `notan/shaderc` uses shaderc as a shader compiler. Longer build time.\n\n- `update` (on by default) enable app updating.\n\n- `heif` HEIF format support.\n\n- `avif_native` (on by default) Rust AVIF decoder.\n\n- `dav1d` Tried and tested AVIF decoder, takes priority over `avif_native` if both are enabled.\n\n- `jxlcms` (on by default) Required for complete JXL support.\n\n- `j2k` (on by default) Support for jpeg2000.\n\n\u003c/details\u003e \n\n\u003cdetails\u003e\n\u003csummary\u003eExtended Language Support\u003c/summary\u003e\n\nOculante can support some additional languages such as Arabic, Chinese, Japanese, and Korean. This support depends on if your system has a supported font family installed. One supported font family is [Noto Sans](https://fonts.google.com/noto/specimen/Noto+Sans).\n\n\u003c/details\u003e \n\n\u003cdetails\u003e\n\u003csummary\u003eDefault Shortcuts\u003c/summary\u003e\n\n### Shortcuts:\n`mouse wheel` = zoom\n\n`left mouse`,`middle mouse` = pan\n\n`ctrl + mouse wheel` = prev/next image in folder\n\n`Right mouse` pick color from image (in paint mode)\n\n\n\u003ckbd\u003eT\u003c/kbd\u003e = AlwaysOnTop\n\n\u003ckbd\u003eF\u003c/kbd\u003e = Fullscreen\n\n\u003ckbd\u003eI\u003c/kbd\u003e = InfoMode\n\n\u003ckbd\u003eE\u003c/kbd\u003e = EditMode\n\n\u003ckbd\u003eRight\u003c/kbd\u003e = NextImage\n\n\u003ckbd\u003eHome\u003c/kbd\u003e = FirstImage\n\n\u003ckbd\u003eEnd\u003c/kbd\u003e = LastImage\n\n\u003ckbd\u003eLeft\u003c/kbd\u003e = PreviousImage\n\n\u003ckbd\u003eR\u003c/kbd\u003e = RedChannel\n\n\u003ckbd\u003eG\u003c/kbd\u003e = GreenChannel\n\n\u003ckbd\u003eB\u003c/kbd\u003e = BlueChannel\n\n\u003ckbd\u003eA\u003c/kbd\u003e = AlphaChannel\n\n\u003ckbd\u003eU\u003c/kbd\u003e = RGBChannel\n\n\u003ckbd\u003eC\u003c/kbd\u003e = RGBAChannel\n\n\u003ckbd\u003eV\u003c/kbd\u003e = ResetView\n\n\u003ckbd\u003eMinus\u003c/kbd\u003e = ZoomOut\n\n\u003ckbd\u003eEquals\u003c/kbd\u003e = ZoomIn\n\n\u003ckbd\u003eKey1\u003c/kbd\u003e = ZoomActualSize\n\n\u003ckbd\u003eKey2\u003c/kbd\u003e = ZoomDouble\n\n\u003ckbd\u003eKey3\u003c/kbd\u003e = ZoomThree\n\n\u003ckbd\u003eKey4\u003c/kbd\u003e = ZoomFour\n\n\u003ckbd\u003eKey5\u003c/kbd\u003e = ZoomFive\n\n\u003ckbd\u003eLShift\u003c/kbd\u003e + \u003ckbd\u003eC\u003c/kbd\u003e = CompareNext\n\n\u003ckbd\u003eLShift\u003c/kbd\u003e + \u003ckbd\u003eLeft\u003c/kbd\u003e = PanLeft\n\n\u003ckbd\u003eLShift\u003c/kbd\u003e + \u003ckbd\u003eRight\u003c/kbd\u003e = PanRight\n\n\u003ckbd\u003eLShift\u003c/kbd\u003e + \u003ckbd\u003eUp\u003c/kbd\u003e = PanUp\n\n\u003ckbd\u003eLShift\u003c/kbd\u003e + \u003ckbd\u003eDown\u003c/kbd\u003e = PanDown\n\n\u003ckbd\u003eDelete\u003c/kbd\u003e = DeleteFile\n\n\u003ckbd\u003eLShift\u003c/kbd\u003e + \u003ckbd\u003eDelete\u003c/kbd\u003e = ClearImage\n\n\u003ckbd\u003eRBracket\u003c/kbd\u003e = LosslessRotateRight\n\n\u003ckbd\u003eLBracket\u003c/kbd\u003e = LosslessRotateLeft\n\n\u003ckbd\u003eLControl\u003c/kbd\u003e + \u003ckbd\u003eC\u003c/kbd\u003e = Copy\n\n\u003ckbd\u003eLControl\u003c/kbd\u003e + \u003ckbd\u003eV\u003c/kbd\u003e = Paste\n\n\u003ckbd\u003eLControl\u003c/kbd\u003e + \u003ckbd\u003eO\u003c/kbd\u003e = Browse\n\n\u003ckbd\u003eQ\u003c/kbd\u003e = Quit\n\n\u003ckbd\u003eZ\u003c/kbd\u003e = ZenMode\n\n\n\u003c/details\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwoelper%2Foculante","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwoelper%2Foculante","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwoelper%2Foculante/lists"}