|Jan 28, 2024
|Jan 27, 2024
|Dec 29, 2023
|Dec 21, 2023
|Jul 30, 2023
#142 in Images
293 downloads per month
RV Image is a remote viewer for images written in Rust. You can view images, e.g., on remote SSH servers or Azure blob storages. Further, RV Image comes with a simple bounding box labeling tool supporting import and export of the Coco-format. So far tested on Windows 10, WSL, and Mac OS. RV Image is mainly based on
We have a few pre-built binaries for Windows and MacOS on the releases page.
With Rust installed you can also
cargo install rvimage
to install the latest stable release.
Connect to remote
RV Image connects to
- SSH/SCP using the
- local folders that might be mounts of remote storage,
- http-servers spawned via
python -m http.server, and
- Azure blob storages*.
Example configuration for the connection types can be found below. Images are cached locally in a temporary directory.
Optional http navigation server
When RV Image is started, also an http server is launched as aditional navigation option besides the graphical user interface. The default address is
127.0.0.1:5432. If occupied, the port will be increased. When sending a
/file_label the image
file_label is loaded. For this to work,
be in the currently opened folder.
Create a file
%USERPROFILE%/.rvimage/rv_cfg.toml (or probably
$HOME/.rvimage/rv_cfg.toml under Linux, untested) with the following content. For SSH currently, only authorization with key-files without passphrase is supported.
# We support the connections "Local", "Ssh", "PyHttp", or "AzureBlob"
connection = "Ssh"
# "NoCache" for not caching at all or "FileCache" for caching files in a temp dir.
cache = "FileCache"
# Address of the http control server, default is 127.0.0.1:5432
# http_address = address:port
# If you do not want to use the temporary directory of your OS, you can add something else.
# tmpdir =
n_prev_images = 2 # number of images to be cached previous to the selected one
n_next_images = 8 # number of images to be cached following the selected one
n_threads = 4 # number of threads to be used for background file caching
# Local folders can interactively be chosen via file dialog. Remote folders are restricted to one of the following list.
remote_folder_paths = [
"folder on your server",
address = "address:port" # port is usually 22
user = "your username"
ssh_identity_file_path = "somepath/.ssh/id_file_with_private_key"
# The server is expected to be started via `python -m http.server` in some folder.
# The content of this folder is than accessible.
server_address = 'http://localhost:8000/'
# With a connection string you can view the images inside a blob storage.
# The connection_string_path should point to file that only contains the
# connection string.
connection_string_path = ''
container_name = ''
# The prefix is also called folder in the Microsoft Azure Storage Explorer.
# Currently, you cannot choose this interactively.
prefix = ''
RV Image comes with two labeling tools:
- Draw bounding boxes and polygons and export in Coco format.
- Draw brush lines and export as png-masks, one per class and image.
All annotations are also stored in the project file in json format.
Besides labeling tools we also provide means to filter the images to select from and different ways to zoom in and out.
You can zoom anytime with holding Ctrl and pressing + or -.
You can also use the separate zoom tool and draw a box on the image area you want to see enlarged.
To move the zoomed area hold Ctrl and drag with the left mouse button.
You can filter for images to appear in the left selection area. The entered string will reveal those images that contain the string in their full pathname. There are three labeling related keywords, though:
nolabelreveals all images that have not been labeled with the currently active tool.
anylabelreveals all images that have been labeled with the currently active tool.
label(<label-name>)reveals all images that have a label of the class
<label-name>for the currently active tool. For instance, if the bounding box tool is active
label(foreground)will reveal all images that contain bounding boxes or polygons of the class
Filter strings can be combined with
!. For instance
1055.png || label(cat)reveals all iamges that either have a
1055.pngas part of their full pathname or contain the label
catfrom the currently active labeling tool.
Bounding Boxes and Polygons
RV Image comes with a simple bounding box and polygon labeling tool that can export to and import from the Coco format.
For an import to work, the folder that contains the images needs to be opened beforehand. To filter for files that contain bounding boxes of a specific label, one can put
label(<name-of-label>) into the filter text field. Thereby,
<name-of-label> needs to be replaced by the real name of the label. To filter for unlabeled files use
nolabel. Filters including filename-strings can be combined with
There two main ways to draw a polygon or a box:
- One corner per left-click for a polygon. Finish by right-click. One left-click and one right-clicks for a box.
- Drag the left mouse button. A polygon will follow you mouse.
|drag and release left mouse
|first left click
|start drawing mode
|$n$-th left click with $n>1$
|add polygon vertex
|finish drawing box or polygon
|Alt + left click during box/polygon drawing
|delete last vertex added
|left click on corner of box
|start drawing mode and move vertex
|Ctrl + left click on box
|Alt + left click on box
|select box and deselect others and switch to currently selected label
|hold right button
|move selected boxes
|Shift + left click on box
|select all boxes with overlap with the maximal span of this box and other selected boxes
|Ctrl + A
|select all boxes
|remove selected boxes
|Ctrl + D
|deselect all boxes
|Ctrl + H
|hide all boxes
|clone selected boxes at mouse position and move selection to new box
|Ctrl + C
|copy all selected boxes to clipboard
|Ctrl + V
|paste boxes without existing duplicate from clipboard
|activate auto-paste on image change
|move bottom right corner of all selected boxes
|Ctrl + Left⬅/Right➡/Up⬆/Down⬇
|move top left corner of all selected boxes
|Alt + Left⬅/Right➡/Up⬆/Down⬇
|move all selected boxes
|labels of selected boxes/polygons are changed
|draw circle if not in erase mode, else erase close brush stroke
|hold left mouse
|draw brush if not in erase mode
|activate erase mode
|Ctrl + click with left mouse
|Ctrl + C/V/A/H/D
|see bounding box tool
|delete selected strokes
|labels of selected strokes are changed
|Alt + T/I
* The connection to Azure blob storages has
azure_storage_blob as additional dependencies, since the used Azure SDK is implemented
asynchronously and needs
tokio. However, the rest of RV Image uses its own small threadpool implementation. Hence, the Azure blob storage connection is implemented as Cargo-feature
azure_blob that is enabled by default.