  from lib import Serializer
  from lib.convert import Converter
  from lib.faces_detect import DetectedFace
  from lib.multithreading import MultiThread, PoolProcess, total_cpus
  from lib.queue_manager import queue_manager, QueueEmpty
  from lib.utils import get_folder, get_image_paths, hash_image_file
  from plugins.extract.pipeline import Extractor
  from plugins.plugin_loader import PluginLoader
  
  logger = logging.getLogger(__name__)  # pylint: disable=invalid-name
 
</s> remove     def patch_iterator(self, processes):
        """ Prepare the images for conversion """
        out_queue = queue_manager.get_queue("out")
        completed = 0

        while True:
            try:
                item = out_queue.get(True, 1)
            except QueueEmpty:
                self.check_thread_error()
                continue
            self.check_thread_error()

            if item == "EOF":
                completed += 1
                logger.debug("Got EOF %s of %s", completed, processes)
                if completed == processes:
                    break
                continue

            logger.trace("Yielding: '%s'", item[0])
            yield item
        logger.debug("iterator exhausted")
        return "EOF"

 </s> add  </s> remove         self.frame_ranges = self.get_frame_ranges()
        self.writer = self.get_writer()
 </s> add  </s> remove         minmax = {"min": 0,  # never any frames less than 0
                  "max": float("inf")}
        retval = [tuple(map(lambda q: minmax[q] if q in minmax.keys() else int(q), v.split("-")))
                  for v in self.args.frame_ranges]
 </s> add         minframe, maxframe = None, None
        if self.images.is_video:
            minframe, maxframe = 1, self.images.images_found
        else:
            indices = [int(self.imageidxre.findall(os.path.basename(filename))[0])
                       for filename in self.images.input_images]
            if indices:
                minframe, maxframe = min(indices), max(indices)
        logger.debug("minframe: %s, maxframe: %s", minframe, maxframe)

        if minframe is None or maxframe is None:
            logger.error("Frame Ranges specified, but could not determine frame numbering "
                         "from filenames")
            exit(1)

        retval = list()
        for rng in self.args.frame_ranges:
            if "-" not in rng:
                logger.error("Frame Ranges not specified in the correct format")
                exit(1)
            start, end = rng.split("-")
            retval.append((max(int(start), minframe), min(int(end), maxframe)))
from lib.queue_manager import queue_manager
  from lib import Serializer
  from lib.convert import Converter
  from lib.faces_detect import DetectedFace
  from lib.multithreading import MultiThread, PoolProcess, total_cpus
from lib.queue_manager import queue_manager
  from lib.utils import get_folder, get_image_paths, hash_image_file
  from plugins.extract.pipeline import Extractor
  from plugins.plugin_loader import PluginLoader
  
  logger = logging.getLogger(__name__)  # pylint: disable=invalid-name
keep keep keep keep replace keep keep keep keep keep
 Bugfixes

sysinfo,py: CUDNN Check fix for unsupported OSes
cli.py: More useful information
scripts/convert.py: Set processes to 1 if no images are passed in
cv2_dnn aligner: Fix bounding box for negative values
scripts/convert.py: Fix for incorrect frame ranges passed in 
scripts/convert.py