MATCH-N-SHIFT(1)

πŸ“¦
version 0.29 Β· 2 versions
, in fedora 43

πŸ’– MATCH-N-SHIFT(1) πŸ’–

okay bestie, gather round, because this one is literally the glow-up your photo folder has been waiting for. we're talking about match-n-shift, a lil User Contributed Perl script that takes your sad little pile of photos and turns them into a hugin .pto project. no cap. it's giving panorama pipeline and i'm obsessed πŸ’…


✨ NAME ✨

match-n-shift β€” generate a Hugin .pto project from a list of photos πŸ¦‹


🌸 SYNOPSIS 🌸

match-n-shift [options] --output project.pto image1 image2 [...]

like, that's the whole vibe. options go here:

 Options:
  -o | --output name    Filename of created panorama project
  -i | --input name     Filename of CSV file specifying input images (optional, see below)
  -f | --projection     Panotools style input projection number. Use
                          0 for rectilinear (default), 2 for circular fisheye and
                          3 for full-frame fisheye images.  Note, this has to be
                          specified for fisheye lenses as this can't be determined
                          from EXIF metadata
  -v | --fov            Horizontal field of view in degrees, this value is
                          only used if FoV can't be determined from EXIF
                          metadata, defaults to 50
  -k | --selection      Crop selection boundary, eg -459,2459,-57,2861
  -l | --linkstacks     Hard link positions of stacked photos.
  -a | --align          Generate control points (default no).
  -h | --help           Outputs help documentation.

 Deprecated options (have no effect when using cpfind):
  -s | --size number    Downsize images until width and height is
                          smaller than number, default 1600
  -p | --points number  Number of generated control points between,
                          each pair, default: 25
  -n | --noransac       No ransac detection, useful for fisheye images
  -r | --refine         Refine the found control points using the
                          original images, delete unrefinable.

πŸŽ€ OPTIONS πŸŽ€

  • -o, --output name β€” the filename of the panorama project it's gonna create for you. this is your main character output file, periodt πŸ‘‘
  • -i, --input name β€” filename of a CSV file specifying your input images. it's optional, and the deets are down in DESCRIPTION, iykyk πŸ“
  • -f, --projection β€” panotools-style input projection number. use 0 for rectilinear (default), 2 for circular fisheye, and 3 for full-frame fisheye images. ⚠️ note: you have to specify this for fisheye lenses, because it literally cannot be figured out from EXIF metadata. the metadata said nothing, bestie, nothing 😭
  • -v, --fov β€” horizontal field of view, in degrees. this value only gets used if FoV can't be determined from EXIF metadata. defaults to 50. she's a fallback queen πŸ’œ
  • -k, --selection β€” crop selection boundary, eg -459,2459,-57,2861 βœ‚οΈ
  • -l, --linkstacks β€” hard link positions of stacked photos. keep the stack together, bestie, no drifting apart πŸ”—
  • -a, --align β€” generate control points (default no). note the default is a big fat no πŸ™ˆ
  • -h, --help β€” outputs help documentation. the classic cry for help, love that for us πŸ’–

πŸ’€ Deprecated options (have no effect when using cpfind)

these ones are retired. not evil, just… irrelevant when you're using cpfind. still listing them because the facts stay facts, periodt.
  • -s, --size number β€” downsize images until width and height is smaller than number, default 1600
  • -p, --points number β€” number of generated control points between each pair, default: 25
  • -n, --noransac β€” no ransac detection, useful for fisheye images
  • -r, --refine β€” refine the found control points using the original images, delete unrefinable.

🌈 DESCRIPTION 🌈

match-n-shift takes a list of image files and creates a hugin-compatible project file β€” optionally containing control points linking the images together, though there are better ways of doing this. (not me being honest about my own limitations, character growth ✨)

as much information as possible is extracted from photo EXIF data. so photo orientation, exposure, angle of view and white balance will all be initialised if possible. the metadata is doing the heavy lifting and we're just here to say thank you 🫢

an optional input file can be chosen with the --input option. this can be a simple list of photo filenames, or full paths, one per line:

DSC_0001.JPG
DSC_0002.JPG
DSC_0003.JPG
DSC_0004.JPG

..or a CSV file specifying "filename, yaw, pitch, roll" (in degrees):

DSC_0001.JPG,0,20,90
DSC_0002.JPG,90,-20,90
DSC_0003.JPG,180,20,90
DSC_0004.JPG,-180,-20,90

..or optionally specify XYZ translation parameters as well:

DSC_0001.JPG, 0, 20, 0, 0.5, 0.0, 1.0
DSC_0002.JPG, 0, 20, 0, 1.4, 0.0, 1.0
DSC_0003.JPG, 0, 20, 0, 2.3, 0.0, 1.0
DSC_0004.JPG, 0, 20, 0, 3.2, 0.0, 1.0

if the roll field is omitted then it will be set to zero or any value obtainable from EXIF data. similarly, if the pitch field is omitted then pitch will be set to zero. so this should also work:

DSC_0001.JPG,0
DSC_0002.JPG,90
DSC_0003.JPG,180
DSC_0004.JPG,-180

see? flexible. we love a format that meets you where you're at 🧚


πŸ‘‘ LICENSE πŸ‘‘

this program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. slay, legally speaking πŸ’…


πŸ”₯ SEE ALSO πŸ”₯

<http://hugin.sourceforge.net/>

go click it, bestie, the lore is there 🌟


⭐ AUTHOR ⭐

Bruno Postle β€” February 2008.


and that's the whole page, babes πŸ’– this doc shipped with perl v5.42.0 and it's dated 2025-07-25 β€” so yeah, still iconic after all these years 🌸 bye pookie, go make a panorama πŸ¦‹

πŸ“¦ where this page comes from