Insight for elective practices.

News & Resources
Reputation
How Patients Choose a Doctor Now — and Why a Directory Often Decides First
The shortlist gets built before a patient ever reaches your website — on reviews, the map pack, AI answers, and a new layer of independent directories. Here's how those lists get made, and how to make sure you're on them.
Social
110 Plastic Surgeons With the Biggest Instagram Followings
A live research archive: the 110 plastic surgeons we found with the largest Instagram audiences — each with their profile, website, Google rating, domain authority, and site speed, captured June 2026.
SEO & Search
How Google Decides Who Wins Atlanta's Facelift Search
A full teardown of Atlanta's facelift market: who ranks, why, and exactly what the top practices do on Google, schema, and site speed. Our 2026 competitive research report.
Video
Video-First SEO: How a Surgeon on Camera Out-Ranks Every Text-Only Practice in Town
Google stopped rewarding the most pages and started rewarding the most trust. A surgeon on camera out-ranks the text-only practices in your market. Here's the full playbook.
Testimonials
The 3-Act Patient Testimonial That Books Consults, Not Just Collects Stars
A five-star review is proof; a patient's story is persuasion. The testimonials that actually book consults follow the same three acts every great story does.
Own your assets
Who Really Owns Your Website, Domain & Google Profile? For Most Practices, It Isn't Them
If you ever sell, relocate, or switch agencies, one question decides how painful it gets: who actually owns your digital front door? For most practices, it isn't them.
Funnels & CRO
Traffic Is Vanity: The Funnel That Turns Clicks Into Booked Consults
Traffic is vanity; a booked consult is revenue. Most practice sites collect visitors and quietly lose every one. Here's the funnel that turns a click into a calendar appointment.
Before / After
Before-and-After, Reinvented: Why Two Flat Photos Lose to Transformation in Motion
The before-and-after is the most persuasive asset in elective medicine, and two flat photos barely scratch it. In motion, it becomes the closest thing to watching the decision itself.
A decade of what actually works in elective-medicine marketing.
Before and after · the system

Eight stages from a folder of photographs to finished slides

A practice hands over a drive. The system finds the work on it, sorts every frame, pairs the befores to the afters, puts both frames at one scale with the eye line level, renders every format, and sheets the batch for review. Each stage writes files and stops at a gate a person looks at.

8Stages
13Rules
5Output formats
75Folders found
37Views matched
0Photos uploaded
The tool

Put a before and an after at one scale

Load two photographs, click the same two fixed points on each, and the pair comes back at one size with the anchor line level and the frame cropped to what both photographs contain. The same two points download as a file the batch matcher takes with --points, which is how a body case gets an anchor at all. The pictures are read by this page in your browser. Nothing is uploaded and nothing is stored.

Step 1Drop the before on the left and the after on the right, or click a panel to pick a file.
Step 2Click two points on each photograph that the procedure did not change. Pupils for a facelift. Nostril and chin for an eyelid case. Shoulder marks for a body case.
Step 3Click the same two points in the same order on the second photograph. The order sets the rotation.
Step 4Read the numbers, drag the wipe through the face, and download the matched pair.
BEFORE0 of 2 points
Drop the before photographor click to choose a file
JPEG, PNG, HEIC-exported, any size
AFTER0 of 2 points
Drop the after photographor click to choose a file
The pair may be portrait and landscape
BEFORE · MATCHED
AFTER · MATCHED

Take these two points to the batch run

The points file is the anchor for every other view of the same person, and it is the only anchor a body case has. Download it, then run the matcher over the raw frames with it.


        
The photographs are decoded by this page and drawn to a canvas on your own machine. There is no upload, no server call and no storage. Close the tab and nothing remains. Patient photography still needs the patient's written consent before it is published anywhere.

What the aligner does with the two points

The two points give a distance and an angle on each photograph. The photograph whose anchor distance is the larger share of its short side is the tighter frame, and it becomes the reference. The other frame is rotated and scaled by one number in both directions until its two points sit exactly on the reference's two points. The output frame is then grown outward from the anchor until it would leave one of the two photographs, which is the largest frame both pictures actually contain.

What it refuses to do

It will not stretch one axis to make a pair line up. A non-uniform scale slims a jaw or widens a smile, which fabricates a result. It will not enlarge past the point where the softer frame goes visibly soft without saying so in the readout. It will not crop into a region only one of the two photographs holds.

The pipeline

Eight stages, each with a gate

Every stage writes files to disk and then stops. The gate is a page or a sheet a person looks at, not a number in a log. Nothing moves forward until the gate is passed, so an interruption costs one stage rather than the batch.

The rules

Thirteen rules every slide obeys

These are the decisions that were wrong at least once and are now fixed in code. Each one is enforced by the matcher or the renderer, not left to the person building the slide.

Show the whole person and the whole smileNever cut a head. Never cut a mouth in half. Where a head will not fit a cell, the photograph mats inside it.
Uniform scale onlyScale, rotate, shift. Never stretch, never shear. A non-uniform scale slims a jaw or widens a smile, and that is a fabricated result.
Frame to the least common denominatorThe slide shows what both photographs contain, never a region only one of them holds.
The tighter frame winsIt holds the least information, so it sets the field of view. Tightness is the anchor distance over the frame's short side, never its height.
Anchor on what the procedure does not changeMatching a blepharoplasty eye to eye scales away the change the slide exists to show.
Before and after travel togetherA lone after proves nothing. The pair is the unit of work, in the folder, in the render and in the delivery.
Never identify a case from a photographNot the treatment, not the diagnosis. The practice's own words are the only clinical statement on file. Before and After are the only captions true of every case.
Centre on the eyes, not on the headThe point between the eyes goes on the centre line across and 42 percent down. A head centred by its box drifts as the hair changes.
One scale for the pairThe before and the after share the smaller of the two scales, so neither is enlarged past what its own pixels hold.
Verify, do not eyeballEvery step writes a number and a proof sheet. Look at the sheet.
Filenames never classify a picture, they may pair oneA before and after word in two filenames is the practice saying which two frames go together. What is in the frame is decided from the pixels.
A file time is not a shutter timeA cluster of files copied at 13:20 is a copy, not a sitting. Every record says whether the date came from the camera or the file, and a plan built on file times says so on every pair.
Read the orientation tagA camera held upright stores the pixels sideways with a tag that says rotate. Ten of Carlin's 81 raw frames carry that tag and were matched sideways until every read was routed through one function that applies it.
Geometry

The anchor changes with the procedure

The face detector returns five points. Which of them the transform is fitted on decides whether the slide shows the change or hides it. Align on the part that was operated on and the operation is scaled away.

eye line · 42% down the frame right eye left eye nose right mouth left mouth iod tightness = iod ÷ the frame's short side

Interocular distance over the short side, never over the height. Practices shoot the before in portrait and the after in landscape on the same camera. Measured against height those two read as a 42 percent difference in framing when the head is the same size in both, and the wrong frame gets picked as the reference.

ProcedureAnchored onBecause
Facelift, neck lift, skineyesThe eyes do not move. Everything below them does.
Blepharoplasty, brow liftnose+mouthThe eyes are the result. Anchoring there erases the lift.
Rhinoplastyeyes+mouthThe nose is the result and is dropped from the fit.
Veneers, orthodontics, lips, fillereyes+noseThe mouth is the result. The upper face holds still.
Hair transplantallThe whole face is unchanged. The hairline above it is the result.
Breast and bodytwo clicked pointsNo face, no detector. Two marks a person picks set the scale and the roll, and the matcher takes them with --points.
Measured, not assumed. The detector wobbles 4 percent with input size, so detection runs twice with the head normalised to 320 pixels. A random-sample fit on five points lands several percent off, so the fit is closed-form least squares. A free affine refinement shears the face, so uniform scale is swept and only rotation and shift are solved. Raw-tone correlation goes negative when hair or wall colour changes, so refinement runs on gradients inside a mask over facial structure.
A matched pair, measured

One facelift front view, end to end

Carlin Plastic Surgery, front view, built 2026-09-11. Two camera originals off the practice's drive, one portrait and one landscape, shot against two different backdrops. Every number below is read out of that case's record on disk.

MeasurementBefore · DSC_0054After · DSC_0042What it decided
Pixels1944 × 2896 portrait2896 × 1944 landscapeShort side is 1944 on both, so the two are comparable
Interocular372.9 px342.3 pxThe after is the wider frame
Tightness0.19180.1761The before is tighter, so the before is the reference
Head roll0.33°−3.45°3.78° of tilt to take out
Backdrop#808482 grey, even#0A0A0A black, evenGrounds disagree, so the slide uses the theme instead of the wall
Anchoreyes · facelift leaves the eyes aloneTwo landmarks drive the fit
Transform on the afterscale 1.0675 · rotate 4.40° · shift −556.3, −16.4 pxOne scale in both directions, no shear
Landmark drift11.8 px, 3.2% of interocularInside tolerance
Alignment score0.3249 from the landmarks, 0.5172 after refinementRefinement earned 0.19
Common crop1883 × 1642 out of 1944 × 2896The largest frame both photographs hold
The alignment score is the correlation of the unchanged part of the face after the transform, where 1.0 would be pixel perfect. It is a check on the geometry, not a grade on the surgery. A facelift changes the lower face by design, so a front view that scores 0.52 on the structure above the change is a good match, and the number exists to catch the frame that scores 0.05 because the detector locked onto the wrong head.
The batch

Ten cases, thirty-seven views, where each one landed

The whole Carlin set run through the matcher. Face cases carry a landmark anchor and a drift figure. Body cases have no face to anchor on, fall back to matching content, and every one of them is held for review by eye. This table is the argument for the body anchor being the next piece of work.

10Cases
37Views
2Face cases
8Body cases held
5Formats each
0.24Median alignment
CaseProcedureSubjectViewsAnchorBest viewAlignment rangeRuling

Alignment is the correlation after refinement, per view, read from each case record. Ruling is the stage 6 decision: a face case with a landmark anchor and drift inside tolerance ships; a body case with no anchor is held until a person has read its proof sheet.

Stage 0, run once

Seventy-five folders on one machine

The finder walked every project drive, the user's Pictures, Downloads, OneDrive and Dropbox folders and scored each folder on its name, its filenames, its image count and how many of those are camera originals. Nothing is decoded and nothing is moved. Our own outputs are excluded, and sibling case folders roll up so a ten-case set reads as one row.

ScoreFolderImagesWhy it scored
15.7ACTIVE-CARLIN \ from-brenda \ bna8110 case folders, before and after words in filenames, 45 camera originals
15.0ACTIVE-CARLIN \ content \ bna-census3055 case folders, 184 filenames carrying before or after, 64 camera originals
14.7ACTIVE-LACERNA \ 2025 new work \ case 116Named before and after, all 16 camera originals
13.0ACTIVE-CARLIN \ new photos from SOMA \ August-202611811 case folders, finished slide sizes in the names
13.0ACTIVE-JONES \ 2026-2-10-JONES-BNA2716 filenames carrying before or after, 6 camera originals
12.0ACTIVE-ODANIEL \ BNA from site morphs10Retouched portraits, already published
11.0Dropbox \ 2019 backup \ O'Daniel face galleries22411 case folders never on the board
11.0Dropbox \ Lynam before and after books, 2019104104 camera originals, nothing derived
11.0Dropbox \ Langdon face slides, 2024413 case folders, 46 filenames carrying before or after
10.7Dropbox \ Hetter lecture support \ bensimon case18A case inside a lecture folder, 10 camera originals

Top ten of 75. The Dropbox layer underneath was the finding: four practices' complete galleries, none of them on any list, some of them the only surviving copy of a 2019 shoot. A phone is a folder too. Point the finder at a Camera Roll or a practice's shared Dropbox and it reads the same way.

Stage 1, run on a real folder

Twenty-seven files sorted into five buckets

The Jones hair restoration folder, surveyed and planned. The survey measures every frame and groups them into sittings by shutter time. The plan sorts each frame into a bucket and then pairs the keepers, twice: named twins first, then sittings a day or more apart matched by class and nearest tightness.

18 keep

The raw material. Camera originals and full-size exports with a subject the matcher can work on.

5 composite

Slide-sized with no face, or named after-before or vert. A finished graphic from a previous vendor, not a source.

4 low-res

Short side under 500 pixels or under 0.35 megapixels. Web thumbnails, including one that is a site logo.

5 named pairs

Two filenames differing only by a before or after word. Typo tolerance found man-bwefore3 and paired it to man-after3.

2 check pairs

Sittings 17 years apart and one date taken from a file time rather than the camera. Flagged yellow on the plan page, never silently shipped.

2 orphans

Two Nikon frames from 2001 with no partner in any sitting. A lone after proves nothing, so neither is used.

The gate is the plan page, not the plan file. Every proposed pair renders as two pictures with the filenames, sizes, subject and dates under them, check pairs on a yellow ground, then every bucket in full. A person confirms, swaps or strikes each pair before a single frame is matched. A pairing accepted in a table of filenames is a pairing nobody looked at.
Honest inventory

What is built and what is not

The gaps are listed because a system that hides them ships a bad slide. Each open item names the work that closes it.

AreaStateDetail
Finding the work on a machineBuilt75 folders ranked in one pass, Dropbox and phone folders included
Sorting a folder into casesBuiltFive buckets, named twins, sitting pairs, a plan page as the gate
OrientationFixed 2026-09-16Every read applies the EXIF tag. Ten Carlin frames were matched sideways before it
Face matching and scalingBuilt and measuredFive landmarks, five anchor sets, closed-form similarity fit, gradient refinement
Body and torso matching, by handBuilt 2026-09-16Two marks a person picks are passed to the matcher with --points. It measures the distance and the angle between them exactly as it measures an eye line, and reports how far refinement walked from the marks. The aligner above writes that file
Body and torso matching, automaticNo detector8 of 10 Carlin cases are body cases. Without points they fall back to content matching and every one is held. A shoulder line, nipple line, navel or silhouette fit is the next piece
Same person across sittingsNot builtPairing is by filename or by sitting. Face recognition across a folder of many patients is not written
Rendering every formatBuilt16:9, 4K, 9:16, 1:1 and 4:5 per case, layout following the subject, head box carried through the transform
A practice's own slide cardPartialFive studio themes with the ground sampled from the photograph. Carlin's mahogany card with the gold hairline is not reproduced
Contact sheets and case pagesBuiltOne sheet per batch, an index with the numbers, a page per case carrying every format and both proof sheets
Quality control rulingsPattern onlyThe checklist and the rulings file exist. No command writes the ruling onto the case record yet
Delivery namingConvention onlyFolder convention and read-me are written by the organiser. The slide renamer and the JPEG and WebP web copies are not built
This alignerLive on this pageTwo clicked points, uniform scale, common crop, four proofs, three downloads, nothing uploaded
Usage

The whole run, one command at a time

The command-line side runs on Python with OpenCV and NumPy, plus Node 18 and Chrome for the renderer. Each command writes into one output directory and prints what it wrote.

A practice from scratch

# 0 · rank every folder on the machine
python find.py --out reports/before-after

# 1 · measure the folder, then propose the cases
python survey.py "D:\PRACTICE\raw" --out work/survey
python organize.py work/survey/survey.json \
       --out work/plan --practice "Practice Name"
# open work/plan/plan.html and confirm every pair

# 2 · the house decisions, once
edit work/house.json

# 3 · prove it on one case, then on the strongest few
python build_cases.py work/plan/plan.json --out build \
       --procedure facelift --faces-only
node render/slide.mjs build/case-01

# 4 · the full pass
python build_cases.py work/plan/plan.json --out build
node render/slide.mjs build

# 5 · sheet the batch
python gallery.py build --title "Practice Name"

# 6 · rule on every case against the checklist
# 7 · deliver
python organize.py work/survey/survey.json --out delivery \
       --practice "Practice Name" --apply

Reading a pair before you build it

# what the detector sees in one pair, before you build anything
python match.py report before.JPG after.JPG

# one pair, one proof sheet, no case folder
python match.py pair before.JPG after.JPG \
       --on nose+mouth --out proof/

# one case folder that already exists, re-matched
python match.py case build/case-01 --on eyes

The flags that matter

--procedurePicks the anchor set from the operation name
--onOverrides it with eyes, eyes+nose, eyes+mouth, nose+mouth or all
--flip before|afterMirrors one side when the practice shot opposite profiles
--subject face|smile|bodyOverrides what the detector decided the frame is
--faces-onlyBuilds the face cases and skips the body cases still waiting on an anchor
--rootPoints the builder at the photographs when the folder has moved since the survey
--forceRebuilds a case that already carries a record. Without it a second run costs nothing
--pointsTwo marks per frame, picked by hand. The only anchor a body case has. The aligner on this page writes the file
--applyThe one flag that copies files. Everything else only reads
Nothing before --apply touches a source file. The survey, the plan, the match and the render all read the originals and write somewhere else. A practice's drive comes back exactly as it went in.

Send us the drive

Most practices have four or five folders of before and after photography and no gallery. The first pass is the finder and the plan page, which costs nothing to look at and tells you what is actually on the drive before anyone builds a slide.