Clients

One card per creator: the master folder we watch, and the account folders the edits land in.

Activity

Who is taking content out, and which clients are putting content in.

Employees

clips downloaded from the Post queue
Employee24 h7 days30 daysAll timeof which picturesLast

Clients

clips uploaded to their master folder
Client24 h7 days30 daysAll timeLast

Click an employee for the list of what they downloaded. Uploads are stamped with the time the file was created in Drive, so clips that arrived before this page existed are counted on the right day. Downloads count from the moment an employee pressed Download in the app.

Overview

What the worker is doing right now.

Recent activity

last 8 jobs
#SourceJobStatusOutput

New job

Point it at a Drive folder β€” the worker does the rest.

  1. 1
    A label, so the dashboard groups work by creator.
    Link, folder id, or its exact name. Only clips sitting loose in the folder count; anything inside a sub-folder (Posted, Scripts…) is left alone.
  2. 2
    One username per account, comma separated β€” each gets its own uniquely edited copy in its own folder. Leave empty to put everything in one folder.
    the folder's own β€œv1”
    Your source files are never touched.
  3. 3
    How many variants of each clip land in the one output folder.
Advanced β€” recipe, mirroring, hooks
Leave on β€œfull” unless you are running a burner test.

Watched folders

Drop clips in these and they process themselves.

Monitor a folder

checked every few minutes
  1. 1
    Whatever is already in there is left alone β€” only clips added after you add the watch get processed.
  2. 2
    One username per account, comma separated β€” each gets its own uniquely edited copy in its own folder. Leave empty to put everything in one folder.
  3. 3
    Per account, once accounts are listed.
Advanced β€” recipe, mirroring, back catalogue
β€œProcess what's already in there” only applies the first time a folder is watched. Re-adding a folder this worker has scanned before keeps its existing seen-list, so the back catalogue stays left alone either way.

Watched folders

checked every 20s when idle, every 5 min during a job
WatchingDelivers toMakesStateLatest

Jobs

Everything queued, running and finished.

All jobs

#SourceJobStatusOutputDetails

Live

What the worker is doing right now, refreshed every 2 seconds.

Current job

Worker log

last lines from the PC Β· newest at the bottom
β€”

Similarity

How alike each edit is to its source, through the matcher Meta has published, not a human eye.

By recipe

median bits apart out of 256 Β· lower is more alike Β· 31 = same picture, 70 = probably related
RecipeFilesBits apartFrames matchedVerdicts

Every file

JobFileAccountRecipeBits apartFrames matchedVerdict

How this is measured

Meta's published near-duplicate matcher is PDQ: the frame is reduced to luminance, downsampled to 64Γ—64, transformed into its 16Γ—16 lowest frequencies, and turned into 256 bits against the median. Two hashes within 31 bits are treated as the same picture; Meta documents 70 as the loose end of β€œprobably related”. Their video matcher, TMK+PDQF, is built on the same per-frame feature.

The worker runs that on 8 evenly spaced frames of the source and of every file it makes, compares them by position (one neighbour either side, so a trim or speed change does not misalign them), and also tries the mirrored hash, because Meta's matcher checks every flip and rotation. A mirror is not a different picture to it.

Measured on two real 4K clips: a plain re-encode sits 2 bits away; soft 16–32; inset 30–46; zoom 44–56; flip 50–54. Nothing invisible gets past 70. What separates copies beyond the frame is time, audio and the file itself, which this does not measure, and Meta does not publish its full matcher.

Settings

What is configurable here, and what lives on the worker PC.

Connection

Signed in as
β€”
Supabase project
qwjrkhgyteytqbsquzon
Queue table
fma_jobs β†’ fma_variants β†’ fma_watches
Worker
β€”

Phone app

the Post queue installs on any iPhone or Android and downloads straight from Google at full quality
Lets the app pull the exact file from Google's API on the phone, with no login and no re-encode. Make one at console.cloud.google.com β†’ APIs & Services β†’ Credentials β†’ Create credentials β†’ API key, then restrict it: API restrictions β†’ Google Drive API only; Website restrictions β†’ this dashboard's address. The Drive API must be enabled on that project (it already is for the worker). Without a key the app falls back to Drive's own download page, which needs a Google login with access.
Onboarding a phone
Send them the link to post.html and their login. On Android, Chrome offers Install on the page. On iPhone, open it in Safari, tap Share, then Add to Home Screen. It then opens like any app.
What Download does
Marks the clip taken, pulls the bytes from Google, then on iPhone opens the share sheet (Save Video, or straight into Instagram); on Android saves to Downloads. Full quality, the same file the worker uploaded.

Logins

employees use the Post queue app; admins use this dashboard
A short username is fine β€” they sign in with exactly this.
Set it here and give it to them. You can reset it later from the list.
Comma separated. Leave empty for admins.
LoginNameRoleAccounts

Alerts

so a failure overnight does not wait for someone to open this page
Slack and Discord webhooks are detected automatically; anything else gets a plain JSON post, which suits Zapier, Make, n8n and ntfy. Leave empty to turn alerts off.
Minutes without a heartbeat. Checked in the database every 5 minutes, so it still fires if the PC loses power or network.

Processing defaults

baked into the tool β€” change per job above, or in the repo
Crop-zoom
4–8 % of the frame β€” the fingerprint does not reward going harder, so it stays invisible
Mirroring
Portrait clips with no on-screen text only. Landscape stays landscape; burned-in text is found by OCR on 5 frames and never mirrored
Inset (blurred border)
Off β€” it moved the fingerprint 3 points for the most visible edit in the set. Pinnable as a soft 3 % edge for burner tests
Quality
H.264 qp 17, 192k audio, delivered at up to 1080Γ—1920 β€” SSIM 0.991 against a near-lossless reference
Rotation
Capped so the zoom margin absorbs it (no black corners)
Speed / pitch
0.97–1.03Γ— Β· pitch Β±1.5 %, tempo-corrected
Jump-cut threshold
βˆ’35 dB for 0.35 s β€” verified accurate to 15 ms on known speech
Captions
faster-whisper small, skipped below 0.5 language confidence
Output folders
one @account folder per Instagram account, beside the source, reused on every run

Worker PC

set on the machine, not from here
Scan interval
FMA_WATCH_SECS β€” 20 s while idle, 5 min during a job
Heartbeat
FMA_HEARTBEAT_SECS β€” default 30 min into worker.log
Single-instance lock
FMA_WORKER_PORT β€” default 47615
Scheduled task
fmaspoof worker β€” runs at boot and logon, idle priority, session 0
Stopping it
Stop-ScheduledTask leaves the poller alive β€” kill the python process too
The worker is one PC. If it is off or asleep, nothing processes β€” jobs simply stay queued.
Everything above is documented in the repo README.

Edit master folder

Pointing this at a different folder keeps the account folders you already have. The new folder is baselined on the next scan: what is already in it is left alone, only new clips get processed.
One per account, comma separated. Each gets its own folder beside the master.
β€œsoft” keeps only the invisible changes: a 1–2 % crop, colour, timing, audio and metadata.