This blog is a companion to the Filter Magic app I wrote. The app runs on Mac OS and lets you explore and play with every single Core Image filter that exists (a.k.a. CIFIlter). The app provides a lot of useful hints and examples, but I felt you might benefit from some additional information which you will find in this blog.

I had a lot of fun writing the FilterMagic app, as well as a fair amount of frustration. Given the scarcity of documentation I had to figure out many things on my own through a lot of trial and error and the detective work of connecting the dots between disparate pieces of information scattered around the Internet. In many cases I had to figure out not only how to do it but what the expected result should be, why does that filter even exist? E.g. some filters are only meant to be used in combination with others and the only way to validate if it was applied correctly is to run its output through the filters it’s supposed to be combined with.

Needless to say that I’ve learned a lot through that process. And I wouldn’t be able to do it if there were no developers out there who have gone through the struggle already and were willing to share their knowledge with the community. Now it’s my turn to share what I learned and that’s what this blog is about. 

I’ll take it filter by filter, starting with the most challenging or the most interesting ones. For each filter there is an overview post where I explain the filter’s purpose, common use cases and provide detailed description of its inputs. You can also see how the filter can be used in practice by downloading a sample project written in Swift UI. A separate post contains complete walk through of the source code for those who are interested to follow me along while writing it from scratch.

DISCLAIMER. Since there is very little official documentation to refer to, and the knowledge I am going to share for the most part came through experimentation, I might have gotten some things wrong. There could be gaps in my assumptions or lack of understanding which might have led me in the wrong direction. I’ll be more than happy to stay corrected if that’s the case. So any constructive feedback or criticism is totally welcome.