MarkOn is on Test Flight public test.
MarkOn is an iOS and macOS Photos extension and helper app written in swift that includes a variety of interesting Core Image filters (CIFilter).
It has been test on iOS 18 and macOS 15.0.
- Privacy-Focused: MarkOn prioritizes your privacy. Perform all edits within the Photos app without leaving it, making it perfect for handling private photos.
- Comprehensive CIFilters: A wide range of Core Image filters included.
- Seamless Integration: Easily integrates as a photo extension for quick edits.
- Open the project in Xcode.
- Change to your valid team in Signing & Capabilities.
- Run the MarkOn target for iOS or macOS.
- The MarkOn extension will appear in the Photos app after building the app once.
- You may also run the MarkOn extension target for iOS/macOS, then choose the Photos app.
- Open the Photos app.
- Select a photo and choose Edit.
- Tap on the Extensions button.
- Select MarkOn to apply filters.
- The original photo is always kept, you just need to tap "revert back to orginal" on the edit field to remove the filtered changes.
- The app does not request access to your photo library.
- You can drag and drop or copy and paste images into the app. It works on both iOS and macOS.
MarkOn includes the following Core Image filters:
- CISepiaTone
- CIBloom
- CIComicEffect
- CIPhotoEffectNoir
- CICrystallize
- CIPointillize
- CIPixellate
- CIVignette
- CIColorMonochrome
- CIColorInvert
- CIBokehBlur
- CIGaussianBlur
- CIMorphologyMaximum
- CIPhotoEffectTonal
- CIColorPosterize
- CIGlassDistortion
- CICircularScreen
- CICMYKHalftone
- CIDotScreen
- CIHatchedScreen
- CILineScreen
- CICannyEdgeDetection (only available on iOS 17 and above)
- CIEdges
- CIGloom
- CIGaborGradients
- CIHexagonalPixellate
- CILineOverlay
- CISobelGradients
- CIXRay
- CIScratchyFilm (https://developer.apple.com/documentation/coreimage/simulating_scratchy_analog_film#2953507)
You can easily add more filters in CIFilterEffect.swift
.
Here's an example of how to define a filter in MarkOn:
static let sepia = MarkonEffect(
id: "CIFilter_Sepia",
name: "Sepia",
sliders: [
SliderInfo(name: "Intensity", range: 0.0...1.0, step: 0.1, value: 0.8)
],
cifilterProvider: { effect in
guard let filter = CIFilter(name: "CISepiaTone") else { return nil }
filter.setValue(effect.params[0], forKey: kCIInputIntensityKey)
return filter
}
)
Contributions are welcome! I am especially interested in other custom CIFilters and coreMLModelFilter that use Core ML models. Let me know if you have any suggestions. Enjoy!
This project is licensed under the MIT License.
Important: If you use this code in your project, you must include a link back to this GitHub repository.
Creating Photo Editing Extensions. Build Image and Video Style Transfer models in Create ML.