              "choices": ("console", "file", "move"),
              "default": "console",
              "help": "R|How to output discovered items ('faces' and"
                      "\n'frames' only):"
                      "\n'console': Print the list of frames to the screen."
                      "\n\t(DEFAULT)"
                      "\n'file': Output the list of frames to a text file"
                      "\n\t(stored within the source directory)."
                      "\n'move': Move the discovered items to a sub-folder"
                      "\n\twithin the source directory."})
          argument_list.append({"opts": ("-ae", "--align-eyes"),
                                "action": "store_true",
                                "dest": "align_eyes",
                                "default": False,
                                "help": "Perform extra alignment to ensure "
 
</s> remove                               "help": "Input directory. A directory "
                                      "containing the files you wish to "
                                      "process. Defaults to 'input'"})
 </s> add                               "help": "Input directory or video. Either a "
                                      "directory containing the image files "
                                      "you wish to process or path to a "
                                      "video file. Defaults to 'input'"}) </s> remove                               "action": DirFullPaths,
 </s> add                               "action": DirOrFileFullPaths,
                              "filetypes": "video", </s> remove                     "NB: All actions require an alignments file (-a) to"
                    "\nbe passed in."
                    "\n'draw': Draw landmarks on frames in the selected"
                    "\n\tfolder. A subfolder will be created within"
                    "\n\tthe frames folder to hold the output." +
 </s> add                     "NB: All actions require an alignments file (-a) to be passed in."
                    "\n'draw': Draw landmarks on frames in the selected folder/video. A subfolder"
                    "\n\twill be created within the frames folder to hold the output." + </s> remove                     "\n'extract-large' - Extract all faces that have not been"
                    "\n\tupscaled. Useful for excluding low-res images from a"
                    "\n\ttraining set" + frames_and_faces_dir + align_eyes +
                    "\n'manual': Manually view and edit landmarks." +
                    frames_dir + align_eyes +
                    "\n'merge': Merge multiple alignment files into one."
                    "\n\tSpecify the main alignments file with the -a flag"
                    "\n\tand the file to be merged with the -a2 flag."
                    "\n'missing-alignments': Identify frames that do not"
                    "\n\texist in the alignments file." + output_opts +
                    frames_dir +
                    "\n'missing-frames': Identify frames in the alignments"
                    "\n\tfile that do not appear within the frames"
                    "\n\tfolder." + output_opts + frames_dir +
                    "\n'legacy': This updates legacy alignments to the latest"
                    "\n\tformat by adding frame dimensions, rotating the"
                    "\n\tlandmarks and bounding boxes and adding face_hashes" +
                    frames_and_faces_dir +
                    "\n'leftover-faces': Identify faces in the faces"
                    "\n\tfolder that do not exist in the alignments file."
                    + output_opts + faces_dir +
                    "\n'multi-faces': Identify where multiple faces exist"
                    "\n\twithin the alignments file." + output_opts +
                    frames_or_faces_dir +
                    "\n'no-faces': Identify frames that exist within the"
                    "\n\talignment file but no faces were detected." +
                    output_opts + frames_dir +
                    "\n'reformat': Save a copy of alignments file in a"
                    "\n\tdifferent format. Specify a format with"
                    "\n\tthe -fmt option."
                    "\n\tAlignments can be converted from"
                    "\n\tDeepFaceLab by specifing:"
 </s> add                     "\n'extract-large' - Extract all faces that have not been upscaled. Useful"
                    "\n\tfor excluding low-res images from a training set." +
                    frames_and_faces_dir + align_eyes +
                    "\n'manual': Manually view and edit landmarks." + frames_dir + align_eyes +
                    "\n'merge': Merge multiple alignment files into one. Specify the main"
                    "\n\talignments file with the -a flag and the file to be merged with the"
                    "\n\t-a2 flag."
                    "\n'missing-alignments': Identify frames that do not exist in the alignments"
                    "\n\tfile." + output_opts + frames_dir +
                    "\n'missing-frames': Identify frames in the alignments file that do no "
                    "\n\tappear within the frames folder/video." + output_opts + frames_dir +
                    "\n'legacy': This updates legacy alignments to the latest format by adding"
                    "\n\tframe dimensions, rotating the landmarks and bounding boxes and adding"
                    "\n\tface_hashes" + frames_and_faces_dir +
                    "\n'leftover-faces': Identify faces in the faces folder that do not exist in"
                    "\n\tthe alignments file." + output_opts + faces_dir +
                    "\n'multi-faces': Identify where multiple faces exist within the alignments"
                    "\n\tfile." + output_opts + frames_or_faces_dir +
                    "\n'no-faces': Identify frames that exist within the alignment file but no"
                    "\n\tfaces were detected." + output_opts + frames_dir +
                    "\n'reformat': Save a copy of alignments file in a different format. Specify"
                    "\n\ta format with the -fmt option."
                    "\n\tAlignments can be converted from DeepFaceLab by specifing:" </s> remove                     "\n'extract': Re-extract faces from the source frames"
                    "\n\tbased on alignment data. This is a"
                    "\n\tlot quicker than re-detecting faces." +
 </s> add                     "\n'extract': Re-extract faces from the source frames/video based on "
                    "\n\talignment data. This is a lot quicker than re-detecting faces." +
                    "\n'console': Print the list of frames to the screen. (DEFAULT)"
                    "\n'file': Output the list of frames to a text file (stored within the source"
                    "\n\tdirectory)."
                    "\n'move': Move the discovered items to a sub-folder within the source"
                    "\n\tdirectory."})
              "choices": ("console", "file", "move"),
              "default": "console",
              "help": "R|How to output discovered items ('faces' and"
                      "\n'frames' only):"
                    "\n'console': Print the list of frames to the screen. (DEFAULT)"
                    "\n'file': Output the list of frames to a text file (stored within the source"
                    "\n\tdirectory)."
                    "\n'move': Move the discovered items to a sub-folder within the source"
                    "\n\tdirectory."})
                    "\n'console': Print the list of frames to the screen. (DEFAULT)"
                    "\n'file': Output the list of frames to a text file (stored within the source"
                    "\n\tdirectory)."
                    "\n'move': Move the discovered items to a sub-folder within the source"
                    "\n\tdirectory."})
                    "\n'console': Print the list of frames to the screen. (DEFAULT)"
                    "\n'file': Output the list of frames to a text file (stored within the source"
                    "\n\tdirectory)."
                    "\n'move': Move the discovered items to a sub-folder within the source"
                    "\n\tdirectory."})
                    "\n'console': Print the list of frames to the screen. (DEFAULT)"
                    "\n'file': Output the list of frames to a text file (stored within the source"
                    "\n\tdirectory)."
                    "\n'move': Move the discovered items to a sub-folder within the source"
                    "\n\tdirectory."})
                    "\n'console': Print the list of frames to the screen. (DEFAULT)"
                    "\n'file': Output the list of frames to a text file (stored within the source"
                    "\n\tdirectory)."
                    "\n'move': Move the discovered items to a sub-folder within the source"
                    "\n\tdirectory."})
                    "\n'console': Print the list of frames to the screen. (DEFAULT)"
                    "\n'file': Output the list of frames to a text file (stored within the source"
                    "\n\tdirectory)."
                    "\n'move': Move the discovered items to a sub-folder within the source"
                    "\n\tdirectory."})
          argument_list.append({"opts": ("-ae", "--align-eyes"),
                                "action": "store_true",
                                "dest": "align_eyes",
                                "default": False,
                                "help": "Perform extra alignment to ensure "
keep keep keep keep replace replace replace replace replace replace keep keep keep keep keep
 Add ability to extract from and convert from a video file (#559)

* Add ability to extract from and convert from a video file

* Update cli helptext. Add filebrowser button for GUI input

* Add video support to Alignments Tool 
tools/cli.py