                              if not item.name.startswith("_")
                              and not item.name.endswith("defaults.py")
                              and item.name.endswith(".py")
                              and item.name != "manual.py")
          return extractors
  
      @staticmethod
      def get_available_models():
          """ Return a list of available models """
 
</s> remove         """ Return a list of available models """
 </s> add         """ Return a list of available aligners/detectors """
 </s> remove                     "detectors but can often return more false positives."
                    "\nL|'s3fd': Fast on GPU, slow on CPU. Can detect more faces and fewer false "
                    "positives than other GPU detectors, but is a lot more resource intensive."})
 </s> add                     "detectors but can often return more false positives. NB: Runs on CPU for AMD "
                    "cards."
                    "\nL|'" + s3fd + "': Fast on GPU, slow on CPU. Can detect more faces and "
                    "fewer false positives than other GPU detectors, but is a lot more resource "
                    "intensive."}) </s> remove                               "help": "[Nvidia only] Trades off VRAM usage against computation "
                                      "time. Can fit larger models into memory at a cost of "
                                      "slower training speed. 50%%-150%% batch size increase for "
                                      "20%%-50%% longer training time. NB: Launch time will be "
                                      "significantly delayed. Switching sides using ping-pong "
                                      "training will take longer."})
 </s> add                               "backend": "nvidia",
                              "help": "Trades off VRAM usage against computation time. Can fit "
                                      "larger models into memory at a cost of slower training "
                                      "speed. 50%%-150%% batch size increase for 20%%-50%% longer "
                                      "training time. NB: Launch time will be significantly "
                                      "delayed. Switching sides using ping-pong training will "
                                      "take longer."})
        # TODO Remove this hacky fix when we move them to the same models
        multi_versions = [extractor.replace("-amd", "")
                          for extractor in extractors if extractor.endswith("-amd")]
        if get_backend().lower() == "amd":
            for extractor in multi_versions:
                extractors.remove(extractor)
        else:
            for extractor in multi_versions:
                extractors.remove("{}-amd".format(extractor))

                              if not item.name.startswith("_")
                              and not item.name.endswith("defaults.py")
                              and item.name.endswith(".py")
                              and item.name != "manual.py")
        # TODO Remove this hacky fix when we move them to the same models
        multi_versions = [extractor.replace("-amd", "")
                          for extractor in extractors if extractor.endswith("-amd")]
        if get_backend().lower() == "amd":
            for extractor in multi_versions:
                extractors.remove(extractor)
        else:
            for extractor in multi_versions:
                extractors.remove("{}-amd".format(extractor))
          return extractors
  
      @staticmethod
      def get_available_models():
          """ Return a list of available models """
keep keep keep add keep keep keep keep keep
 More seamless AMD Integration

- utils.py: Set FS backend if .faceswap config file doesn't exist
- setup.py: set .faceswap config on setup
- Dynamically load options for AMD/CPU/NVIDIA backends 
plugins/plugin_loader.py