Core Image: From CIImage to Metal and Beyond |

Core Image is an oft-overlooked first-party framework on Apple platforms for the efficient processing of images and videos. It includes a wide range of built-in filters, as well as the ability to build your own custom filters using Metal. Discover how to integrate Core Image into your own apps, and how the optimized image processing can save your users time and battery life. Learn how to perform real-time video processing, and how you can extend Core Image by implementing your own custom filters directly in Metal.

This is a companion discussion topic for the original entry at

Hey Sam, good timing with the tutorial. It’s nice to dig in the CI pipeline, been meaning to do it for a few years now. Good work only the introductory tutorial.

Hi @peter.suwara

I hope that you enjoy the rest of the course too, and find some uses for CoreImage in your work.


I was just trying to move a bunch of CPU image manipulation code to GPU and looking for a way to do that with Metal shaders + textures for a Core ML solution.

This was a perfect match :+1:

1 Like

So happy to hear it. Glad it was useful, and best of luck with your project.


Hi I wanted to follow this pro course, I have a few questions if you can help?.
In this tutorial, is there a way to add multiple filters on live camera??

Hi @niraj0107

Yes, absolutely! The first part of the course takes a look at how filters work, and how to chain them together (i.e. adding multiple filters).

The final part of the course shows how to add filters to a live camera image, and show it on the screen.

The section about creating Metal filters probably won’t be applicable to you, but shows how you can extend the built-in filters with your own custom ones.

Hope that helps—good luck!


Not sure if this is still being watched but I ran into an issue while going through this Tutorial. When I attempt to initialize the the kernel as shown in Part 3 Video 2 the fatal error is thrown because the CIColorKernel can not be created. Is there a way to get a more descriptive error as I am not sure where to start troubleshooting this issue.

Hi @trhenrylewis

I’m sorry, I’ve not really looked at this code for a while, so don’t really have the ability to offer much advice. I think taking a look back through release notes of Core Image to make sure that nothing major has changed in the API of CIColorKernel would be a start. And then reviewing carefully the kernel code being used. Maybe try to create simpler passthrough kernels first until the point it breaks.

Sorry to not be of much assistance. Best of luck.