Dave Goldman
Dave Goldman

Reputation: 2257

Up-to-date list of built-in Core Image filters?

Apple's Core Image Filter Reference, which describes all of the built-in CIFilters, is marked as "no longer being updated".

Looks like it was last updated in 2016. Since then, WWDC videos for 2017 and 2018 have announced additional filters (which, indeed, don't appear on this page).

Does anybody know of a more up-to-date list of built-in Core Image filters?

(Question has also been asked, but so far not answered, on the Apple Dev Forum.)

Upvotes: 2

Views: 1771

Answers (2)

Noah Gilmore
Noah Gilmore

Reputation: 1389

I've created a website called CIFilter.app which lists all the built-in CIFilters and a companion app which you can use to try the filters out if you like. This should have all the up to date CIFilter information - I've updated it for iOS 13 and intend to continue to keep it updated.

More info about the project is available in this blog post.

As of the last time these were generated (~2022) here's the list:

CIBokehBlur

CIBoxBlur

CIDepthBlurEffect

CIDiscBlur

CIGaussianBlur

CIMaskedVariableBlur

CIMedianFilter

CIMorphologyGradient

CIMorphologyMaximum

CIMorphologyMinimum

CIMorphologyRectangleMaximum

CIMorphologyRectangleMinimum

CIMotionBlur

CINoiseReduction

CIZoomBlur

CIColorAbsoluteDifference

CIColorClamp

CIColorControls

CIColorMatrix

CIColorPolynomial

CIColorThreshold

CIColorThresholdOtsu

CIDepthToDisparity

CIDisparityToDepth

CIExposureAdjust

CIGammaAdjust

CIHueAdjust

CILinearToSRGBToneCurve

CISRGBToneCurveToLinear

CITemperatureAndTint

CIToneCurve

CIVibrance

CIWhitePointAdjust

CIColorCrossPolynomial

CIColorCube

CIColorCubeWithColorSpace

CIColorCubesMixedWithMask

CIColorCurves

CIColorInvert

CIColorMap

CIColorMonochrome

CIColorPosterize

CIDither

CIDocumentEnhancer

CIFalseColor

CILabDeltaE

CIMaskToAlpha

CIMaximumComponent

CIMinimumComponent

CIPaletteCentroid

CIPalettize

CIPhotoEffectChrome

CIPhotoEffectFade

CIPhotoEffectInstant

CIPhotoEffectMono

CIPhotoEffectNoir

CIPhotoEffectProcess

CIPhotoEffectTonal

CIPhotoEffectTransfer

CISepiaTone

CIThermal

CIVignette

CIVignetteEffect

CIXRay

CIAdditionCompositing

CIColorBlendMode

CIColorBurnBlendMode

CIColorDodgeBlendMode

CIDarkenBlendMode

CIDifferenceBlendMode

CIDivideBlendMode

CIExclusionBlendMode

CIHardLightBlendMode

CIHueBlendMode

CILightenBlendMode

CILinearBurnBlendMode

CILinearDodgeBlendMode

CILuminosityBlendMode

CIMaximumCompositing

CIMinimumCompositing

CIMultiplyBlendMode

CIMultiplyCompositing

CIOverlayBlendMode

CIPinLightBlendMode

CISaturationBlendMode

CIScreenBlendMode

CISoftLightBlendMode

CISourceAtopCompositing

CISourceInCompositing

CISourceOutCompositing

CISourceOverCompositing

CISubtractBlendMode

CIBumpDistortion

CIBumpDistortionLinear

CICameraCalibrationLensCorrection

CICircleSplashDistortion

CICircularWrap

CIDisplacementDistortion

CIDroste

CIGlassDistortion

CIGlassLozenge

CIHoleDistortion

CILightTunnel

CINinePartStretched

CINinePartTiled

CIPinchDistortion

CIStretchCrop

CITorusLensDistortion

CITwirlDistortion

CIVortexDistortion

CIAttributedTextImageGenerator

CIAztecCodeGenerator

CIBarcodeGenerator

CICheckerboardGenerator

CICode128BarcodeGenerator

CIConstantColorGenerator

CILenticularHaloGenerator

CIMeshGenerator

CIPDF417BarcodeGenerator

CIQRCodeGenerator

CIRandomGenerator

CIRoundedRectangleGenerator

CIStarShineGenerator

CIStripesGenerator

CISunbeamsGenerator

CITextImageGenerator

CIAffineTransform

CIBicubicScaleTransform

CICrop

CIEdgePreserveUpsampleFilter

CIKeystoneCorrectionCombined

CIKeystoneCorrectionHorizontal

CIKeystoneCorrectionVertical

CILanczosScaleTransform

CIPerspectiveCorrection

CIPerspectiveRotate

CIPerspectiveTransform

CIPerspectiveTransformWithExtent

CIStraightenFilter

CIGaussianGradient

CIHueSaturationValueGradient

CILinearGradient

CIRadialGradient

CISmoothLinearGradient

CICMYKHalftone

CICircularScreen

CIDotScreen

CIHatchedScreen

CILineScreen

CIAreaAverage

CIAreaHistogram

CIAreaMaximum

CIAreaMaximumAlpha

CIAreaMinMax

CIAreaMinMaxRed

CIAreaMinimum

CIAreaMinimumAlpha

CIColumnAverage

CIHistogramDisplayFilter

CIKMeans

CIRowAverage

CISharpenLuminance

CIUnsharpMask

CIBlendWithAlphaMask

CIBlendWithBlueMask

CIBlendWithMask

CIBlendWithRedMask

CIBloom

CIComicEffect

CIConvolution3X3

CIConvolution5X5

CIConvolution7X7

CIConvolution9Horizontal

CIConvolution9Vertical

CICoreMLModelFilter

CICrystallize

CIDepthOfField

CIEdgeWork

CIEdges

CIGaborGradients

CIGloom

CIHeightFieldFromMask

CIHexagonalPixellate

CIHighlightShadowAdjust

CILineOverlay

CIMix

CIPixellate

CIPointillize

CISaliencyMapFilter

CISampleNearest

CIShadedMaterial

CISpotColor

CISpotLight

CIAffineClamp

CIAffineTile

CIClamp

CIEightfoldReflectedTile

CIFourfoldReflectedTile

CIFourfoldRotatedTile

CIFourfoldTranslatedTile

CIGlideReflectedTile

CIKaleidoscope

CIOpTile

CIParallelogramTile

CIPerspectiveTile

CISixfoldReflectedTile

CISixfoldRotatedTile

CITriangleKaleidoscope

CITriangleTile

CITwelvefoldReflectedTile

CIAccordionFoldTransition

CIBarsSwipeTransition

CICopyMachineTransition

CIDisintegrateWithMaskTransition

CIDissolveTransition

CIFlashTransition

CIModTransition

CIPageCurlTransition

CIPageCurlWithShadowTransition

CIRippleTransition

CISwipeTransition

CIGuidedFilter

Upvotes: 8

user7014451
user7014451

Reputation:

I created a small project to query an iOS device and (1) list out all available filters and (2) list everything about each input attributes. This project can be found here.

The relevant code:

var ciFilterList = CIFilter.filterNames(inCategories: nil)

This line creates a [String] of all available filters. If you only wish for all available filters of category "CICategoryBlur", replace the nil with it.

print("=======")
print("List of available filters")
print("-------")
for ciFilterName in ciFilterList {
    print(ciFilterName)
}
print("-------")
print("Total: " + String(ciFilterList.count))

Pretty self-explanatory. When I ran this on an iPad mini running iOS 12.0.1, 207 filters were listed. NOTE: I have never tried this on macOS, but since it really doesn't use UIKit I believe it will work.

let filterName = "CIZoomBlur"
let filter = CIFilter(name: filterName)
print("=======")
print("Filter Name: " + filterName)
let inputKeys = filter?.inputKeys
if inputKeys?.count == 0 {
   print("-------")
   print("No input attributes.")
} else {
   for inputKey in inputKeys! {
       print("-------")
       print("Input Key: " + inputKey)
       if  let attribute = filter?.attributes[inputKey] as? [String: AnyObject],
           let attributeClass = attribute[kCIAttributeClass] as? String,
           let attributeDisplayName = attribute["CIAttributeDisplayName"] as? String,
           let attributeDescription = attribute[kCIAttributeDescription] as? String {
               print("Display name: " + attributeDisplayName)
               print("Description: " + attributeDescription)
               print("Attrbute type: " + attributeClass)
               switch attributeClass {
               case "NSNumber":
                   let minimumValue = (attribute[kCIAttributeSliderMin] as! NSNumber).floatValue
                   let maximumValue = (attribute[kCIAttributeSliderMax] as! NSNumber).floatValue
                   let defaultValue = (attribute[kCIAttributeDefault] as! NSNumber).floatValue
                   print("Default value: " + String(defaultValue))
                   print("Minimum value: " + String(minimumValue))
                   print("Maximum value: " + String(maximumValue))
               case "CIColor":
                   let defaultValue = attribute[kCIAttributeDefault] as! CIColor
                   print(defaultValue)
               case "CIVector":
                   let defaultValue = attribute[kCIAttributeDefault] as! CIVector
                   print(defaultValue)
               default:
                   // if you wish, just dump the variable attribute to look at everything!
                   print("No code to parse an attribute of type: " + attributeClass)
                   break
               }
           }
       }
   }
}
print("=======")

Again, fairly self-explanatory. The app I'm writing only works with filters using a single CIImage and with attributes restricted to NSNumber, CIColor, and CIVector, so things will fall to the default part of the switch statement. However, it should get you started! If you wish to see the "raw" version, jut look at the attribute variable.

Finally, I'd recommend something developed by Simon Gladman called Filterpedia. It's an iPad app (restricted to landscape) that allows you to experiment with pretty much all available filters along with all attributes with default/max/min values. Be aware of two things though. (1) It's written in Swift 2, but the is a Swift 4 fork here. (2) There are also numerous custom filters using custom CIKernels.

Upvotes: 5

Related Questions