Graphics

From Things and Stuff Wiki
Revision as of 00:55, 2 January 2020 by Milk (talk | contribs) (→‎Hardware)
Jump to navigation Jump to search


General

See also 3D / CAD, Photography, JS scripts#Graphics, WYSIWYG


Hardware


Framebuffer

  • https://en.wikipedia.org/wiki/Framebuffer - frame buffer, or sometimes framestore, is a portion of RAM containing a bitmap that drives a video display. It is a memory buffer containing a complete frame of data. Modern video cards contain framebuffer circuitry in their cores. This circuitry converts an in-memory bitmap into a video signal that can be displayed on a computer monitor.

In computing, a screen buffer is a part of computer memory used by a computer application for the representation of the content to be shown on the computer display. The screen buffer may also be called the video buffer, the regeneration buffer, or regen buffer for short. Screen buffers should be distinguished from video memory. To this end, the term off-screen buffer is also used.

The information in the buffer typically consists of color values for every pixel to be shown on the display. Color values are commonly stored in 1-bit binary (monochrome), 4-bit palettized, 8-bit palettized, 16-bit high color and 24-bit true color formats. An additional alpha channel is sometimes used to retain information about pixel transparency. The total amount of memory required for the framebuffer depends on the resolution of the output signal, and on the color depth or palette size.


  • https://en.wikipedia.org/wiki/Linux_framebuffer - fbdev is a graphic hardware-independent abstraction layer to show graphics on a computer monitor, typically on the console. The word framebuffer means a part of video memory containing a current video frame, and the Linux framebuffer means “access method to the framebuffer under the Linux kernel”, without relying on system-specific libraries such as SVGALib or another user space software.

Startup

  • fbsplash (formerly gensplash) is a userspace implementation of a splash screen for Linux systems. It provides a graphical environment during system boot using the Linux framebuffer layer.
Q: "I get a tty1 login before KDM pops up."
A: "You could disable tty1. Comment out this line in /etc/inittab: 
  c1:2345:respawn:/sbin/agetty -8 38400 tty1 linux"

DirectFB

  • directfb.net - a thin library that provides hardware graphics acceleration, input device handling and abstraction, integrated windowing system with support for translucent windows and multiple display layers, not only on top of the Linux Framebuffer Device. It is a complete hardware abstraction layer with software fallbacks for every graphics operation that is not supported by the underlying hardware. DirectFB adds graphical power to embedded systems and sets a new standard for graphics under Linux. [1]
  • fbv - a very simple graphic file viewer for the framebuffer console, capable of displaying GIF, JPEG, PNG and BMP files using libungif, libjpeg, and libpng. The image can be shown either in fit-to-screen or panning mode in 8, 15/16, and 32bpp.



SVGAlib

  • SVGAlib Tutorials - provides an easy way to create graphical applications and eliminates the rigmarole of the X Window System. If you have even the most rudimentary grasp of programming in C, then you can use SVGAlib.

GTK

Xvfb

  • Xvfb - or X virtual framebuffer is a display server implementing the X11 display server protocol. In contrast to other display servers Xvfb performs all graphical operations in memory without showing any screen output. From the point of view of the client, it acts exactly like any other X display server, serving requests and sending events and errors as appropriate. However, no output is shown. This virtual server does not require the computer it is running on to even have a screen or any input device. Only a network layer is necessary. Unlike a real display server, Xvfb does not support modern X11 extensions like compositing, Randr or GLX. Xdummy is a newer alternative which supports these extensions as well as providing the same functionality as Xvfb. Xvfb is primarily used for testing.

fbturbo

  • fbturbo - an Xorg driver for Allwinner and other ARM-based devices, derived from fbdev driver. With regard to 2D graphics, it provides a number of software optimizations on all platforms, while letting the SIMD (ARM NEON) accelerated code from the pixman library run at full speed without any unnecessary overhead. 2D hardware acceleration using G2D is supported on sunxi platforms. The recommended framebuffer color depths are 16 (RGB565) and 24 (XRGB8888), the other color depths may be supported too. Multi-head configurations are supported.

EGL

  • https://en.wikipedia.org/wiki/EGL_(API) - an interface between Khronos rendering APIs (such as OpenGL, OpenGL ES or OpenVG) and the underlying native platform windowing system. EGL handles graphics context management, surface/buffer binding, rendering synchronization, and enables "high-performance, accelerated, mixed-mode 2D and 3D rendering using other Khronos APIs." EGL is managed by the non-profit technology consortium Khronos Group.The acronym EGL is an initialism, which starting from EGL version 1.2 refers to Khronos Native Platform Graphics Interface. Prior to version 1.2, the name of the EGL specification was OpenGL ES Native Platform Graphics Interface. X.Org development documentation glossary defines EGL as "Embedded-System Graphics Library"


Display server

  • https://en.wikipedia.org/wiki/Display_server - or window server is a program whose primary task is to coordinate the input and output of its clients to and from the rest of the operating system, the hardware, and each other. The display server communicates with its clients over the display server protocol, a communications protocol, which can be network-transparent or simply network-capable. The display server is a key component in any graphical user interface, specifically the windowing system.

X Window System


Xwindows drives the underlying graphical interface of most if not all Unix/Linux computers providing a GUI. It was developed in 1984 at MIT. After around 35 years of development, tweaking and adding of new hardware and ideas, it is generally acknowledged to be a bit of a beast. It should be remembered that the common configuration at time of development was a single mini running X providing individual views to Xterminals in a timesharing system. Nowadays the norm is X providing a single screen on a desktop or laptop.

All of this means that there are many ways of achieving the same thing and many slightly different things that can meet the same purpose. In modern X versions sometimes you can get away with limited or no configuration. In the last few years the boast is that X is self configuring. Certainly the best practice rule of thumb is less configuration is better - that is only configure what is wrong.

Xorg

  • X.Org project provides an open source implementation of the X Window System. The development work is being done in conjunction with the freedesktop.org community. The X.Org Foundation is the educational non-profit corporation whose Board serves this effort, and whose Members lead this work.


X11: /usr/lib/X11 /etc/X11 /usr/include/X11 /usr/share/X11





  • A Testament to X11 Backwards Compatibility - I recently scored a Hewlett Packard 1670A Deep Memory Logic Analyzer and I finally had a chance to fire it up. This unit dates back to 1992 and is packed with all sorts of interesting options for connecting peripherals to it. One particular feature that caught my eye was the option to connect to an X Server.

History

Legacy X servers

  • https://en.wikipedia.org/wiki/XFree86 - was an implementation of the X Window System. For most of the 1990s and early 2000s, the project was the source of most innovation in X and was the de facto steward of X development. Until early 2004, it was almost universal on Linux and the BSDs. In February 2004, with version 4.4.0, The XFree86 Project adopted a license change that the Free Software Foundation considered GPL incompatible. Most open source operating systems using XFree86 found this unacceptable and moved to a fork from before the license change. The first fork was the abortive Xouvert, but X.Org Server soon became dominant. Most XFree86 developers also moved to X.Org.

Startup

/etc/X11/xinit/xinitrc
if [ -d /etc/X11/xinit/xinitrc.d ]; then
       for f in /etc/X11/xinit/xinitrc.d/*; do
               [ -x "$f" ] && . "$f"
       done
       unset f
fi


Config

You can create a basic xorg.conf using the X executable itself. As root run:

Xorg :1 -configure

This will create the file /root/xorg.conf.new, which you can then copy to /etc/X11/xorg.conf:

cp /root/xorg.conf.new /etc/X11/xorg.conf


xrdb
xset



In case monitors don't report EDID information, modeline settings might required.

cvt 1280 1024 75


randr

  • http://en.wikipedia.org/wiki/RandR - a communications protocol written as an extension to the X11[2] protocol. XRandR provides the ability to resize, rotate and reflect the root window of a screen. RandR is also responsible for setting the screen refresh rate.


xrandr -q
  show possible and current screen resolutions
xdpyinfo | grep 'dimensions:'
  show just current screen resolution in px and mm


xrandrr='xrandr --output DVI-I-1 --mode 1280x1024 --pos 0x0 --panning 0x0+0+0 --output DVI-I-0 --mode 1280x1024 --pos 1280x0'

xrandrc='xrandr --output DVI-I-1 --same-as DVI-I-0'

xrandr --output DVI-I-1 --off

xrandr --output TV-0 --mode 1024x768 --pos 0x0 --panning 0x0+0+0 --output DVI-I-0 --mode 1280x1024 --pos 1024x0


  • ARandR is designed to provide a simple visual front end for XRandR. Relative monitor positions are shown graphically and can be changed in a drag-and-drop way.
  • autorandr - Auto-detect the connect display hardware and load the appropiate X11 setup using xrandr or disper


  • randrctl - Minimalistic JSON profile based screen manager for X. It allows to store current screen setup in a declarative configuration file (a profile) and apply stored settigns later with a simple command.

Multihead

faulty EDID;

  • DMX (Distributed Multihead X Project) - Typical X servers provide multi-head support for multiple displays attached to the same machine. When Xinerama is in use, these multiple displays are presented to the user as a single unified screen. Xdmx is proxy X server that provides multi-head support for multiple displays attached to different machines (each of which is running a typical X server). When Xinerama is used with Xdmx, the multiple displays on multiple machines are presented to the user as a single unified screen. A simple application for Xdmx would be to provide multi-head support using two desktop machines, each of which has a single display device attached to it.


Switching



  • Disper is an on-the-fly display switch utility. It is intended to be used just before giving a presentation with a laptop, when all one wants is that the beamer, which has just been connected, is able to show whatever you prepared. Disper gives you the option to either clone all detected displays, or extend the desktop to them. Resolutions are automatically detected. For cloning, the highest common resolution supported by all displays is chosen; for extending every display device gets its highest supported resolution. For special setups requiring more detailed control, one can still use the standard display configuration utilites.








Remote

X's network transparency was not designed as 'it will run xterm well'; originally it was to be something that should let you run almost everything remotely, providing a full environment. ... You cannot operate with X over the network in the same way that you do locally. Trying to do so is painful and involves many things that either don't work at all or perform so badly that you don't want to use them.

X Forwarding

Requires xorg-xauth and xorg-xhost packages on the remote machine.

Remote /etc/ssh/sshd_config:

AllowTcpForwarding yes
X11UseLocalhost yes

X11DisplayOffset 10

X11Forwarding yes

Remote /etc/ssh/ssh_config:

Compression yes

Local /etc/ssh/ssh_config (optional, flag is -X)

ForwardX11 yes
ssh -XC user@host
  # X forwarding, compression

xclock
  # remote xclock should appear locally

xhost +192.168.1.64
  # add address to x access control list
mcookie
  # generate magic cookie on remote, i.e., bc85bb773ae8897d9569ddbe69684411
xauth add node10/unix:3 . bc85bb773ae8897d9569ddbe69684411
  # add remote to local xauth list

xauth list
  # list X magic cookies
  • https://wiki.archlinux.org/index.php/Xhost - used to add and delete host names or user names to the list allowed to make connections to the X server. In the case of hosts, this provides a rudimentary form of privacy control and security. It is only sufficient for a workstation (single user) environment, although it does limit the worst abuses.

Xnest

  • Xnest is both an X client and an X server. Xnest is a client of the real server which manages windows and graphics requests on its behalf. Xnest is a server to its own clients. Xnest manages windows and graphics requests on their behalf. To these clients, Xnest appears to be a conventional server.
    • http://en.wikipedia.org/wiki/Xnest - a display server implementing the X11 display server protocol that shows its output in a window. In other words, Xnest opens a window that works like another screen in which the user can open windows, etc.

Xephyr

  • Xephyr is a kdrive based X Server which targets a window on a host X Server as its framebuffer. Unlike Xnest it supports modern X extensions (even if host server doesn't) such as Composite, Damage, randr etc (no GLX support now). It uses SHM Images and shadow framebuffer updates to provide good performance. It also has a visual debugging mode for observing screen updates.
Xephyr -br -ac -noreset -screen 800x600 :1 &

DISPLAY=:1 xterm
startx -- /usr/bin/Xephyr :1

Xpra

  • Xpra - X Persistent Remote Applications, is 'screen for X', and more: it allows you to run X programs, usually on a remote host and direct their display to your local machine. It also allows you to display existing desktop sessions remotely. Xpra is "rootless" or "seamless", and sessions can be accessed over SSH, or password protected and encrypted over plain TCP sockets. Xpra adapts to bandwidth constraints and is fully open-source. [8]

The main problem with ssh -X is all your apps close when your connection drops.

xpra shadow ssh:milk@silver.local:0 --ssh="/usr/bin/ssh p=231"
  # shadow the display on a remote machine


  • Xdummy was originally developed by Karl Runge as a ​script to allow a standard X11 server to be used by non-root users with the dummy video driver

x2x

x2vnc

  • x2vnc - A dual-screen hack. will let you use two screens on two different computers as if they were connected to the same computer. Even if one of the computers runs Windows 95/98/NT and the other one runs X-windows. The program will open a small (one pixel wide) window on the edge of your screen. Moving the pointer into this window will trigger the program to take over your mouse and send mouse movements and keystrokes though the RFB protocol to a VNC server running on another machine. When the pointer is moved back towards the opposite edge on the other screen, the mouse is then released again. The operation itself is almost identical to x2x, but most of the code was actually borrowed from the program vncviewer.

x11vnc

  • x11vnc allows one to view remotely and interact with real X displays (i.e. a display corresponding to a physical monitor, keyboard, and mouse) with any VNC viewer. In this way it plays the role for Unix/X11 that WinVNC plays for Windows.

xrdp

  • xrdp - An open source remote desktop protocol(rdp) server. Based on the work of FreeRDP and rdesktop, xrdp uses the remote desktop protocol to present a GUI to the user. The goal of this project is to provide a fully functional Linux terminal server, capable of accepting connections from rdesktop, freerdp, and Microsoft's own terminal server / remote desktop clients. Unlike Windows NT/2000/2003/2008/2012 server, xrdp will not display a Windows desktop but an X window desktop to the user. Xrdp uses Xvnc or X11rdp to manage the X session.

xmove

  • xmove - a computer program that allows the movement of X Window System applications between different displays and the persistence of X applications across X server restarts. It solves a problem in the design of X, where an X client (an X application) is tied to the X server (X display) it was started on for its lifetime. Also, if the X server is shut down, the client application is forced to stop running. xmove lets the client disconnect from its current X server, and connect to a new one, at any time. The transition is completely transparent to the client. xmove works by acting as a proxy between the client and server. It is a "pseudoserver" which stores enough server state so that clients can connect to a new server without being disrupted.

Guievict

  • guievict is a computer program which enables the GUI of any application for XFree86 implementation of X Window to be transparently migrated to or replicated on another display. Unlike some program providing similar functionalities, it requires neither prearranging steps such as re-linking the application program binary nor re-directing the application process's window system communication through a proxy like xmove does.

DXPC

Graphics APIs

DirectX

  • Mesa - began as an open-source implementation of the OpenGL specification - a system for rendering interactive 3D graphics.Over the years the project has grown to implement more graphics APIs, including OpenGL ES (versions 1, 2, 3), OpenCL, OpenMAX, VDPAU, VA API, XvMC and Vulkan.A variety of device drivers allows the Mesa libraries to be used in many different environments ranging from software emulation to complete hardware acceleration for modern GPUs.Mesa ties into several other open-source projects: the Direct Rendering Infrastructure and X.org to provide OpenGL support on Linux, FreeBSD and other operating systems.


OpenGL

Tutorials

  • Learn OpenGL - "Welcome to my humble attempt to facilitate a well-developed teaching platform for the graphics API called OpenGL. Whether you are trying to learn OpenGL for academic purposes, to pursue a career or simply looking for a hobby, this site will teach you the basics, the intermediate and all the advanced knowledge using modern (core-profile) OpenGL. The aim of LearnOpenGL is to show you all there is to modern OpenGL in an easy-to-understand fashion with clear examples, while also providing a useful reference for later studies."

to sort

  • https://en.wikipedia.org/wiki/EGL_(API) - an interface between Khronos rendering APIs (such as OpenGL, OpenGL ES or OpenVG) and the underlying native platform windowing system. EGL handles graphics context management, surface/buffer binding, rendering synchronization, and enables "high-performance, accelerated, mixed-mode 2D and 3D rendering using other Khronos APIs." EGL is managed by the non-profit technology consortium Khronos Group.


  • https://en.wikipedia.org/wiki/OpenGL_Utility_Library - 'GLU, a computer graphics library for OpenGL.It consists of a number of functions that use the base OpenGL library to provide higher-level drawing routines from the more primitive routines that OpenGL provides. It is usually distributed with the base OpenGL package. GLU is not implemented in the embedded version of the OpenGL package, OpenGL ES. Among these features are mapping between screen- and world-coordinates, generation of texture mipmaps, drawing of quadric surfaces, NURBS, tessellation of polygonal primitives, interpretation of OpenGL error codes, an extended range of transformation routines for setting up viewing volumes and simple positioning of the camera, generally in more human-friendly terms than the routines presented by OpenGL. It also provides additional primitives for use in OpenGL applications, including spheres, cylinders and disks.
  • GLM - a header only C++ mathematics library for graphics software based on the OpenGL Shading Language (GLSL) specifications. GLM provides classes and functions designed and implemented with the same naming conventions and functionalities than GLSL so that anyone who knows GLSL, can use GLM as well in C++. This project isn't limited to GLSL features. An extension system, based on the GLSL extension conventions, provides extended capabilities: matrix transformations, quaternions, data packing, random numbers, noise, etc... This library works perfectly with OpenGL but it also ensures interoperability with other third party libraries and SDK. It is a good candidate for software rendering (raytracing / rasterisation), image processing, physic simulations and any development context that requires a simple and convenient mathematics library.


  • OpenGL Extension - a means for OpenGL implementations to provide new or expanded functionality that the core of OpenGL does not provide. Using extensions should not be looked on as something to be avoided; it should be accepted as standard practice for the OpenGL user.Some extensions expose features that only one particular hardware vendor exposes, but many extensions are implemented by multiple implementations. There is a mechanism for determining which extensions are available from a particular implementation.


  • GLEW - a cross-platform open-source C/C++ extension loading library. GLEW provides efficient run-time mechanisms for determining which OpenGL extensions are supported on the target platform. OpenGL core and extension functionality is exposed in a single header file. GLEW has been tested on a variety of operating systems, including Windows, Linux, Mac OS X, FreeBSD, Irix, and Solaris.



  • OpenGL Extensions Viewer - A reliable software which displays useful information about the current OpenGL 3D accelerator and new Vulkan 3D API. This program displays the vendor name, the version implemented, the renderer name and the extensions of the current OpenGL 3D accelerator.


  • https://github.com/cginternals/glbinding - leverages C++11 features like enum classes, lambdas, and variadic templates, instead of relying on macros; all OpenGL symbols are real functions and variables. It provides type-safe parameters, per feature API header, lazy function resolution, multi-context and multi-thread support, global and local function callbacks, meta information about the generated OpenGL binding and the OpenGL runtime, as well as tools and examples for quick-starting your projects. Based on the OpenGL API specification (gl.xml) glbinding is generated using python scripts and templates that can be easily adapted to fit custom needs.



  • freeglut - a free-software/open-source alternative to the OpenGL Utility Toolkit (GLUT) library. GLUT was originally written by Mark Kilgard to support the sample programs in the second edition OpenGL 'RedBook'. Since then, GLUT has been used in a wide variety of practical applications because it is simple, widely available and highly portable.GLUT (and hence FreeGLUT) takes care of all the system-specific chores required for creating windows, initializing OpenGL contexts, and handling input events, to allow for trully portable OpenGL programs.FreeGLUT is released under the X-Consortium license.


  • GLFW - an Open Source, multi-platform library for OpenGL, OpenGL ES and Vulkan development on the desktop. It provides a simple API for creating windows, contexts and surfaces, receiving input and events. GLFW is written in C and has native support for Windows, macOS and many Unix-like systems using the X Window System, such as Linux and FreeBSD.GLFW is licensed under the zlib/libpng license.


  • Pugl - a minimal portable API for GUIs which supports embedding and is suitable for use in plugins. It works on X11, Mac OS X, and Windows. GUIs can be drawn with OpenGL or Cairo. Pugl is vaguely similar to GLUT, but with some significant distinctions: Minimal in scope, providing only what is necessary to draw and receive keyboard and mouse input. No reliance on static data whatsoever, so the API can be used in plugins or multiple independent parts of a program. Single implementation, which is small, liberally licensed Free / Open Source Software, and suitable for direct inclusion in programs if avoiding a library dependency is desired. Support for embedding in other windows, so Pugl code can draw to a widget inside a larger GUI. More complete support for keyboard input, including additional "special" keys, modifiers, and support for detecting individual modifier key presses.


  • CmdlineGL - a simple binary that reads a stream of OpenGL commands as text, renders them to an X11 window, and then writes any user input from the window to standard out. It enables any language capable of reading and writing text to then be able to build interactive graphical applications. This is an old project I wrote in college. It was my 6th entry in a series of "Abuse of Technology" projects where I would do something absurd that was also sort of cool or intriguing or surprising that it could even work. In this case, I was writing animated OpenGL demos in Bash, though it can be used in conjunction with any language.
  • OpenGL bindings for Bash - A project that started as a joke can be useful to people wanting to learn the concepts of OpenGL.


  • https://en.wikipedia.org/wiki/VirtualGL - an open source program that redirects the 3D rendering commands from Unix and Linux OpenGL applications to 3D accelerator hardware in a dedicated server and displays the rendered output interactively to a thin client located elsewhere on the network.

Images


  • lonesock.net: SOIL - a tiny C library used primarily for uploading textures into OpenGL. It is based on stb_image version 1.16, the public domain code from Sean Barrett (found here). I have extended it to load TGA and DDS files, and to perform common functions needed in loading OpenGL textures. SOIL can also be used to save and load images in a variety of formats (useful for loading height maps, non-OpenGL applications, etc.)


OpenVG

  • https://en.wikipedia.org/wiki/OpenVG - an API designed for hardware-accelerated 2D vector graphics. Its primary platforms are mobile phones, gaming & media consoles and consumer electronic devices. It was designed to help manufacturers create more attractive user interfaces by offloading computationally intensive graphics processing from the CPU onto a GPU to save energy. OpenVG is well suited[citation needed] to accelerating Flash and mobile profile of SVG sequences. The OpenGL ES library provides similar functionality for 3D graphics. OpenVG is managed by the non-profit technology consortium Khronos Group.

OpenGL ES

  • https://en.wikipedia.org/wiki/OpenGL_ES - or GLES is a subset of the OpenGL computer graphics rendering application programming interface (API) for rendering 2D and 3D computer graphics such as those used by video games, typically hardware-accelerated using a graphics processing unit (GPU). It is designed for embedded systems like smartphones, tablet computers, video game consoles and PDAs. OpenGL ES is the "most widely deployed 3D graphics API in history". The API is cross-language and multi-platform. The libraries GLUT and GLU are not available for OpenGL ES. OpenGL ES is managed by the non-profit technology consortium Khronos Group. Vulkan, a next-generation API from Khronos, is made for simpler high performance drivers for mobile and desktop devices.


  • https://github.com/brackeen/glfm - Write OpenGL ES code in C/C++ without writing platform-specific code.GLFM is an OpenGL ES layer for mobile devices and the web. GLFM supplies an OpenGL ES context and input events. It is largely inspired by GLFW.GLFM is written in C and runs on iOS 8, tvOS 9, Android 2.3.3 (API 10), and WebGL 1.0 (via Emscripten).




  • GL4ES - a library provide OpenGL 2.x functionality for GLES2.0 accelerated Hardware (and support OpenGL 1.5 function, sometimes better then when using GLES 1.1 backend) There is also support for GLES 1.1 Hardware, emulating OpenGL 1.5, and some OpenGL 2.x+ extensions.GL4ES is known to work on many platform: OpenPandora, ODroid, RaspberryPI (2 and 3 at least), PocketCHIP, “otherfruit”PI (like the OrangePI), Android, x86 and x86_64 Linux (tested using mesa-egl). There is also some WIP support for AmigaOS4, using experimental GLES2 driver for Warp3D. The focus is on compatibility and speed with a wide selection of game and software.It has been tested successfully of a large selection of games and software, including: Minecraft, OpenMW, SeriousSam (both First and Second Encounters), RVGL (ReVolt GL), TSMC (The Secret Maryo Chronicles), TORCS, SpeedDreams, GL-117, Foobillard(plus), Blender 2.68 to name just a few.

Vulkan

  • Vulkan - a new generation graphics and compute API that provides high-efficiency, cross-platform access to modern GPUs used in a wide variety of devices from PCs and consoles to mobile phones and embedded platforms.




Software

Viewing

xv

feh

feh

meh

sxiv

  • sxiv - Simple (or small or suckless) X Image Viewer
sxiv *
  Open all (hack)
sxiv -t
q
  quit
f
  toggle fullscreen
Enter
  toggle between single and thumbnail
Space
  next image
Backspace
  previous image

CV

mpview

qiv / pqiv

lsix

PixelOnTerminal

termplay

Manipulation

ImagePlay

  • ImagePlay - a rapid prototyping tool for building and testing image processing algorithms.It comes with a variety of over 70 individual image processors which can be combined into complex process chains.ImagePlay is completely open source and can be built for Windows, Mac and Linux.

ImageMagick

magick image.jpg image.png


import -crop 1280x1024+1280+0 -window root $HOME/screenshot_silver_$(date +%F_%H%M%S_%N).png
  # import a screenshot of the root window to a file cropped for the second desktop


convert -quality 97 image.png image.jpg

convert sample.png sample.pdf



GraphicsMagick

G'MIC

  • G'MIC - a full-featured open-source framework for image processing. It provides several different user interfaces to convert/manipulate/filter/visualize generic image datasets, ranging from 1d scalar signals to 3d+t sequences of multi-spectral volumetric images, thus including 2d color images.

VIPS

  • libvips - A fast image processing library with low memory needs.

img2txt / gif2txt

Netpbm

  • Netpbm - a toolkit for manipulation of graphic images, including conversion of images between a variety of different formats. There are over 300 separate tools in the package including converters for about 100 graphics formats. Examples of the sort of image manipulation we're talking about are: Shrinking an image by 10%; Cutting the top half off of an image; Making a mirror image; Creating a sequence of images that fade from one image to another.

Freestyle

  • Freestyle - software for Non-Photorealistic Line Drawing rendering from 3D scenes. It is designed as a programmable interface to allow maximum control over the style of the final drawing: the user "programs" how the silhouettes and other feature lines from the 3D model should be turned into stylized strokes using a set of programmable operators dedicated to style description. This programmable approach, inspired by the shading languages available in photorealistic renderers such as Pixar's RenderMan, overcomes the limitations of integrated software with access to a limited number of parameters and permits the design of an infinite variety of rich and complex styles. The system currently focuses on pure line drawing as a first step. The style description language is Python augmented with our set of operators.

shapeme

primitive.lol

primitive

imscript


Neural Photo Editor

iGAN

Deep Image Prior

  • Deep Image Prior - deep convolutional networks have become a popular tool for image generation and restoration. Generally, their excellent performance is imputed to their ability to learn realistic image priors from a large number of example images. In this paper, we show that, on the contrary, the structure of a generator network is sufficient to capture a great deal of low-level image statistics prior to any learning. In order to do so, we show that a randomly-initialized neural network can be used as a handcrafted prior with excellent results in standard inverse problems such as denoising, superresolution, and inpainting. Furthermore, the same prior can be used to invert deep neural representations to diagnose them, and to restore images based on flash-no flash input pairs. [19]

imgaug

audio_shop

PixiVisor

  • PixiVisor - a tool for experimenting with the transmission of video over audio. It consists of two parts: Transmitter and Receiver. Transmitter converts the low-resolution video (stream from camera, static image or GIF animation) to sound in real time, pixel by pixel (progressive scan). So any image or animation can be transferred to the other devices through the sound. Receiver converts the sound (from microphone or Line-in input) back to video. You can set the color palette for this video, and record it to animated GIF file.

imagecli

pastel

ColTerm

Other

Generation

  • GD is an open source code library for the dynamic creation of images by programmers. GD is written in C, and "wrappers" are available for Perl, PHP and other languages. GD creates PNG, JPEG and GIF images, among other formats. GD is commonly used to generate charts, graphics, thumbnails, and most anything else, on the fly. While not restricted to use on the web, the most common applications of GD involve website development.


  • Processing is a programming language, development environment, and online community. Since 2001, Processing has promoted software literacy within the visual arts and visual literacy within technology. Initially created to serve as a software sketchbook and to teach computer programming fundamentals within a visual context, Processing evolved into a development tool for professionals. Today, there are tens of thousands of students, artists, designers, researchers, and hobbyists who use Processing for learning, prototyping, and production.



  • polyHédronisme - a toy for building complex 3D polyhedral shapes from simple ones by "recipes".


  • Mondrian is a smart and easy-to-learn vector graphics web app.



  • Evolvotron is an interactive "generative art" application for Linux to evolve images/textures/patterns/animations through an iterative process of random mutation and user-selection driven evolution. (This process is also often referred to as "evolutionary art" or "genetic art".) If you like lava lamps, and still think the Mandelbrot set is cool, this could be the software for you.





Photography

See Photography

Editing

svg-edit

GIMP

Manual
Tips
Tab
  toggle toolbars

Doesn't save undo history. Bug. Use file history, layers or sg-snapshot instead.

Articles
Textures
  • GPS is a collection of brushes and accompanying tool presets. Tool presets are a simply saved tool options, highly useful feature of the GIMP. The goal of GPS is to provide an adequate working environment for graphic designers and artists to begin to paint and feel comfortable with GIMP from their first use. Later the user will change these settings based on his own workflow preferences and understanding of GIMP.
Scripts and plugins








  • GAP - for animation






Community

Photoshop

Plugins

Inkscape

Guides

sK1

  • sK1 - professional quality illustration program for Windows, GNU/Linux and macOS platforms. sK1 2.0 is a powerful and mature application that makes users more productive and provides them professional and free solution even for exotic *nix OSes. Whether you are a newbie user or an experienced designer, sK1 2.0 makes it easy to get started. With its professional color-management engine and wide-range file format compatibility, sK1 2.0 provides color accuracy and drawing flexibility you need for all types of projects.

Pinta

MyPaint

  • MyPaint is a fast and easy open-source graphics application for digital painters. It lets you focus on the art instead of the program. You work on your canvas with minimum distractions, bringing up the interface only when you need it.

Paint.net

AzPainter

Online


  • Photopea - a free online tool for editing raster art and vector graphics with support for PSD, XCF and Sketch files. Supported formats: Complex: PSD, XCF, Sketch, XD, CDR, SVG, EPS, PDF, WMF, EMF. Raster: PNG (APNG), JPG, GIF, WebP, ICO, BMP, PPM/PGM/PBM, TIFF, DNG, DDS.

mtPaint

  • mtPaint - a painting program which Mark Tyler developed from scratch so he could easily create pixel art and manipulate digital photos. It uses the GTK+ toolkit (version 1 or 2) and runs on PC's via the GNU/Linux or Windows operating systems. Due to its efficient design it can run on older PC hardware (e.g. a 200MHz CPU and 16MB of free RAM). mtPaint is free software, which means you are able to freely use, modify and distribute it according to the GNU General Public License.


sK1

  • sK1 - professional quality illustration program for Windows, GNU/Linux and macOS platforms. sK1 2.0 is a powerful and mature application that makes users more productive and provides them professional and free solution even for exotic *nix OSes. Whether you are a newbie user or an experienced designer, sK1 2.0 makes it easy to get started. With its professional color-management engine and wide-range file format compatibility, sK1 2.0 provides color accuracy and drawing flexibility you need for all types of projects.


Xara Xtreme

  • Xara Xtreme - for Linux is a powerful, general purpose graphics program for Unix platforms including Linux, FreeBSD and (in development) OS-X. Formely known as Xara LX, it is based on Xara Xtreme for Windows, which is the fastest graphics program available, period. The Xara Xtreme source code was made available open-source in early 2006, and is being ported to Linux. This process is almost complete and Xara Xtreme for Linux is available for download now.


CinePaint

  • CinePaint - an open source computer program for painting and retouching bitmap frames of films. It is a fork of version 1.0.4 of the GNU Image Manipulation Program (GIMP). It enjoyed some success as one of the earliest open source tools developed for feature motion picture visual effects and animation work. The main reason for this adoption over mainline gimp was its support for high bit depths (greater than 8-bits per channel) which can be required for film work.[citation needed] The mainline GIMP project later added high bit depths in GIMP 2.9.2, released November 2015.


Krita

  • Krita - a professional FREE and open source painting program. It is made by artists that want to see affordable art tools for everyone including for concept art, texture and matte painters, illustrations and comics


Fragmentarium / FragM

  • Fragmentarium - an open source, cross-platform IDE for exploring pixel based graphics on the GPU. It is inspired by Adobe's Pixel Bender, but uses GLSL, and is created specifically with fractals and generative systems in mind.
    • https://github.com/3Dickulus/FragM - derived from Mikael Hvidtfeldt Christensen's Fragmentarium representing a compilation of features and fixes contributed by many users at FractalForums.com over 3-4 years.


XFig

  • XFig - a free and open-source vector graphics editor which runs under the X Window System on most UNIX-compatible platforms. In Xfig, figures may be drawn using objects such as circles, boxes, lines, spline curves, text, etc. It is also possible to import images in formats such as GIF, JPEG, EPS, PostScript, etc. Those objects can be created, deleted, moved or modified. Attributes such as colors or line styles can be selected in various ways. For text, 35 fonts are available. Xfig saves figures in its native text-only "Fig" format. Xfig has a facility to print figures to a PostScript printer too. A convenient feature is the PSTEX or PDFTEX export format that allows a smooth integration of Xfig-generated images into LaTeX documents.


GrafX2

  • GrafX2 - a bitmap paint program inspired by the Amiga programs ​Deluxe Paint and Brilliance. Specialized in 256-color drawing, it includes a very large number of tools and effects that make it particularly suitable for pixel art, game graphics, and generally any detailed graphics painted with a mouse. The program is mostly developed on Haiku, Linux and Windows, but is also portable on many other platforms. [21]

rx

Seashore

  • Seashore - an open source image editor for Mac OS X's Cocoa framework. It features gradients, textures and anti-aliasing for both text and brush strokes. It supports multiple layers and alpha channel editing. It is based around the GIMP's technology and uses the same native file format. However, unlike the GIMP, Seashore aims to serve the basic image editing needs of most computer users, not to provide a replacement for professional image editing products. Also, unlike GIMP, Seashore has an all-new Cocoa UI that will fit right in on Mac OS X.

VPaint

  • VPaint is an experimental vector graphics editor based on the Vector Animation Complex (VAC), a technology developed by a collaboration of researchers at Inria and the University of British Columbia, featured at SIGGRAPH 2015. It allows you to create resolution-independent illustrations and animations using innovative techniques. [23]
  • https://github.com/dalboris/vpaint

Animation




  • DALi - a dynamic animation library, a 2D and 3D scene graph that abstracts the rendering of the nodes through a simple API. It can be used to create 2D and 3D applications, providing support for resource loading, touch events, key events, animating the nodes and a whole array of functionality to make it easy for the user to produce effects, applications and user interfaces. DALi is developed with user input responsiveness, smooth updates with good FPS and low memory requirements in mind. A Toolkit is provided to make using DALi even easier along with a framework that facilitates the creating of your own controls. DALi is Open Source, constantly maintained and extended.DALi provides 2 apis, the native C++ and NUI which is based on C#.


  • https://github.com/MaurycyLiebner/enve - a new open-source 2D animation software for Linux. You can use enve to create vector animations, raster animations, and even use sound and video files. Enve was created with flexibility and expandability in mind.

Colour management

  • https://en.wikipedia.org/wiki/Color_management - the controlled conversion between the color representations of various devices, such as image scanners, digital cameras, monitors, TV screens, film printers, computer printers, offset presses, and corresponding media.The primary goal of color management is to obtain a good match across color devices; for example, the colors of one frame of a video should appear the same on a computer LCD monitor, on a plasma TV screen, and as a printed poster. Color management helps to achieve the same appearance on all of these devices, provided the devices are capable of delivering the needed color intensities. With photography it is often critical that prints or online gallery appear how they were intended. Color management cannot guarantee identical color reproduction, as this is rarely possible, but it can at least give more control over any changes which may occur.

Parts of this technology are implemented in the operating system (OS), helper libraries, the application, and devices. A cross-platform view of color management is the use of an ICC-compatible color management system. The International Color Consortium (ICC) is an industry consortium that has defined: An open standard for a Color Matching Module (CMM) at the OS level, and color profiles for: Devices, including devicelink-profiles that represent a complete color transformation from source device to target device, and Working spaces, the color spaces in which color data is meant to be manipulated

There are other approaches to color management besides using ICC profiles. This is partly due to history and partly because of other needs than the ICC standard covers. The film and broadcasting industries make use of some of the same concepts, but they frequently rely on more limited boutique solutions. The film industry, for instance, often uses 3D LUTs (lookup table) to represent a complete color transformation for a specific RGB encoding. At the consumer level, color management currently applies more to still images than video, in which color management is still in its infancy.


  • https://en.wikipedia.org/wiki/ICC_profile - a set of data that characterizes a color input or output device, or a color space, according to standards promulgated by the International Color Consortium (ICC). Profiles describe the color attributes of a particular device or viewing requirement by defining a mapping between the device source or target color space and a profile connection space (PCS). This PCS is either CIELAB (L*a*b*) or CIEXYZ. Mappings may be specified using tables, to which interpolation is applied, or through a series of parameters for transformations.

Every device that captures or displays color can be profiled. Some manufacturers provide profiles for their products, and there are several products that allow an end-user to generate his or her own color profiles, typically through the use of a tristimulus colorimeter or preferably a spectrophotometer. The ICC defines the format precisely but does not define algorithms or processing details. This means there is room for variation between different applications and systems that work with ICC profiles. Since late 2010, the current version of the specification is 4.3.

ICC has also published a preliminary specification for iccMAX, a next-generation color management architecture with significantly expanded functionality and a choice of colorimetric, spectral or material connection space.




  • colord - a system service that makes it easy to manage, install and generate color profiles to accurately color manage input and output devices.What colord does: Provides a D-Bus API for system frameworks to query, e.g. Get me the profiles for device $foo or Create a device and assign it profile $bar. Provides a persistent database backed store that is preserved across reboots. Provides the session for a way to set system settings, for instance setting the display profile for all users and all sessions.colord itself is a system activated daemon called colord. Being system activated means that it's only started when the user is using a text mode or graphical tool.GNOME Color Manager is the name of the graphical tools for colord to be used in the GNOME and KDE desktops. GNOME Color Manager and colord-kde act as a clients to colord.


  • ArgyllCMS - an ICC compatible color management system, available as Open Source under the AGPL. It supports accurate ICC profile creation for scanners, cameras and film recorders, and calibration and profiling of displays and RGB & CMYK printers.


  • dispcalGUI - Open Source Display Calibration and Characterization powered by Argyll CMS


  • Little CMS - intends to be an open source small-footprint color management engine, with special focus on accuracy and performance. It uses the International Color Consortium standard (ICC), which is the modern standard when regarding to color management.



  • https://en.wikipedia.org/wiki/3D_lookup_table - 3D lookup tables (3D LUTs) are used to map one color space to another. They are commonly used to calculate preview colors for a monitor or digital projector of how an image will be reproduced on another display device, typically the final digitally projected image or release print of a movie. A 3D LUT is a 3D lattice of output RGB color values that can be indexed by sets of input RGB colour values. Each axis of the lattice represents one of the three input color components and the input color thus defines a point inside the lattice. Since the point may not be on a lattice point, the lattice values must be interpolated; most products use trilinear interpolation.


Colour picker

  • xgrabcolor - a basic color picker, that allows to grab a color from any pixel on screen, display the corresponding colorname, to be used, for instance, in HTML pages, the color RGB and HSV values, as well as the color alpha channels. Each of these values can also be modified directly by the user in a synchronized way to generate new colors. Colors can be stored in a list, for later use.


Palette generation


Art

  • allRGB - The objective of allRGB is simple: To create images with one pixel for every RGB color (16777216); not one color missing, and not one color twice.

DTP

Scribus

Docs

other

OCR

Cross-stitch and knitting

Charts


  • Kroki! - provides a unified API with support for BlockDiag (BlockDiag, SeqDiag, ActDiag, NwDiag), C4 (with PlantUML), Ditaa, Erd, GraphViz, Mermaid, Nomnoml, PlantUML, SvgBob and UMLet... and more to come!

Graphviz



ditaa

  • ditaa - a small command-line utility written in Java, that can convert diagrams drawn using ascii art ('drawings' that contain characters that resemble lines like | / - ), into proper bitmap graphics. This is best illustrated by the following example -- which also illustrates the benefits of using ditaa in comparison to other methods :)

blockdiag

  • blockdiag - and its family generate diagram images from simple text files

Web



Other

Screenshot


  • Shutter is a feature-rich screenshot program. You can take a screenshot of a specific area, window, your whole screen, or even of a website – apply different effects to it, draw on it to highlight points, and then upload to an image hosting site, all within one window.


  • ScreenCloud - Take a screenshot using one of the 3 hotkeys or simply click the ScreenCloud tray icon.


Scanning

scanimage


Drawing

Xournal

  • Xournal - an application for notetaking, sketching, keeping a journal using a stylus. It is free software (GNU GPL) and runs on Linux (recent distributions) and other GTK+/Gnome platforms. It is similar to Microsoft Windows Journal or to other alternatives such as Jarnal, Gournal, and NoteLab.

Jarnal

  • Jarnal - an open-source application for notetaking, sketching, keeping a journal, making a presentation, annotating a document - including pdf - or collaborating using a stylus, mouse or keyboard. It is similar to Microsoft Windows Journal and to the earlier Mimeo whiteboarding and Palm notepad applications. There is also a commercial knockoff of Jarnal called PDF Annotator - for $50 you can enjoy a subset of the capabilities that Jarnal provides for free.


Gournal

  • Gournal - note-taking application written for usage on Tablet-PCs (such as the Toshiba M200). It’s designed for usage with a stylus, not a mouse or keyboard. It does not have handwriting recognition but can be used in co-ordination with xstroke to accept text. Gournal is written in perl using gtk2-perl so you will need gtk2-perl along with the gladexml and gnomecanvas modules of gtk2-perl. The pages are saved as gzipped SVG files (not totally standard yet but working on it)

NoteLab

  • NoteLab - brings the power of digital note taking to Linux, Windows, Mac OS X, and Solaris. Using NoteLab is just like writing with a pen on real paper.  However with NoteLab, the pen and paper are electronic, you never run out of ink, and you have all the paper you'll ever need. NoteLab is free software licensed under the GNU GPL.  Like Linux and Firefox, NoteLab and its full source code are available at no cost for anyone to view, analyze, scrutinze, and improve. NoteLab saves your notes in the industry standard SVG (Scalable Vector Graphic) format. Thus  any program that can understand this open, next-generation graphic format can be used to view NoteLab files. NoteLab can also print your notes or export them to a number of image types including PNG and JPEG. NoteLab allows the user to select en tire words, stretch them, move them, change their color, change their line width, delete them, and bring them back.  Simply speaking, NoteLab understands a stroke as a complex shape.  It doesn't just look at the page as a collection of ink on a page, but instead as a collection of words in a dynamic environment.

Skethpad

  • Sketchpad - online annotation, editing & design tool

WBO

Dotgrid

  • Dotgrid - a distractionless vector tool with line styles, corner controls, colours, grid-based tools, PNG and SVG export.The application is free and Open Source, and also available live to be used with your browser, on your Raspberry Pi, or on your mobile device.

Ronin

  • Ronin - a cross-over between Vim and Photoshop, meant to quickly render simple graphic tasks.Ronin is currently under development, it now includes basic digital painting functionalities.


Pencil2D

Inking

Upscaling


Deduplication


Other









  • https://github.com/google/butteraugli - a project that estimates the psychovisual similarity of two images. It gives a score for the images that is reliable in the domain of barely noticeable differences. Butteraugli not only gives a scalar score, but also a spatial map of the level of differences. [31]



  • Enfuse - PanoTools.org Wiki - command-line program used to merge different exposures of the same scene to produce an image that looks very much like a tonemapped image (without the halos) but requires no creation of an HDR image. Therefore it is much simpler to use and allows the creation of very large multiple exposure panoramas.



  • https://github.com/pugwonk/gif2xlsx - I worked for a long time in financial services, and I can tell you that one thing I got sick of hearing was "how do I convert animated GIFs into Excel files". If you're here wondering why nobody has yet exploited this gap in a very lucrative market, wonder no longer. Help is at hand.

Machine learning



to sort





Aliasing


Noise

  • The importance of good noise - There are many articles to read about noise functions in computer graphics, especially now that a lot of people recently got interested in ray tracing, but it took me a long time to fully understood why noise characteristics are so important and I didn’t find a good resource on the Internet explaining it, so I’ll give it a shot.

Glitch

  • r/unixporn: [i3lock - Glitched Screenlock with imagemagick and sox]

Synthesis

Evolutionary

  • Picbreeder - a collaborative art application based on an idea called evolutionary art, which is a technique that allows pictures to be bred almost like animals. For example, you can evolve a butterfly into a bat by selecting parents that look like bats.


Maching learning

  • Ganbreeder - a collaborative art tool for discovering images. Images are 'bred' by having children, mixing with other images and being shared via their URL. This is an experiment in using breeding + sharing as methods of exploring high complexity spaces. GAN's are simply the engine enabling this. Ganbreeder is very similar to, and named after, Picbreeder. It is also inspired by an earlier project of mine Facebook Graffiti which demonstrated the creative capacity of crowds.

Engine

See also Creative / live coding, 3D / CAD

Web gallery

  • OpenPhoto is an Open Source photo sharing platform which gives users complete ownership and portability of their photos. Users’ photos, tags and comments are seamlessly stored into personally owned cloud services owned by themselves. Whatever they want to do or wherever they want to go their photos are free to go with them.



  • Colorbox - A lightweight customizable lightbox plugin for jQuery







Services

Hosting

Design

Graphic designers

Graffiti

  • #000000book - An open database for Graffiti Markup Language (GML) files

Testing


Pixel art