Node Based Image Editor

Node Based Image Editor
Node Based Image Editor

Akshit Bansal has recently created a Node Based Image Editor. He is a second year COE student at Delhi Technological University (DTU). He is currently pursuing Data Structures and Algorithms Course in C++ and Competitive Programming in C++ course at Coding Ninjas.

Why did you choose this project topic and what was your inspiration behind it?

Before coding, I was doing video editing and had explored a lot of software. One of them was Nuke (a node-based video editor) which completely blew my mind. After using it, I realised how powerful it was as compared to others which generally people use. After coding, I have the power to develop the tools I want. This previous interest made me curious about image processing and how it all of it really works.

Tell us in detail about your project (its name), its features, the total number of users and downloads.

My project’s name is a Node Based Image Editor. Unlike most of the commercially available Image Editors like Photoshop, my editor uses the node-based compositing workflow unlike the layer-based (like in Photoshop). In this approach, each modification and in fact the image itself is represented as a graph node. This is node-based compositing, which represents an entire composite as a directed unweighted graph, linking media objects and effects in a procedural map, intuitively laying out the progression from source input to final output.

This type of compositing interface allows great flexibility, including the ability to modify parameters of an earlier image processing step while viewing the final composite. Features like saturation, contrast, blur, rotation, crop, scale, mirror, gamma correction, shuffle (re-arrangement of individual color channels) have been added.

These modifications can be done on it via creating their corresponding nodes and connecting it to the stream. Even to view the image stream, you need a viewer node. I have thought of many more features which I will add in the future such as image operations like add and multiply and input v/s output graphing features. In fact, another update is about to release which involves major UI changes which include convenient edge creation.

His project is available for Windows, Linux and macOS. It can be downloaded from the releases page on his Github repository. He has made a detailed ReadMe on Github about this project which involves how to use it.

These are the types of nodes which you can create in this editor:

  • Read node: Reads the image file from your system.
  • View node: Provides a viewer window to view the image stream. The viewer windows also give the ability to view the individual colour channels. 
  • Write node: To save the modified image with desired quality factor.

All the other nodes are image transformation nodes.

  • Grade node: Used to define the black points and white points of the image.
  • Gamma node: Applies a constant gamma value to the image. This affects the mid-tones of the image.
  • Saturate node: Alters the intensity or purity of colour as displayed in an image. The higher the saturation of a colour, the more vivid and intense it is. The lower a colour’s saturation, the closer it is to pure grey on the grayscale.
  • Contrast node: To alter the difference in brightness between objects or regions. High contrast photos pop out, show textures in the subject and give a feeling of edginess, high energy and strength.
  • Blur node: Adds box blur to the image with the specified radius.
  • Crop node: Crops it to the specified coordinates.
  • Scale node: Scales it to the specified resolution.
  • Rotate node: Rotates the image with the specified angle in degrees.
  • Mirror node: Mirrors it across the horizontal as well as the vertical axis.
  • Shuffle node: Shuffle node rearranges different colour channels of the image into other colour channels.

He used the Qt framework for C++ for creating this project. Qt is a free and open-source widget toolkit for creating graphical user interfaces as well as cross-platform applications that run on various software and hardware platforms such as Linux, Windows, macOS, Android or embedded systems with little or no change in the underlying codebase while still being a native application with native capabilities and speed.

Are you excited about creating your own application? Check out more stories here.