                               for plugin in self._active_plugins)
          gpu_plugins = [p for p in self._current_phase if self._vram_per_phase[p] > 0]
          scaling = self._parallel_scaling.get(len(gpu_plugins), self._scaling_fallback)
          plugins_required = sum(self._vram_per_phase[p] for p in gpu_plugins) * scaling
          if plugins_required + batch_required <= self._vram_stats["vram_free"]:
              logger.debug("Plugin requirements within threshold: (plugins_required: %sMB, "
                           "vram_free: %sMB)", plugins_required, self._vram_stats["vram_free"])
              return
          # Hacky split across plugins that use vram
          available_vram = (self._vram_stats["vram_free"] - plugins_required) // len(gpu_plugins)
 
</s> remove         available_vram = (self._vram_stats["vram_free"] - plugins_required) // len(gpu_plugins)
 </s> add         available_vram = (cast(int, self._vram_stats["vram_free"])
                          - plugins_required) // len(gpu_plugins) </s> remove         phases = []
        current_phase = []
        available = self._vram_stats["vram_free"]
 </s> add         phases: List[List[str]] = []
        current_phase: List[str] = []
        available = cast(int, self._vram_stats["vram_free"]) </s> remove     def set_aligner_normalization_method(self, method):
 </s> add     def set_aligner_normalization_method(self, method: str) -> None: </s> remove     def _total_vram_required(self):
 </s> add     def _total_vram_required(self) -> float: </s> remove         idx = flow_phase.split("_")[-1]
        if idx.isdigit():
            idx = int(idx)
 </s> add         sidx = flow_phase.split("_")[-1]
        if sidx.isdigit():
            idx: Optional[int] = int(sidx)
        if plugins_required + batch_required <= cast(int, self._vram_stats["vram_free"]):
                               for plugin in self._active_plugins)
          gpu_plugins = [p for p in self._current_phase if self._vram_per_phase[p] > 0]
          scaling = self._parallel_scaling.get(len(gpu_plugins), self._scaling_fallback)
          plugins_required = sum(self._vram_per_phase[p] for p in gpu_plugins) * scaling
        if plugins_required + batch_required <= cast(int, self._vram_stats["vram_free"]):
              logger.debug("Plugin requirements within threshold: (plugins_required: %sMB, "
                           "vram_free: %sMB)", plugins_required, self._vram_stats["vram_free"])
              return
          # Hacky split across plugins that use vram
          available_vram = (self._vram_stats["vram_free"] - plugins_required) // len(gpu_plugins)
keep keep keep keep replace keep keep keep keep keep
 extract: Add batch processing mode 
plugins/extract/pipeline.py