              load_queue.put(item)
          load_queue.put("EOF")
          logger.debug("Load Images: Complete")
  
      def _reload(self, detected_faces: dict[str, ExtractMedia]) -> None:
          """ Reload the images and pair to detected face
  
          When the extraction pipeline is running in serial mode, images are reloaded from disk,
          paired with their extraction data and passed back into the extraction queue
  
 
</s> remove         Penalized loss expects the target mask to be included for all outputs in the 4th channel
        of the targets. Any additional masks are placed into subsequent channels for extraction
        by the relevant loss functions.
 </s> add     def generate_preview(self,
                         is_timelapse: bool = False) -> Dict[Literal["a", "b"], List[np.ndarray]]:
        """ Generate the images for preview window or timelapse </s> remove     def _compile_mask_targets(self, targets, masks, additional_masks):
        """ Compile the masks into the targets for penalized loss and for targeted learning.
 </s> add         return model_inputs, model_targets </s> remove                 self._threaded_redirector("reload", detected_faces)
        if not self._args.skip_saving_faces:
 </s> add                 self._threaded_redirector("reload", (detected_faces, ))
        if saver is not None: </s> remove     def _output_faces(self, saver: ImagesSaver, extract_media: ExtractMedia) -> None:
 </s> add     def _output_faces(self, saver: Optional[ImagesSaver], extract_media: ExtractMedia) -> None: </s> remove         filename: str
            The file path for the current image
        detected_face: :class:`lib.align.DetectedFace`
            The detected face object that holds the masks
 </s> add         filenames: list
            List of full paths to image file names for a single batch
        images: :class:`numpy.ndarray`
            The batch of faces corresponding to the filenames
        detected_faces: list
            List of :class:`~lib.align.DetectedFace` objects with aligned data and masks loaded for
            the current batch
        batch: :class:`numpy.ndarray`
            The pre-allocated batch with images and masks populated for the selected coverage and
            centering
    def _reload(self, detected_faces: Dict[str, ExtractMedia]) -> None:
              load_queue.put(item)
          load_queue.put("EOF")
          logger.debug("Load Images: Complete")
  
    def _reload(self, detected_faces: Dict[str, ExtractMedia]) -> None:
          """ Reload the images and pair to detected face
  
          When the extraction pipeline is running in serial mode, images are reloaded from disk,
          paired with their extraction data and passed back into the extraction queue
  
keep keep keep keep replace keep keep keep keep keep
 Data Augmentation update (#1263)

- lib.detected_face
    - Subclass Masks for Landmark based masks
    - Add training mask propery + methods to DetectedFace
  - lib.training_training
    - subclass TrainingDataGenerator for training and preview data
    - Split cache into own module
    - Reduce thread count to 1 to prevent image corruption + data re-use
    - Process on largest model input/output size rather than stored image size
    - Size and crop masks during caching stage
    - Implement ring buffer for data flow
    - Fix preview reload bug
  - augmentation
    - typing
    - switch color aug order
    - better initialization
    - Fix warp + landmark warp to correctly apply at different image scales
    - Slightly improved warp caching
    - Don't store whether image is_preview. Handle all data as training images implicitly
  - plugins.trainer: Typing and fixes to work with trainingdata refactor 
scripts/extract.py