naelstrof/maim

maim (make image) takes screenshots of your desktop. It has options to take only a region, and relies on slop to query for regions. maim is supposed to be an improved scrot.

C++

2,283

308 commits

updated May 28, 2026

See the code

README

maim

maim (Make Image) is an utility that takes screenshots of your desktop. It's meant to overcome shortcomings of scrot and performs better in several ways.

Features

  • Takes screenshots of your desktop, and saves it in png, jpg, or bmp format.
  • Takes screenshots of predetermined regions or windows, useful for automation.
  • Allows a user to select a region, or window, before taking a screenshot on the fly.

screenshot with selection

  • Blends the system cursor to the screenshot. screenshot with cursor
  • Masks off-screen pixels to be transparent or black.

screenshot with masked pixels

  • Maim cleanly pipes screenshots directly to standard output (unless otherwise specified), allowing for command chaining.
  • Maim supports anything slop does, even selection shaders!

slop animation

Installation

Install using your Package Manager (Preferred)

Install using CMake

Requires these at build-time:

CMake, glm, x11proto

Requires these at build- and runtime:

libjpeg-turbo, libpng, libwebp, libX11, libXcomposite, libXext, libXfixes, libXrandr, libXrender

git clone https://github.com/naelstrof/slop.git
cd slop
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX="/usr" ./
make && sudo make install
cd ..
git clone https://github.com/naelstrof/maim.git
cd maim
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX="/usr" ./
make && sudo make install

Examples

Maim allows for a lot of unique and interesting functionalities. Here's an example of a few interactions.

  • This command will allow you to select an area on your screen, then copy the selection to your clipboard. This can be used to easily post images in mumble, discord, gimp-- or any other image supporting application.
$ maim -s | xclip -selection clipboard -t image/png
  • This messy command forces a user to select a window to screenshot, then applies a shadow effect using imagemagick, then saves it to shadow.png. It looks really nice on windows that support an alpha channel.
$ maim -st 9999999 | convert - \( +clone -background black -shadow 80x3+5+5 \) +swap -background none -layers merge +repage shadow.png
  • This command is a particular favorite of mine, invented by a friend. It simply prints the RGB values of the selected pixel. A basic color picker that has the additional ability to average out the pixel values of an area. If used cleverly with the geometry and window flag, the return color might warn you of a found counter-strike match...
$ maim -st 0 | convert - -resize 1x1\! -format '%[pixel:p{0,0}]' info:-
  • This is a basic, but useful command that simply screenshots the current active window.
$ maim -i $(xdotool getactivewindow) ~/mypicture.jpg
  • This is another basic command, but I find it necessary to describe the usefulness of date. This particular command creates a full screenshot, and names it as the number of seconds that passed since 1970. Guaranteed unique, already sorted, and easily read.
$ maim ~/Pictures/$(date +%s).png
  • This one overlays a still of your desktop, then allows you to crop it. Doesn't play well with multiple monitors, but I'm sure if it did it wouldn't look this pretty and simple.
$  maim -u | feh -F - & maim -s -k cropped.png && kill $!
$ maim -s /tmp/screenshot.png; imgur.sh /tmp/screenshot.png | xclip -selection clipboard
  • The following command can be used to select a QR code (or click into a window where a QR code is present), decode it, print the text to the console and copy the text into the clipboard for further usage.
$ maim -qs | zbarimg -q --raw - | xclip -selection clipboard -f
  • Shortcut for i3 window manager:
    • Enable light on the Thinkpad T430 laptop
    • Wait 5 seconds
    • Screenshot all displays
    • Save file like ~/screenshots/2022-dec-21--12-56-08_maim.png
    • Disable light
    • Show i3 notification for 3 seconds:
bindsym $mod+Shift+x exec "\
    echo 1 > /sys/class/leds/platform\:\:micmute/brightness; \
    sleep 5; \
    maim --hidecursor ~/screenshots/$(date +%Y-%b-%d--%H-%M-%S_maim | tr A-Z a-z).png; \
    echo 0 > /sys/class/leds/platform\:\:micmute/brightness; \
    i3-nagbar --message 'Screenshot created' --type warning & \
    sleep 3; pkill i3-nagbar"
c-plus-plus
imagemagick
scrot
takes-screenshots

naelstrof/maim

maim (make image) takes screenshots of your desktop. It has options to take only a region, and relies on slop to query for regions. maim is supposed to be an improved scrot.

C++

2,283

308 commits

updated May 28, 2026

See the code

README

maim

maim (Make Image) is an utility that takes screenshots of your desktop. It's meant to overcome shortcomings of scrot and performs better in several ways.

Features

  • Takes screenshots of your desktop, and saves it in png, jpg, or bmp format.
  • Takes screenshots of predetermined regions or windows, useful for automation.
  • Allows a user to select a region, or window, before taking a screenshot on the fly.

screenshot with selection

  • Blends the system cursor to the screenshot. screenshot with cursor
  • Masks off-screen pixels to be transparent or black.

screenshot with masked pixels

  • Maim cleanly pipes screenshots directly to standard output (unless otherwise specified), allowing for command chaining.
  • Maim supports anything slop does, even selection shaders!

slop animation

Installation

Install using your Package Manager (Preferred)

Install using CMake

Requires these at build-time:

CMake, glm, x11proto

Requires these at build- and runtime:

libjpeg-turbo, libpng, libwebp, libX11, libXcomposite, libXext, libXfixes, libXrandr, libXrender

git clone https://github.com/naelstrof/slop.git
cd slop
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX="/usr" ./
make && sudo make install
cd ..
git clone https://github.com/naelstrof/maim.git
cd maim
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX="/usr" ./
make && sudo make install

Examples

Maim allows for a lot of unique and interesting functionalities. Here's an example of a few interactions.

  • This command will allow you to select an area on your screen, then copy the selection to your clipboard. This can be used to easily post images in mumble, discord, gimp-- or any other image supporting application.
$ maim -s | xclip -selection clipboard -t image/png
  • This messy command forces a user to select a window to screenshot, then applies a shadow effect using imagemagick, then saves it to shadow.png. It looks really nice on windows that support an alpha channel.
$ maim -st 9999999 | convert - \( +clone -background black -shadow 80x3+5+5 \) +swap -background none -layers merge +repage shadow.png
  • This command is a particular favorite of mine, invented by a friend. It simply prints the RGB values of the selected pixel. A basic color picker that has the additional ability to average out the pixel values of an area. If used cleverly with the geometry and window flag, the return color might warn you of a found counter-strike match...
$ maim -st 0 | convert - -resize 1x1\! -format '%[pixel:p{0,0}]' info:-
  • This is a basic, but useful command that simply screenshots the current active window.
$ maim -i $(xdotool getactivewindow) ~/mypicture.jpg
  • This is another basic command, but I find it necessary to describe the usefulness of date. This particular command creates a full screenshot, and names it as the number of seconds that passed since 1970. Guaranteed unique, already sorted, and easily read.
$ maim ~/Pictures/$(date +%s).png
  • This one overlays a still of your desktop, then allows you to crop it. Doesn't play well with multiple monitors, but I'm sure if it did it wouldn't look this pretty and simple.
$  maim -u | feh -F - & maim -s -k cropped.png && kill $!
$ maim -s /tmp/screenshot.png; imgur.sh /tmp/screenshot.png | xclip -selection clipboard
  • The following command can be used to select a QR code (or click into a window where a QR code is present), decode it, print the text to the console and copy the text into the clipboard for further usage.
$ maim -qs | zbarimg -q --raw - | xclip -selection clipboard -f
  • Shortcut for i3 window manager:
    • Enable light on the Thinkpad T430 laptop
    • Wait 5 seconds
    • Screenshot all displays
    • Save file like ~/screenshots/2022-dec-21--12-56-08_maim.png
    • Disable light
    • Show i3 notification for 3 seconds:
bindsym $mod+Shift+x exec "\
    echo 1 > /sys/class/leds/platform\:\:micmute/brightness; \
    sleep 5; \
    maim --hidecursor ~/screenshots/$(date +%Y-%b-%d--%H-%M-%S_maim | tr A-Z a-z).png; \
    echo 0 > /sys/class/leds/platform\:\:micmute/brightness; \
    i3-nagbar --message 'Screenshot created' --type warning & \
    sleep 3; pkill i3-nagbar"
c-plus-plus
imagemagick
scrot
takes-screenshots

Project health

Overall

3.1/10

Maintained

0/10

Code review

8/10
OpenSSF Scorecard

Significant stargazers

(top 24 of 47)

Felix Yan

3,378 followers · starred Sep 2015

anatoly techtonik

99 followers · starred Sep 2018

Zbigniew Jędrzejewski-Szmek

308 followers · starred Oct 2014

Drew DeVault

3,173 followers · starred Jun 2015