          A list of :class:`~lib.align.DetectedFace` objects. Detected faces can be added
          later with :func:`add_detected_faces`. Setting ``None`` will default to an empty list.
          Default: ``None``
      """
  
      def __init__(self,
                   filename: str,
 
</s> remove         The original frame
 </s> add         The original frame or a faceswap aligned face image </s> remove     def frame_metadata(self) -> dict:
 </s> add     def is_aligned(self) -> bool:
        """ bool. ``True`` if :attr:`image` is an aligned faceswap image otherwise ``False`` """
        return self._is_aligned

    @property
    def frame_metadata(self) -> "PNGHeaderSourceDict": </s> remove         Checks against `extract_every_n` and the existence of alignments data (can exist if
        `skip_existing` or `skip_existing_faces` has been provided) and compiles a list of frame
        indices that should not be processed, providing these to :class:`lib.image.ImagesLoader`.
 </s> add     @classmethod
    def _validate_inputs(cls,
                         filter_files: Optional[Union[str, List[str]]],
                         nfilter_files: Optional[Union[str, List[str]]]) -> Tuple[List[str],
                                                                                  List[str]]:
        """ Validates that the given filter/nfilter files exist, are image files and are unique

        Parameters
        ----------
        filter_files: str, list or ``None``
            The list of filter file(s) passed in as command line arguments
        nfilter_files: str, list or ``None``
            The list of nfilter file(s) passed in as command line arguments

        Returns
        -------
        filter_files: list
            List of full paths to filter files
        nfilter_files: list
            List of full paths to nfilter files </s> remove         image: bytes
            The encoded image to be saved
 </s> add         image: bytes or :class:`numpy.ndarray`
            The encoded image or numpy array to be saved
    is_aligned: bool, optional
        ``True`` if the :attr:`image` is an aligned faceswap image otherwise ``False``. Used for
        face filtering with vggface2. Aligned faceswap images will automatically skip detection,
        alignment and masking. Default: ``False``
          A list of :class:`~lib.align.DetectedFace` objects. Detected faces can be added
          later with :func:`add_detected_faces`. Setting ``None`` will default to an empty list.
          Default: ``None``
    is_aligned: bool, optional
        ``True`` if the :attr:`image` is an aligned faceswap image otherwise ``False``. Used for
        face filtering with vggface2. Aligned faceswap images will automatically skip detection,
        alignment and masking. Default: ``False``
      """
  
      def __init__(self,
                   filename: str,
keep keep add keep keep keep keep
 Update Face Filter
  - Remove old face filter
  - plugins.extract.pipeline: Expose plugins directly
  - Change `is_aligned` from plugin level to ExtractMedia level
  - Allow extract pipeline to take faceswap aligned images
  - Add ability for recognition plugins to accept aligned faces as input
  - Add face filter to recognition plugin
  - Move extractor pipeline IO ops to own class 
plugins/extract/pipeline.py