Skip to content
jmcastelo edited this page Nov 28, 2025 · 15 revisions

Fosforo logo

Welcome to the fósforo wiki!

On these pages you will find information related to fósforo and its original source of inspiration: video feedback.

What is video feedback?

Imagine you had a video camera and a television, connected in such a way that the television displays what the camera is capturing. If you pointed the camera directly to the television, what would the television display? Actually you would have created a video feedback loop. Depending on parameters like the camera zoom, brightness or contrast, different kinds of images would result. For instance, you could see a television containing a smaller television, containing in turn another television, and so on...

What is fósforo?

It is an interactive tool to simulate video feedback. It does not restrict itself to two image processing elements (camera and television), but tries to be more flexible by giving the user the possibility to add image operations on a canvas and connect them as the user wants. An operation can be thought of as a kind of image filter, usually characterized by several parameters, which processes an input image and produces a modified output image. These operations are represented by nodes of a graph. The connections are represented by the edges of the graph and are unidirectional. Multiple inputs and outputs to a node are possible, and loops can be formed as well. Special seed nodes provide input from images or video so that there is initial material to be processed.

Features

Image operations

  • A predefined collection comes bundled with fósforo.
  • They can be edited (with a bit of GLSL knowledge).
  • New operations can be created from scratch (GLSL knowledge again desirable).
  • Can be added, removed, inserted, replaced, copied and pasted.
  • An operation is represented on the canvas by a node (an operation widget).
  • Nodes can be connected between each other, forming any kind of topology.

Parameters

  • An operation can have adjustable parameters (like brightness or angle of rotation).
  • Users can modify the values of parameters through associated control widgets.
  • Parameter control widgets belong to an operation node.
  • A MIDI control surface can be used to modify parameter values (no need to use keyboard or mouse!).
  • Technically, a parameter corresponds to a GLSL uniform or array of uniforms.

Seeds

  • Can be connected to image operations to provide input.
  • Several types of inputs exist:
    • Color and grayscale randomly generated pixels.
    • Images loaded by the users.
    • Frames from connected video input devices, such as webcams.

Input/output

  • Save and load operations and configurations.
  • Take screenshots.
  • Record video to a file using several formats.
  • Detect and connect video input devices.
  • Detect and connect MIDI controllers.

Computations and plots

  • Represent each pixel's (R,G,B) color coordinates in a 3D space in real time for all pixels.
  • Plot trajectories of selected pixels in this 3D color space.

Future features

To do

  • Display new RGB plots and visualizations.
    • "3D RGB Height plot": show image on the Z=0 plane and over each pixel with coordinates $(x,y,0)$, plot its RGB components as points $(x,y,R(x,y))$, $(x,y,G(x,y))$ and $(x,y,B(x,y))$.
    • "Finite-differences plot": both 1st and 2nd order differences of each component for all pixels.
    • "Phase-space plot": represent on a plane $(R_i(x,y), R_i(x,y) - R_{i-1}(x,y))$, and for G and B components too.
    • "Nearest-neighbors plot": for selected image pixels, join RGB vector with its nearest neighbor RGB points.
    • Visualizations: "polar-fan" (with variable inner radius), "temporal fade-out".
  • Compute and represent magnitudes to evaluate spatial and temporal complexity of images.
    • Information entropy: both spatial and temporal.
    • Gradient entropy: to quantify spatial pattern complexity.
    • Edge content.
    • See references below.

Current state of the project

Fósforo is yet in a premature alpha version, so it is being actively developed. You are encouraged to try it! At the moment you must clone its repository or download it, and compile it yourself to be able to play with it. Pre-compiled binaries ready to be run will be released in the future.

Technical data

Fósforo is written in C++. We have used the Qt6 libraries for the GUI and libremidi for the MIDI interaction. As for the image-processing part, we use OpenGL and its GLSL language to code each operation.

Bibliography and links

Books

References

  • "Entropy of an image", StackExchange, 2016
  • "Reflections on Shannon Information: In search of a natural information-entropy for images", Larkin, 2016
  • "Slope Entropy: A New Time Series Complexity Estimator Based on Both Symbolic Patterns and Amplitude Information", Cuesta-Frau, 2021
  • "Deep Learning and Entropy-Based Texture Features for Color Image Classification", Lhermitte et al, 2022
  • "Dude, everyone wants pattern analysis tools (DEWPAT): Tools for measuring visual pattern complexity from digital images", Sanderson et al., 2025
  • "Gradient Entropy (GradEn): The Two-dimensional Version of Slope Entropy for Image Analysis", Jiang and Shang, 2025
  • "Enhancing Classification Results of Slope Entropy Using Downsampling Schemes", Moltó-Gallego et al, 2025

Links

License

This software is open source and available under the GPLv3 License.


Fosforo logo