===============================================================================
 FlashPhoto — for the LinuxDoors AppImage Store
===============================================================================

 Name:          FlashPhoto
 Price:         $0.00
 Maker:         LinuxDoors
 Created:       September 7, 2026
 Kind:          A LinuxDoors AppImage Software Product
 File:          FlashPhoto.AppImage
 Size:          60M   (single file, download and run)
 SHA256:        70b5bf6713cef5e025aa79c44a043a269142cc04d1c220419143172bc01d3c4b

 CARD DESCRIPTION (the one line the store shows under the name)

     View, crop and adjust photographs — and crop a JPEG without re-encoding it.


-------------------------------------------------------------------------------
 DESCRIPTION
-------------------------------------------------------------------------------

 A photograph viewer and editor for the everyday work: open a folder, move
 through it with the arrow keys, throw out the ones that did not come off, crop
 the ones that did, resize a few for a website, convert a folder to another
 format.

 It is not a darkroom and does not pretend to be one. There are no layers, no
 masks and no history brush, because the moment a program carries those it
 stops being the thing you open to glance at a picture. What it is instead is
 quick, and careful with the original: a picture appears the moment you press
 the key, and a crop on a JPEG does not damage the photograph.

 Written for LinuxDoors, though nothing in it is specific to LinuxDoors — it
 runs on Debian and Ubuntu type systems, and on any other Linux distribution
 that can run an AppImage.


-------------------------------------------------------------------------------
 Lossless JPEG cropping
-------------------------------------------------------------------------------

 A JPEG is not stored as pixels. It is stored as compressed blocks, and the
 compression is lossy: some of the original detail went the moment the camera
 wrote the file. That is a bargain most people are happy with, once.

 The trouble is what happens next. Open a JPEG in an ordinary editor, crop it,
 and save: the program decodes those blocks into pixels, discards the blocks,
 and compresses the result again from scratch. A little more detail goes each
 time. Crop the same photograph five times over a year and it shows — soft
 edges, blotches around lettering, banding in a clear sky. This is generation
 loss, and none of it is recoverable.

 FlashPhoto does not work that way. For a crop or a rotation on a JPEG it hands
 the file to jpegtran, which copies the compressed blocks straight across
 without ever decoding them. The pixels that remain are bit for bit what they
 were. Nothing is re-encoded, so nothing is lost, however many times it is
 done.

 That is a tested guarantee rather than a claim. Cropping a photograph this way
 and comparing the result against the same region of the original gives an
 identical set of bytes, and rotating a photograph four times by ninety degrees
 returns the file it started as, with its metadata intact.

 jpegtran travels inside the AppImage, so this works on a machine that has
 never installed it.


-------------------------------------------------------------------------------
 The one rule, and why the selection moves
-------------------------------------------------------------------------------

 Because it is the blocks that are copied, a lossless crop can only fall on a
 block boundary, and those blocks are 8 or 16 pixels across depending on how
 the camera wrote the file.

 So while Lossless is ticked the selection snaps to that grid, and the grid
 size is read out of the file itself rather than assumed. Zoom past six times
 and the grid is drawn on the picture, so the snapping is something you can see
 rather than a rectangle that jumps for no reason. Snapping only ever grows the
 selection: a crop that quietly lost a strip you had included would be worse
 than one that keeps a few pixels you had not.

 Untick Lossless and any pixel is available, at the cost of a re-encode. The
 program says plainly which of the two you are getting.


-------------------------------------------------------------------------------
 What is in the program
-------------------------------------------------------------------------------

 THE VIEWER
     Open a file or a whole folder; the arrow keys move through it. Fit to
     window, actual size, or anywhere between with the wheel — and the wheel
     zoom is fine grained rather than jumping in quarters, so a magnification
     can be settled on rather than overshot. Drag to pan, double-click to
     switch between fit and 1:1, F11 for fullscreen, drop a file on the window
     to open it.

 THE WHEEL, EITHER WAY ROUND
     By default the wheel zooms and Control moves through the folder. One
     setting swaps them. Whichever is chosen, the other stays one key away.

 THE NEXT PICTURE IS ALREADY LOADED
     While a picture is on screen the program is decoding the next one, the
     previous one, and one further ahead in the direction of travel. Moving to
     a neighbour then takes about three milliseconds instead of sixty on a
     twelve-megapixel photograph — some twenty times quicker, and the
     difference between a viewer that feels instant and one that does not. What
     it holds is capped, and every held picture is checked against the file on
     disk before use, so a photograph edited by something else while the
     program is open is never served stale.

 CROP TOOLS
     A selection with eight handles, movable and resizable, with a live readout
     of size, position and proportions. Double-click inside the selection to
     crop to it, or use the button; either way Ctrl+Z puts it back. The shape
     can be locked to 1:1, 4:3, 3:2, 16:9 or 5:4, or left free. Auto-crop finds
     the picture inside a plain border and offers the rectangle for approval
     rather than acting on its own.

 ADJUSTMENTS
     Brightness, contrast, gamma, saturation and sharpening, previewed as the
     slider moves. Transparency survives all of them, so a PNG with a
     transparent background still has one afterwards.

 RESIZE
     By pixels or by percentage, proportions kept unless told otherwise, with
     quick settings for fitting the long edge to 1920, 1280 or 800 pixels.

 THE FOLDER, AS THUMBNAILS
     A strip along the bottom showing every picture in the folder, with a size
     slider. Thumbnails are decoded at the size they are displayed at, so a
     twenty-four-megapixel photograph costs about what a small one does.

     It is off until you ask for it, on F3, and it reads nothing while it is
     off. Opening one photograph does not send the program away to read every
     other photograph in the folder first, and turning the strip off again
     stops the reading rather than leaving it running out of sight.

 PROPERTIES
     Everything the file says about itself, in three tabs: what the file is,
     how the photograph was taken, and every metadata tag it carries without
     interpretation. Camera and lens, exposure time, aperture, ISO, focal
     length, flash, metering, the date taken, and the coordinates where the
     camera recorded them, with a button to copy them. The panel docks on the
     left or the right, or comes away as a window of its own, and it follows
     you as you move through the folder.

 BATCH
     The same change to many pictures at once — resize, convert, rotate,
     rename — with every rename shown before anything happens. Results go to a
     folder of their own, and a name already in use is given a number rather
     than replacing what is there. The pictures you started with are never
     written to.

 LIGHT AND DARK
     Both, switched with one key, every colour pair in both themes measured
     against the WCAG contrast standard rather than judged by eye.


-------------------------------------------------------------------------------
 The formats it reads and writes
-------------------------------------------------------------------------------

 Reads:   png  jpg  jpeg  jfif  webp  bmp  ico  tif  tiff  gif  ppm  pgm  pbm
          tga  svg  svgz  xpm  xbm  icns  cur  wbmp  j2k  jp2, and PDF pages

 Writes:  png  jpg  jpeg  webp  bmp  ico  tif  tiff  ppm  pgm  pbm  xpm  xbm
          j2k  jp2

 Everything those need travels inside the AppImage, TIFF included. Nothing has
 to be installed on the machine for any of them.


-------------------------------------------------------------------------------
 Saving, and why it asks
-------------------------------------------------------------------------------

 Editing never overwrites the file that was opened unless you ask twice.

 Save As is the ordinary path and suggests a new name. Save on top of the
 original asks first, and says what it is about to do and where. A program that
 can crop a photograph in one keystroke should not be able to destroy the only
 copy of it in the same one.

 A lossless crop or rotation always writes a new file, deliberately: the
 operation reads the original and writes its replacement, and doing that on top
 of the original would mean the one copy of the photograph is briefly the
 output of a program that might fail.


-------------------------------------------------------------------------------
 What it does not do, plainly
-------------------------------------------------------------------------------

 It is better to know the edges of a program before downloading it.

     - No camera raw. CR2, NEF, ARW and the rest are not read; this is a
       program for the photographs after they have been developed, not before.

     - No layers, masks, curves or levels. Brightness, contrast, gamma,
       saturation and sharpening are the whole of the adjustment.

     - An animated GIF shows its first frame. It is not a player.

     - A lossless crop lands on the block grid, by definition. Cropping to an
       exact pixel means accepting a re-encode, which the program offers and
       labels rather than hiding.

     - Metadata is read, not written. It is carried across a lossless crop or
       rotation untouched, but the program does not edit tags.


-------------------------------------------------------------------------------
 LinuxDoors original
-------------------------------------------------------------------------------

 Built by LinuxDoors — this is our own application, not a mirror and not a
 repackaging of somebody else's build. The SHA-256 above is authoritative.

 It carries its own Python, its own Qt, Pillow for the formats Qt has no plugin
 for, and jpegtran for the lossless work. Nothing is installed on the machine
 and nothing on the machine is disturbed.


-------------------------------------------------------------------------------
 Running it — nothing to install
-------------------------------------------------------------------------------

     chmod +x FlashPhoto.AppImage
     ./FlashPhoto.AppImage

 Or give it something to open:

     ./FlashPhoto.AppImage photograph.jpg
     ./FlashPhoto.AppImage ~/Pictures

 On LinuxDoors, which has no FUSE, run it the way LinuxDoors runs any AppImage:

     ./FlashPhoto.AppImage --appimage-extract-and-run

 or through linuxdoors-run-appimage, which does that for you and unpacks it
 once rather than on every launch.

 Settings live in ~/.config/FlashPhoto/FlashPhoto.save and are written when the
 program closes. Deleting that file puts everything back as it started.
