TagAndReport
From photo to signed PDF, in one tool.
AEC Field Inspection Workflow  ·  LRL Associates  ·  2026
01 — The Problem

Inspection reporting is still glued together by hand.

What an inspector does today

Shoot 50–500 photos on site. Download to laptop. Open Bridge or a folder. Cross-reference each photo against codes in a printed standard. Type findings into Word. Drop images one-by-one. Re-format for the firm template.

What it costs

4–8 hours of post-site work per inspection. Inconsistent deliverables across staff. No durable link between a photo, a code reference, and the report it appeared in. Easy to lose a finding when the spreadsheet shifts.

02 — What TAR Is

One tool. Three modes. One signed PDF.

A local Flask web app that opens at localhost:5000. Drop a folder of inspection photos. Tag, group, write — every change persists to SQLite, JPEG EXIF, and XMP sidecars at the same time.

T Title

Capture metadata: title, subject, notes. Keyboard-first, autocomplete from prior entries.

G Tag

Press A–Z, draw a region. Code-linked, severity-colored, regulation-referenced.

P Group

Cluster images into named areas — by time, GPS, both, or folder. Drag, split, merge.

03 — Title Mode

Metadata at the speed of typing.

  • Two fields, one keystroke each. Title and Subject — Enter advances through fields, then to the next image.
  • Autocomplete from every prior entry in the folder — typos and naming drift get corrected on the fly.
  • Shift+Enter saves in place for batch cleanup of an existing area.
  • Propagate area names → image titles with one click. Don't retype what's already structured.

Designed for the inspector who doesn't want to look at the screen — eyes on the photo, hands on the keys.

04 — Tag Mode

Draw a box. Apply a code. Done.

  • Press a letter AZ → draw a rectangle on the photo.
  • Shift+letter → tag the whole image (no region).
  • One code, one region, one image — strict 1 : 1 : 1 rule prevents double-counting.
  • Click a coloured badge on the photo to remove that tag.

Tag definitions are loaded from tags.xlsx

Code · Issue Summary · Code Reference · Severity · Color. The same file feeds every downstream report.

S — Structural D — Defect C — Cosmetic M — Maintenance E — Electrical P — Plumbing
05 — Group Mode

500 photos → named areas, in seconds.

Four clustering strategies

Timestamp gap — split when minutes between shots exceeds threshold.
GPS radius — cluster photos within N metres.
Hybrid — timestamp first, then GPS-merge nearby clusters and GPS-split distant ones in the same time window.
Folder structure — respect what the inspector already organised.

Manual override always wins

Drag thumbnails between rows. Click a gap badge to split mid-area. Merge button between two areas. Re-clustering preserves anything the user hand-grouped.

Gap analysis shows orange when the next photo is far in time or distance — surfaces the splits the algorithm missed.

06 — Data Integrity

Three layers. Your data outlives the tool.

SQLite

.tagger.db — fast queries, source of truth during the session. Folders, images, tags, areas, junction tables.

JPEG EXIF

Codes written as IPTC Keywords + XMP-dc:Subject. Bounding boxes serialised as TAGGER_RECTS JSON in UserComment.

XMP Sidecar

Portable durable record alongside each image. Move the folder, the data moves with it.

If the database dies, sync rebuilds it from XMP. If the app dies, the photos still carry every code and region they were ever tagged with — readable in Bridge, Lightroom, or any EXIF tool.

07 — The Pipeline

One toolchain. Four interchangeable parts.

TagFactorydefine codes
tags.xlsxcontract
TagAndReportcapture
ReportFactorylayout
PDF / DOCXdeliverable
  • TagFactory defines tag sets per inspection type — ladders, exteriors, electricals, each with its own codes.
  • TagAndReport is the field-data layer.
  • ReportFactory is a visual template builder; engine renders directly.
  • Every stage reads/writes plain files — no proprietary lock-in.
08 — Engineering

Boring tech, deliberate choices.

Local-first by design

No cloud, no SaaS, no telemetry. Inspection data — often confidential, sometimes privileged — never leaves the laptop. Defensible by default.

Minimal dependency surface

Stdlib HTTP (urllib). Raw sqlite3, no ORM. Vanilla JS + Bootstrap, no npm. ExifTool as a single binary on PATH.

Non-blocking UI

EXIF writes, thumbnail generation, folder scans all run in daemon threads. The UI never freezes during a 1000-photo ingest.

Windows-first, AEC-shaped

Built for the actual hardware engineers use. Forward-slash URIs, os.path for filesystem, ExifTool for the EXIF quirks of iPhone JPEGs.

09 — Return on Investment

Hours back, on every inspection.

Before — manual workflow

  • Download photos → ~15 min
  • Cull and rename → ~30 min
  • Cross-reference codes by hand → 90–180 min
  • Author Word doc, place images → 90–180 min
  • Reformat to firm template → ~30 min
  • Total: 4–8 hrs per ~100-photo inspection

With TagAndReport

  • Auto-ingest folder → seconds
  • Group mode auto-clusters → seconds
  • Tag mode in keyboard flow → 30–60 min
  • Title pass + propagate names → ~10 min
  • Generate PDF/DOCX → seconds
  • Total: ~1.5 hrs — and the report is consistent across staff
~75%
time reduction
1 : 1
code-to-region traceability
0
cloud dependencies
3
durable persistence layers
10 — What's Next

Roadmap.

Near-term

WYSIWYG report editor — render pages to PNG, overlay drag handles, write layout overrides back to TOML. All layout values already templated.

Area-level GPS pins — one map pin per area centroid, replacing per-photo clutter.

Medium-term

Multi-site reports — combine areas across folders into one consolidated deliverable.

FieldLog → TAR adapter — mobile field-capture pipes directly into the tagger queue.

AI tag suggestions — local YOLO/OCR backends already prototyped; suggest codes from the photo itself.

11 — Try it
From photo to signed PDF.
In one tool. On your laptop. Today.
cd TagAndReport  ·  python TagAndReport.py
localhost:5000  ·  LRL Associates  ·  2026