  from plugins.extract.pipeline import Extractor, ExtractMedia
  from scripts.fsmedia import Alignments, PostProcess, finalize
  
  
  # tqdm.monitor_interval = 0  # workaround for TqdmSynchronisationWarning  # TODO?
  logger = logging.getLogger(__name__)  # pylint: disable=invalid-name
  
 
</s> remove tqdm.monitor_interval = 0  # workaround for TqdmSynchronisationWarning
 </s> add # tqdm.monitor_interval = 0  # workaround for TqdmSynchronisationWarning  # TODO? </s> remove from lib.image import encode_image, generate_thumbnail, ImagesLoader, ImagesSaver
 </s> add from lib.image import encode_image, generate_thumbnail, ImagesLoader, ImagesSaver, read_image_meta </s> remove     from lib.align import DetectedFace
 </s> add  </s> remove from lib.align import AlignedFace
 </s> add from lib.align import AlignedFace, DetectedFace
from lib.image import read_image_meta
if TYPE_CHECKING:
    from lib.align.alignments import PNGHeaderAlignmentsDict
  from plugins.extract.pipeline import Extractor, ExtractMedia
  from scripts.fsmedia import Alignments, PostProcess, finalize
  
if TYPE_CHECKING:
    from lib.align.alignments import PNGHeaderAlignmentsDict
  
  # tqdm.monitor_interval = 0  # workaround for TqdmSynchronisationWarning  # TODO?
  logger = logging.getLogger(__name__)  # pylint: disable=invalid-name
  
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 
scripts/extract.py