                   "{3}".format(frames_dir, frames_and_faces_dir, output_opts, faces_dir,
                                frames_or_faces_dir)))
          argument_list.append(dict(
              opts=("-a", "--alignments_file"),
              action=FilesFullPaths,
              dest="alignments_file",
              nargs="+",
              group="data",
              required=True,
              filetypes="alignments",
 
</s> remove             nargs="+",
 </s> add             type=str, </s> remove                  "(EXPERIMENTAL!)"
                 "\nL|'update-hashes': Recalculate the face hashes. Only use this if you have "
                 "altered the extracted faces (e.g. colour adjust). The files MUST be named "
                 "'<frame_name>_face index' (i.e. how they are named after running extract)."
                 "{3}".format(frames_dir, frames_and_faces_dir, output_opts, faces_dir,
                              frames_or_faces_dir)))
 </s> add                  "(EXPERIMENTAL!)".format(frames_dir, frames_and_faces_dir, output_opts, faces_dir,
                                          frames_or_faces_dir))) </s> remove         argument_list.append(dict(
            opts=('-a', '--alignments'),
            action=FileFullPaths,
            filetypes="alignments",
            type=str,
            dest="alignments_path",
            group="data",
            help="Optional path to an alignments file. This is only used for the 'sort-by face' "
                 "method. If not provided, the default location will be scanned. If the file "
                 "still cannot be located, then the sorting process will analyze the full-head "
                 "extract images, which will lead to vastly inferior results."))
 </s> add  </s> remove             help="Path to alignments file for training set A. Only required if you are using a "
                 "masked model or warp-to-landmarks is enabled. Defaults to "
                 "<input-A>/alignments.json if not provided."))
 </s> add             help="DEPRECATED - This option will be removed in a future update. Path to alignments "
                 "file for training set A. Defaults to <input-A>/alignments.json if not "
                 "provided.")) </s> remove             help="Path to alignments file for training set B. Only required if you are using a "
                 "masked model or warp-to-landmarks is enabled. Defaults to "
                 "<input-B>/alignments.json if not provided."))
 </s> add             help="DEPRECATED - This option will be removed in a future update. Path to alignments "
                 "file for training set B. Defaults to <input-B>/alignments.json if not "
                 "provided."))
            action=FileFullPaths,
                   "{3}".format(frames_dir, frames_and_faces_dir, output_opts, faces_dir,
                                frames_or_faces_dir)))
          argument_list.append(dict(
              opts=("-a", "--alignments_file"),
            action=FileFullPaths,
              dest="alignments_file",
              nargs="+",
              group="data",
              required=True,
              filetypes="alignments",
keep keep keep keep replace keep keep keep keep keep
 Update extracted faces to use PNG EXIF data (#1123)

Documentation
  - Update Usage.md, align.rst and image.rst
lib.image.py
  - read_image - Remove hash return, add metadata return
  - Remove read_image_hash functions
  - Add read_image_meta functios
  - Replace encode_image_with_hash with encode_image (to store metadata)
  - Add png meta reading and writing functions
  - Update Image Loaders/Savers to handle metadata rather than hashes
lib.training_data
  - Naming updates to remove references to hashes
lib.align.Alignments
  - Add versioning notes
  - Increment alignments version to 2.1
  - Deprecate hashing lookup functions
  - Replace filter_hashes with filter_faces
lib.align.detected_face
  - DetectedFace
    - Remove hash property
    - Add png header data serializing/deserializing functions
  - Mask
    - Add png header data serializing/deserializing functions
  - add update_legacy_png_header function to update png meta data
lib.cli.args - Deprecate alignments files for training
- plugins.train.trainer
  - Update alignments/mask code to read png header data
- scripts.convert
  - Aligned images folder - read data from png headers
- scripts.extract
  - Write png header information and no longer store hash of face
- tools.alignments
  - remove leftover-faces, merge and update-hashes jobs
  - Update jobs to use png meta data rather than hashes
- tools.manual
  - Update extract code to output png meta data and don't store hashes
  - Perform check on launch that tool is not pointing at a faces folder
tools.mask
  - Update to use png meta data
tools.sort
  - Update to use png meta data 
tools/alignments/cli.py