          argument_list.append({
              "opts": ("-A", "--aligner"),
              "action": Radio,
              "type": str.lower,
              "choices": PluginLoader.get_available_extractors(
                  "align"),
              "default": "fan",
              "help": "R|Aligner to use."
                      "\n'dlib': Dlib Pose Predictor. Faster, less "
                      "\n\tresource intensive, but less accurate."
                      "\n'fan': Face Alignment Network. Best aligner."
 
</s> remove                     "\n'dlib': Dlib Pose Predictor. Faster, less "
                    "\n\tresource intensive, but less accurate."
                    "\n'fan': Face Alignment Network. Best aligner."
                    "\n\tGPU heavy, slow when not running on GPU"})
 </s> add                     "\nL|'dlib': Dlib Pose Predictor. Faster, less "
                    "resource intensive, but less accurate."
                    "\nL|'fan': Face Alignment Network. Best aligner. "
                    "GPU heavy, slow when not running on GPU"}) </s> remove             "choices":  PluginLoader.get_available_extractors(
                "detect"),
 </s> add             "choices":  PluginLoader.get_available_extractors("detect"), </s> remove                     "\n'dlib-hog': uses least resources, but is the"
                    "\n\tleast reliable."
                    "\n'dlib-cnn': faster than mtcnn but detects"
                    "\n\tfewer faces and fewer false positives."
                    "\n'mtcnn': slower than dlib, but uses fewer"
                    "\n\tresources whilst detecting more faces and"
                    "\n\tmore false positives. Has superior"
                    "\n\talignment to dlib"
                    "\n's3fd': Can detect more faces than mtcnn, but"
                    "\n\t is a lot more resource intensive"})
 </s> add                     "\nL|'dlib-hog': uses least resources, but is the "
                    "least reliable."
                    "\nL|'dlib-cnn': faster than mtcnn but detects "
                    "fewer faces and fewer false positives."
                    "\nL|'mtcnn': slower than dlib, but uses fewer "
                    "resources whilst detecting more faces and "
                    "more false positives. Has superior "
                    "alignment to dlib"
                    "\nL|'s3fd': Can detect more faces than mtcnn, but "
                    "is a lot more resource intensive"}) </s> remove         argument_list.append({"opts": ("-t", "--trainer"),
                              "action": Radio,
                              "type": str.lower,
                              "choices": PluginLoader.get_available_models(),
                              "default": PluginLoader.get_default_model(),
                              "help": "Select the trainer that was used to "
                                      "create the model"})
        argument_list.append({"opts": ("-c", "--converter"),
                              "action": Radio,
                              "type": str.lower,
                              "choices": PluginLoader.get_available_converters(),
                              "default": "masked",
                              "help": "Converter to use"})
 </s> add         argument_list.append({"opts": ("-ref", "--reference-video"),
                              "action": FileFullPaths,
                              "dest": "reference_video",
                              "filetypes": "video",
                              "type": str,
                              "help": "Only required if converting from images to video. Provide "
                                      "The original video that the source frames were extracted "
                                      "from (for extracting the fps and audio)."})
        argument_list.append({
            "opts": ("-c", "--color-adjustment"),
            "action": Radio,
            "type": str.lower,
            "dest": "color_adjustment",
            "choices": PluginLoader.get_available_convert_plugins("color", True),
            "default": "avg-color",
            "help": "R|Performs color adjustment to the swapped face. Some of these options have "
                    "configurable settings in '/config/convert.ini' or 'Edit > Configure "
                    "Convert Plugins':"
                    "\nL|avg-color: Adjust the mean of each color channel in the swapped "
                    "reconstruction to equal the mean of the masked area in the orginal image."
                    "\nL|color-transfer: Transfers the color distribution from the source to the "
                    "target image using the mean and standard deviations of the L*a*b* "
                    "color space."
                    "\nL|match-hist: Adjust the histogram of each color channel in the swapped "
                    "reconstruction to equal the histogram of the masked area in the orginal "
                    "image."
                    "\nL|seamless-clone: Use cv2's seamless clone function to remove extreme "
                    "gradients at the mask seam by smoothing colors. Generally does not give "
                    "very satisfactory results."
                    "\nL|none: Don't perform color adjustment."})
        argument_list.append({
            "opts": ("-sc", "--scaling"),
            "action": Radio,
            "type": str.lower,
            "choices": PluginLoader.get_available_convert_plugins("scaling", True),
            "default": "none",
            "help": "R|Performs a scaling process to attempt to get better definition on the "
                    "final swap. Some of these options have configurable settings in "
                    "'/config/convert.ini' or 'Edit > Configure Convert Plugins':"
                    "\nL|sharpen: Perform sharpening on the final face."
                    "\nL|none: Don't perform any scaling operations."}) </s> remove             "choices": ["ellipse",
                        "facehull",
                        "dfl",
                        #  "cnn",  Removed until implemented
                        "none"],
            "default": "facehull",
            "help": "R|Mask to use to replace faces."
                    "\nellipse: Oval around face."
                    "\nfacehull: Face cutout based on landmarks."
                    "\ndfl: A Face Hull mask from DeepFaceLabs."
                    #  "\ncnn: Not yet implemented"  Removed until implemented
                    "\nnone: No mask. Can still use blur and erode on the edges of the swap box."})
        argument_list.append({"opts": ("-b", "--blur-size"),
                              "type": float,
                              "action": Slider,
                              "min_max": (0.0, 100.0),
                              "rounding": 2,
                              "default": 5.0,
                              "help": "Blur kernel size as a percentage of the swap area. Smooths "
                                      "the transition between the swapped face and the background "
                                      "image."})
        argument_list.append({"opts": ("-e", "--erosion-size"),
                              "dest": "erosion_size",
                              "type": float,
 </s> add             "choices": get_available_masks() + ["predicted"],
            "default": "predicted",
            "help": "R|Mask to use to replace faces. Blending of the masks can be adjusted in "
                    "'/config/convert.ini' or 'Edit > Configure Convert Plugins':"
                    "\nL|components: An improved face hull mask using a facehull of 8 facial "
                    "parts."
                    "\nL|dfl_full: An improved face hull mask using a facehull of 3 facial parts."
                    "\nL|facehull: Face cutout based on landmarks."
                    "\nL|predicted: The predicted mask generated from the model. If the model was "
                    "not trained with a mask then this will fallback to "
                    "'{}'".format(get_default_mask()) +
                    "\nL|none: Don't use a mask."})
        argument_list.append({"opts": ("-w", "--writer"),
                              "action": Radio,
                              "type": str,
                              "choices": PluginLoader.get_available_convert_plugins("writer",
                                                                                    False),
                              "default": "opencv",
                              "help": "R|The plugin to use to output the converted images. The "
                                      "writers are configurable in '/config/convert.ini' or `Edit "
                                      "> Configure Convert Plugins:'"
                                      "\nL|ffmpeg: [video] Writes out the convert straight to "
                                      "video. When the input is a series of images then the "
                                      "'-ref' (--reference-video) parameter must be set."
                                      "\nL|gif: [animated image] Create an animated gif."
                                      "\nL|opencv: [images] The fastest image writer, but less "
                                      "options and formats than other plugins."
                                      "\nL|pillow: [images] Slower than opencv, but has more "
                                      "options and supports more formats."})
        argument_list.append({"opts": ("-osc", "--output-scale"),
                              "dest": "output_scale",
            "choices": PluginLoader.get_available_extractors("align"),
          argument_list.append({
              "opts": ("-A", "--aligner"),
              "action": Radio,
              "type": str.lower,
            "choices": PluginLoader.get_available_extractors("align"),
            "choices": PluginLoader.get_available_extractors("align"),
              "default": "fan",
              "help": "R|Aligner to use."
                      "\n'dlib': Dlib Pose Predictor. Faster, less "
                      "\n\tresource intensive, but less accurate."
                      "\n'fan': Face Alignment Network. Best aligner."
keep keep keep keep replace replace keep keep keep keep keep
 Convert refactor (#703)

* Separate predict and implement pool

* Add check and raise error to multithreading

Box functions to config. Add crop box option.

* All masks to mask module. Refactor convert masks

Predicted mask passed from model. Cli update

* Intesect box with mask and fixes

* Use raw NN output for convert

Use raw mask for face adjustments. Split adjustments to pre and post warp

* Separate out adjustments. Add unmask sharpen

* Set sensible defaults. Pre PR Testing

* Fix queue sizes. Move masked.py to lib

* Fix Skip Frames. Fix GUI Config popup

* Sensible queue limits. Add a less resource intensive single processing mode

* Fix predicted mask. Amend smooth box defaults

* Deterministic ordering for video output

* Video to Video convert implemented

* Fixups

- Remove defaults from folders across all stages
- Move match-hist and aca into color adjustments selectable
- Handle crashes properly for pooled processes
- Fix output directory does not exist error when creating a new output folder
- Force output to frames if input is not a video

* Add Color Transfer adjustment method

Wrap info text in GUI plugin configure popup

* Refactor image adjustments. Easier to create plugins

Start implementing config options for video encoding

* Add video encoding config options

Allow video encoding for frames input (must pass in a reference video)
Move video and image output writers to plugins

* Image writers config options

Move scaling to cli
Move draw_transparent to images config
Add config options for cv2 writer
Add Pillow image writer

* Add gif filetype to Pillow. Fix draw transparent for Pillow

* Add Animated GIF writer

standardize opencv/pillow defaults

* [speedup] Pre-encode supported writers in the convert pool (opencv, pillow)

Move scaling to convert pool
Remove dfaker mask

* Fix default writer

* Bugfixes

* Better custom argparse formatting 
lib/cli.py