                                        "must have the frame-number as the last "
                                        "number in the name!"})
          argument_list.append({"opts": ("-d", "--discard-frames"),
                                "action": "store_true",
                                "dest": "discard_frames",
                                "default": False,
                                "help": "When used with --frame-ranges discards "
                                        "frames that are not processed instead "
                                        "of writing them out unchanged"})
          argument_list.append({"opts": ("-s", "--swap-model"),
 
</s> remove                               "help": "When used with --frame-ranges discards "
                                      "frames that are not processed instead "
                                      "of writing them out unchanged"})
 </s> add                               "help": "When used with --frame-ranges outputs the unchanged frames "
                                      "that are not processed instead of discarding them."}) </s> remove                               "help": "frame ranges to apply transfer to e.g. "
                                      "For frames 10 to 50 and 90 to 100 use "
                                      "--frame-ranges 10-50 90-100. Files "
                                      "must have the frame-number as the last "
                                      "number in the name!"})
        argument_list.append({"opts": ("-d", "--discard-frames"),
 </s> add                               "help": "frame ranges to apply transfer to e.g. For frames 10 to 50 "
                                      "and 90 to 100 use --frame-ranges 10-50 90-100. Files "
                                      "must have the frame-number as the last number in the name! "
                                      "Frames falling outside of the selected range will be "
                                      "discarded unless '-k' (--keep-unchanged) is selected."})
        argument_list.append({"opts": ("-k", "--keep-unchanged"), </s> remove                               "help": "Adjust the mean of each color channel "
                                      " in the swapped reconstruction to "
                                      "equal the mean of the masked area in "
                                      "the orginal image"})
        argument_list.append({"opts": ("-sb", "--smooth-box"),
                              "action": "store_true",
                              "dest": "smooth_box",
                              "default": False,
                              "help": "Perform a Gaussian blur on the edges of the face box "
                                      "received from the model. Helps reduce pronounced edges "
                                      "of the swap area"})
        argument_list.append({"opts": ("-dt", "--draw-transparent"),
                              "action": "store_true",
                              "dest": "draw_transparent",
                              "default": False,
                              "help": "Place the swapped face on a "
                                      "transparent layer rather than the "
                                      "original frame."})
 </s> add                               "help": "Disable multiprocessing. Slower but less resource "
                                      "intensive."})
        argument_list.append({"opts": ("-t", "--trainer"),
                              "type": str.lower,
                              "choices": PluginLoader.get_available_models(),
                              "help": "[LEGACY] This only needs to be selected if a legacy "
                                      "model is being loaded or if there are multiple models in "
                                      "the  model folder"})
 </s> remove         argument_list.append({"opts": ("-S", "--seamless"),
                              "action": "store_true",
                              "dest": "seamless_clone",
                              "default": False,
                              "help": "Use cv2's seamless clone function to "
                                      "remove extreme gradients at the mask "
                                      "seam by smoothing colors."})
        argument_list.append({"opts": ("-mh", "--match-histogram"),
                              "action": "store_true",
                              "dest": "match_histogram",
                              "default": False,
                              "help": "Adjust the histogram of each color "
                                      "channel in the swapped reconstruction "
                                      "to equal the histogram of the masked "
                                      "area in the orginal image"})
        argument_list.append({"opts": ("-aca", "--avg-color-adjust"),
 </s> add         argument_list.append({"opts": ("-sp", "--singleprocess"), </s> remove                               "dest": "avg_color_adjust",
 </s> add 
                              "dest": "keep_unchanged",
                                        "must have the frame-number as the last "
                                        "number in the name!"})
          argument_list.append({"opts": ("-d", "--discard-frames"),
                                "action": "store_true",
                              "dest": "keep_unchanged",
                                "default": False,
                                "help": "When used with --frame-ranges discards "
                                        "frames that are not processed instead "
                                        "of writing them out unchanged"})
          argument_list.append({"opts": ("-s", "--swap-model"),
keep keep keep keep 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