Recued
Menu
← Back to recipes

Prepare a photo for delivery

by recued-core v3 39 views

Use “Prepare a photo for delivery” in Recued. Extract one photo's embedded metadata, record exactly what it was carrying, then produce a metadata-stripped delivery copy and a thumbnail derived from that stripped copy.

Complete workflow

Job Photo Delivery 8 pinned recipes

Use Job Photo Delivery in Recued for exif, metadata, privacy, and gps. It includes 16 built-in actions and 7 ready-to-run workflows. Actions that change data use Recued's approval controls.

You are viewing one recipe in this workflow. Installing it opens the complete pack so its other recipes and background automations arrive together.

Use “Prepare a photo for delivery” in Recued. Extract one photo's embedded metadata, record exactly what it was carrying, then produce a metadata-stripped delivery copy and a thumbnail derived from that stripped copy.

pack:job-photo-deliveryphotoexifmetadata
by recued-core pinned v3

Use “Open a photo set” in Recued. Open one delivery set for a customer. The set is keyed on its label, so re-running with the same label converges on the same set rather than opening a second one.

pack:job-photo-deliveryphotodeliveryrecords
by recued-core pinned v2

Use “Add a photo to a set” in Recued. Register one inbound file record as a photo in a set.

pack:job-photo-deliveryphotorecordsv2
by recued-core pinned v2

Use “Review what a set is carrying” in Recued. Show, photo by photo, what a set's images were carrying before they were stripped — GPS coordinates, camera, device serial, capture time. It reads information without changing data in the connected service.

pack:job-photo-deliveryphotoprivacydisclosure
by recued-core pinned v3

Use “Deliver a photo set” in Recued. Mail a set's prepared photos to the customer as attachments.

pack:job-photo-deliveryphotodeliverymail
by recued-core pinned v3

Use “Show the photo sets” in Recued. List photo sets with their customer, status and photo counts. Read-only — it opens no image and runs no CLI.

pack:job-photo-deliveryphotoboardrecords
by recued-core pinned v2
Show all 8 recipes

Use “One photo” in Recued. Open one photo from the list that names it, and read everything recorded about that photo on one page.

pack:job-photo-deliveryphotodetailnavigation
by recued-core pinned v1
View pack details, dependencies, and permissions →

What it does, in order

  1. Extract the embedded metadata with ExifTool and persist it as a JSON record. That record is the durable answer to "what was this photo carrying" — it outlives the stripped copy.
  2. Disclose it onto the photo row: whether there were GPS coordinates, what they were, the camera make/model, the device serial, the capture time.
  3. Strip — ExifTool writes a new copy with -all=. The original file is never mutated and no _original backup is made.
  4. Thumbnail — from the stripped copy.

⛔⛔ Step 4 takes the STRIPPED copy as its source, and that is load-bearing, not tidiness. Verified live on 2026-07-30: vips thumbnail writes PNG with no strip option, and a thumbnail taken from the original carried 31 metadata keys through, including full GPS. So a pack that stripped the delivery copy but thumbnailed the original would hand out a clean photo and leak the customer's coordinates in the preview beside it. Thumbnailing the stripped copy yields a clean file — also verified.

⚠ vips image.to_jpeg and image.to_webp strip on their own (their save options end in strip), so if you add a web-sized variant later you do not need a second ExifTool pass. image.thumbnail, image.resize and image.convert do not — they are the PNG paths, and they carry metadata through.

⚠ Images only. Add a photo to a set refuses non-images, and that boundary matters here: ExifTool documents PDF metadata edits as reversible because old objects can remain in the file, so -all= on a PDF is nullification, not removal. This pack never sees a PDF.

⚠ GPS is disclosed as ExifTool formats it — 51 deg 30' 12.56", not a decimal pair. It is recorded to be read by a human deciding whether to send, not to be computed on.

⚠ Re-running is refused once a photo is prepared. Each run persists new content-addressed copies, and re-preparing would orphan the previous ones with nothing to reclaim them. Delete the photo row and re-add it if you need to redo the work.

How it works 45 steps

Inspect the data fetches, transforms, gates, and output this recipe runs.

Process (45 steps)
■ photo_id trim
Trim whitespace from setting photo id
■ id_present compare
Check if photo id has data
⚠ id_guard guard
Stop if id present equals
◆ photo recued-core.job-photo-delivery.photo.get
Get photo on job photo delivery
■ photo_found compare
Check if photo record id has data
⚠ photo_guard guard
Stop if photo found equals
■ already_prepared compare
Check if photo record status equals prepared
⚠ prepared_guard guard
Stop if already prepared equals
■ source_id default
Apply default
■ source_present compare
Check if source id has data
⚠ source_guard guard
Stop if source present equals
◆ meta_extract recued-core.exiftool.file.metadata_extract
Metadata extract file on exiftool
■ meta_ref default
Apply default
■ meta_ref_present compare
Check if meta ref has data
⚠ meta_ref_guard guard
Stop if meta ref present equals
◆ meta_persist core.storage.file.persist
Persist storage file
■ meta_record_id default
Apply default
◆ meta_read core.storage.data-file-read
Data file read storage
■ meta_text decode_base64
Apply decode_base64
■ meta_list json_parse
Apply json_parse
■ meta_raw default
Apply default
■ exif rename
Rename fields in
■ has_location compare
Check if exif gps latitude has data
■ has_device_id compare
Check if exif device serial has data
■ location_text template
Generate text from a template
■ found_location ternary
Apply ternary
■ camera_text template
Generate text from a template
■ camera trim
Trim whitespace from camera text
■ captured_at default
Apply default
◆ strip recued-core.exiftool.file.metadata_strip
Metadata strip file on exiftool
■ stripped_ref default
Apply default
■ stripped_present compare
Check if stripped ref has data
⚠ stripped_guard guard
Stop if stripped present equals
◆ delivery_persist core.storage.file.persist
Persist storage file
■ delivery_ref default
Apply default
◆ thumb recued-core.vips.image.thumbnail_stripped
Thumbnail stripped image on vips
■ thumb_temp_ref default
Apply default
■ thumb_produced compare
Check if thumb temp ref has data
◆ thumb_persist core.storage.file.persist
Persist storage file
skip: step.thumb_produced equal false
■ thumb_ref default
Apply default
■ delivery_ready compare
Check if delivery ref has data
⚠ delivery_guard guard
Stop if delivery ready equals
■ prepared_at date_add
Add 0 seconds to
◆ photo_update recued-core.job-photo-delivery.photo.update
Update photo on job photo delivery
■ card to_summary
Format results as a summary card
▼
Output
summary card
Settings 2 configurable

Configurable at install. Defaults shown — change them anytime in Recued.

photo id setting = [object Object]
thumb width setting = 480

Uses (7 operations)

Pack operation Get photo on job photo delivery recued-core.job-photo-delivery.photo.get
Pack operation Metadata extract file on exiftool recued-core.exiftool.file.metadata_extract
Files Persist storage file core.storage.file.persist
Files Data file read storage core.storage.data-file-read
Pack operation Metadata strip file on exiftool recued-core.exiftool.file.metadata_strip
Pack operation Thumbnail stripped image on vips recued-core.vips.image.thumbnail_stripped
Pack operation Update photo on job photo delivery recued-core.job-photo-delivery.photo.update

Trust & control

What installing this recipe would let it do. Recued grants these permissions at install — review them there before approving.

What it's allowed to do

Write Pack Job Photo Delivery external change
Read: photo.get · No approvalWrite: photo.update · No approval
Write Files core.storage.file.persist external change
Read Files core.storage.data-file-read read-only

3 more aren't listed here. You'll see them at install.

Data it touches

SurfacesFiles

About

Tags

pack:job-photo-deliveryphotoexifmetadataprivacyexiftoolvipsrecordsv2

Details

45 steps 2 configurable settings recipe_id: prepare-photo