Creating Frame Processor Plugins
Expose your Frame Processor Plugin to JS​
To make the Frame Processor Plugin available to the Frame Processor Worklet Runtime, create the following wrapper function in JS/TS:
import { VisionCameraProxy, Frame } from 'react-native-vision-camera'
const plugin = VisionCameraProxy.initFrameProcessorPlugin('scanFaces')
/**
 * Scans faces.
 */
export function scanFaces(frame: Frame): object {
  'worklet'
  if (plugin == null) throw new Error('Failed to load Frame Processor Plugin "scanFaces"!')
  return plugin.call(frame)
}
Test it!​
Simply call the wrapper Worklet in your Frame Processor:
function App() {
  const frameProcessor = useFrameProcessor((frame) => {
    'worklet'
    const faces = scanFaces(frame)
    console.log(`Faces in Frame: ${faces}`)
  }, [])
  return (
    <Camera frameProcessor={frameProcessor} {...cameraProps} />
  )
}
Next Steps​
If you want to distribute your Frame Processor Plugin, simply use npm.
- Create a blank Native Module using bob or create-react-native-module
- Name it vision-camera-plugin-xxxxxwherexxxxxis the name of your plugin
- Remove the generated template code from the Example Native Module
- Add VisionCamera to peerDependencies:"react-native-vision-camera": ">= 3"
- Implement the Frame Processor Plugin in the iOS, Android and JS/TS Codebase using the guides above
- Publish the plugin to npm. Users will only have to install the plugin using npm i vision-camera-plugin-xxxxxand add it to theirbabel.config.jsfile.
- Add the plugin to the **official VisionCamera plugin list for more visibility