Imageflow_ex - FFI bindings to a blazing fast Rust-based processing tool, along with a proper Elixir-style API

I just released the first working version of imageflow_ex, a package that provides bindings and a custom API to imageflow, which is a Rust-based image processing tool

Imageflow itself has incredible benchmarks when comparing to vips & imagemagick

I also took some time to implement a proper Elixir-style API, that makes image processing look very similar to Elixir Streams. One example:

alias Imageflow.Graph
|> Graph.decode_file(@input_path)
|> Graph.branch(fn graph ->
  # 2160px wide image for retina displays graph
  |> Graph.constrain(2160, nil)
  |> Graph.encode_to_file("desktop@2x.png")
|> Graph.branch(fn graph ->   # 1080px wide image for desktop
  |> Graph.constrain(1080, nil)
  |> Graph.encode_to_file("desktop.png")
|> Graph.branch(fn graph ->   # 600px wide image for mobile
  |> Graph.constrain(600, nil)
  |> Graph.encode_to_file("mobile.png")

Just remember that it is AGPL licensed, so most project will not be able to use that library (at least without paying for ImageFlow).


Yes, I’m aware of that. The use case that led me to find imageflow is a nice fit.

Your comment also made me realise that I forgot to choose a proper license for this, and had published it with the same ISC license that I had when I copy/pasted the mix boilerplate from another project. So thanks for that :slight_smile:
I now changed this to AGPL as well, to prevent any confusions about licensing


Well, now it is impossible to use by the paying users of ImageFlow :wink: I think that dual licensing ISC/AGPL would do. Open source clients can use AGPL version and paying users can use ISC one (open source clients cannot use ISC as it would make it impossible to release as you cannot include AGPL code into code on other licenses).

@hauleth sorry, I completely missed your comment until now.
I don’t have much experience around software licenses (and I honestly gave up on trying to understand them a long time ago)
do you have any specific suggestion on how it could work for this repo so that it serves both cases? Is dual licensing an actual thing?

Yes, there is a lot of projects that use that approach:

  • ImageFlow (as mentioned above)
  • Qt
  • FFTW
  • MySQL
  • jOOQ
  • Nmap
  • MongoDB

The way “how it would work” is simply writing:

This project is licensed as AGPLv3 or ISC (your choice). Beware that the latter requires you to purchase commercial ImageFlow license.

And now you are covered. Anyone who would purchase ImageFlow will be able to use your project in non-AGPL project (as they are able to pick ISC license) and you are complying with AGPLv3 of the ImageFlow.

I am pretty sure that if you will write to the ImageFlow team then they will be keen to help you with licensing questions, and maybe they will also promote it on the official website.