Install & Permissions
CaptureKey is distributed through PortalKey under Software. Install the APK the same way you install other Shatterproof Android apps; after the first install, the app keeps itself current through its built-in update check. On first launch, Android will prompt for:
- Notifications - Allow these. They carry messages from Operations and other photographers, and they power the persistent SMID notification.
- USB access - Requested each time a camera is attached. Check Always allow / Use by default on the dialog so it doesn't pop up mid-event.
No storage permission is needed. Imported photos live in CaptureKey's own app folder, and the optional Import Photos menu item uses the system file picker.
Sign In
If you aren't signed in, the app opens directly to the login screen. The normal tabs and top bar are hidden until you authenticate.
PLACEHOLDER IMAGE
assets/images/CaptureKey/Login.png
Screenshot: login screen — logo, username/password fields, Log In button, Scan Login QR button.
There are two ways in:
- Username & password - Your normal Shatterproof Media (PortalKey) credentials. You don't need a separate CaptureKey account, but the account must be staff level or above.
- Scan Login QR - Scans a one-time login code generated for you in PathKey by an admin. Each code works once and expires, and it can carry the event you're scheduled for so the app lands directly in it. Handy for handing a pre-staged phone to a photographer without typing a password.
Your session is remembered until it expires, so you can close and reopen the app without signing in again. A login also triggers an immediate update check.
Scanning a QR while someone else is signed in
Scanning a login QR from the user menu while another account is active shows a Replace Current User? warning — confirming replaces the signed-in user, and that user's unsynced local changes may be abandoned. Finish or end the previous session first when possible.
Pick an Event
Each event is its own sandbox. Assignments, photos, messages, and notes from one event never leak into another, and a device is attached to one event at a time.
After sign-in the app resolves your event in this order:
- The event this device was already using (survives app restarts and sign-outs).
- The event suggested by the server — the active event nearest to now that you're on the roster for — or the event embedded in your login QR.
- Otherwise, nothing loads until you pick one yourself.
- To pick or switch manually, go to Session and tap Choose Event / Change Event. You only see events you're rostered on or have assignments in.
- If a photo imports while no event is loaded, the app forces the event picker open so the photo can be filed correctly.
Connect the Camera
CaptureKey speaks USB directly to Canon EOS cameras. No extra drivers, apps, or cables beyond a standard USB connection to the phone.
- Plug the USB cable into the camera, then into the phone.
- When Android asks which app should handle the USB device, pick CaptureKey and check Use by default.
- The app starts a tether session; if it doesn't, open Session, expand the Camera card, and tap Connect.
- The camera icon in the top bar turns green ("Listening") within a few seconds.
- Trigger a test shot. It should appear on the Capture tab almost immediately.
Leave the card in the camera
The intended production flow keeps the capture destination on the camera card. CaptureKey downloads copies to the phone. Only enable Delete From Card After Import if you're confident you want that; see Canon Camera Notes.
Typical Flow
Most events follow a loop like this:
Activate an assignment: tap its row on the Path tab (use the filter box to jump straight to a number), or tap Select on the Capture tab.
Shoot your photos. Every capture that arrives while this assignment is active is imported, quality-checked, and automatically tagged with it.
Tap Complete on the Capture tab (or on the Path overview card). The assignment is marked complete for the whole event, its photos queue for upload, and the app auto-activates the next open assignment on your list — a banner announces which one.
If a location has nothing to shoot, use Mark No Photos from the row's ⋮ menu on Path. That completes the assignment and flags it; if a photo is later retagged or uploaded onto it, the flag clears automatically.
If someone requests a return, you'll get a notification and the assignment moves to the Return Requested section in Path. Re-activate it, shoot, and complete it again.
Why there's no Claim button
Assignments don't need to be "claimed." Activating one just tells your device to tag new photos with that number — two photographers can even have the same assignment active. Completing is the action that's event-global; use Assign to Me only when you want the row to move onto your list.
You can practice this exact loop hands-on in the Interactive Demo before ever plugging in a camera.
Capture Tab
Capture is your home base during the event. It shows the newest (or selected) photo from the camera, its quality results, its assignment tag, and its upload state.
PLACEHOLDER IMAGE
assets/images/CaptureKey/Capture.png
Screenshot: Capture tab with a photo that has a quality notice — active assignment card, preview with crop guide/face box, quality warning card, Recheck Quality button, badges, photo note card.
Elements:
- Active Assignment card - The assignment new photos will be tagged to. Complete finishes it and jumps to Path; when nothing is active, Select takes you to Path to pick one.
- Photo preview - Tap to open fullscreen (pinch to zoom, pan). Long-press and drag left to delete the photo — the red trash background confirms before it commits. Crop guides and face boxes overlay here when enabled.
- Quality notice - An amber card lists any issues found: blink detected, soft focus, over/underexposed, face near edge of frame. See Photo Quality Checks.
- Recheck Quality - Re-runs the quality analysis on the current photo, using the current settings.
- Assignment badge - The assignment this photo is tagged to. Tap it to retag this single photo; retagging does not change your active assignment.
- Upload badge - The photo's live upload state. See Upload States.
- Image Data - Opens a dialog with the photo's app metadata (photo ID, managed filename sequence, original camera filename, camera identity, tag source, upload state, quality issues, …) and its EXIF data. Text is selectable for copying into a report.
- Photo Note - Free text attached to this single photo. Notes sync to the server with the photo.
New captures automatically become the displayed photo. To review older photos, pick them from the Gallery — tapping a thumbnail there opens it here.
Gallery Tab
Gallery shows the photos imported to this device. Use it to review, retag, or delete in bulk.
PLACEHOLDER IMAGE
assets/images/CaptureKey/Gallery.png
Screenshot: Gallery grid with a few photos — assignment/upload badges on thumbnails, one photo with the quality warning icon, the Uploaded visibility toggle and Delete All in the header.
Elements:
- Thumbnail grid - Each card shows the filename, assignment badge, upload badge, timestamp, and any note. A warning icon in the corner marks photos with quality issues. Tap a photo to open it on Capture; long-press to start multi-select.
- Uploaded toggle - By default the grid hides photos that have finished uploading (the header shows how many are hidden). Tap Uploaded to show or hide them.
- Selection mode - After a long-press, tap to add or remove photos. The header shows the count and exposes Retag and Delete.
- Retag - Reassigns every selected photo to the same target in one step (or clears their tags). Useful if you shot someone into the wrong suite.
- Delete / Delete All - Always confirms first. Deleting a photo that was already uploaded only removes the local copy on the phone.
Be deliberate with Delete
Deletion on the phone is not reversible from within the app. If a photo hasn't uploaded yet, deleting it means the photo is gone. Upload first when in doubt.
Path Tab
Path is the event-wide view of every assignment — the same list everyone else on the team sees. Pull down to refresh it from the server.
PLACEHOLDER IMAGE
assets/images/CaptureKey/Path.png
Screenshot: Path tab — session overview card with Active/Total/Completed chips, the filter box, and a few section cards (Your Assignments with an active row highlighted, Return Requested, Skip List with a red SKIP row).
- Session overview card - Event name, venue, when your path session started, plus Active / Total / Completed counters. When an assignment is active you also get Complete Active and Clear Active buttons here.
- Filter box - The fastest way to find an assignment. It opens with a number keyboard (assignments are usually numbers); tap ABC to switch to text and search by name. Matches filter every section live.
Assignments are grouped into sections:
- Your Assignments - Open items assigned to you.
- Return Requested - Items someone asked for another pass on. Treat as higher priority.
- Unassigned - Fair game for anyone to pick up.
- Skip List - Red rows with a SKIP flag. Do not disturb unless Operations tells you otherwise.
- Other Assignments - Assigned to someone else. Visible for context.
- Completed - Finished rows, with who completed them and when.
Tapping a row activates it on this device. The active row is highlighted with an Active chip. Activating a Skip-listed row is allowed but shows the red warning styling.
Row actions (⋮ menu):
Not every action shows on every row — the menu adapts to the assignment's state.
- Assign to Me - Pulls the assignment onto your list, replacing the previous owner.
- Complete Assignment - Completes without needing to activate first.
- Add / Edit Note - Free-text note on the assignment itself, visible to the whole team.
- Show Retrieval QR - If the event has a media-code URL configured, shows a QR guests can scan to retrieve this location's photos.
- Mark No Photos - Completes the assignment and flags it as having no photos.
- Request Return - Flags the assignment for another pass and notifies the photographers involved plus Operations.
- Reopen Assignment - Moves a completed or return-requested row back to open — and assigns it to you.
Session Tab
Session holds everything that isn't part of the per-photo, per-assignment loop: the event this device is attached to, the camera connection, upload status, and the activity log. Pull down to refresh.
PLACEHOLDER IMAGE
assets/images/CaptureKey/Session.png
Screenshot: Session tab — Event Session card (photographer, venue, chips, Export Session + End Session buttons), Camera card expanded with Connect/Disconnect and the delete-from-card toggle, and an Uploads card with a couple of pending rows.
- Event Session card - The active event with photographer, venue, event start, and session start, plus Assignments / Completed / Unread counters. Change Event opens the event picker; Export Session starts a transfer; End Session opens the wrap-up dialog.
- Camera card - Connection state with Connect / Disconnect buttons, a status line, the imported-photo count, and the connected camera's identity (name, stable ID, serial, USB IDs) — useful when reporting a misbehaving body. Also holds the Delete From Card After Import switch (off by default; removes the camera copy only after a successful import).
- Uploads card - Appears whenever photos haven't finished uploading. Summarizes counts by state and expands to per-photo rows with progress bars, error text, attempt counts, and per-photo Retry / Cancel buttons, plus Retry All. See Upload States.
- Session Activity - A running log of what the app has done (imports, uploads, assignment changes, sync results). The newest entry always shows; expand for history.
- Test - Sends a test notification through the server to this device. Use it to verify notifications end-to-end before an event.
Settings
Open Settings from the user menu (your profile picture, top-right). Settings are grouped into collapsible sections:
PLACEHOLDER IMAGE
assets/images/CaptureKey/Settings.png
Screenshot: Settings dialog with the Photo Quality section expanded, ideally showing a "From PathKey" caption on one field and "Overriding PathKey — Reset" on another.
General
- Dark Mode - Dark theme throughout the app.
- Lock Rotation - Keep the app in portrait on this device.
- Notification Sound / Vibration - Per-device alert behavior for incoming notifications.
Display & Power
- Keep Screen Awake - Keeps the screen on while a camera is connected.
- Dim When Idle - With Keep Screen Awake on, dims the screen after a configurable idle timeout to a configurable brightness. Touch the screen to wake it back up.
- Notification Check Interval - How often the app polls the server for new notifications. Faster uses more battery and data.
- Update Check Interval - How often the app checks for new releases in the background. A check also runs at every login.
Photo Quality
The quality-check controls — see Photo Quality Checks for what each does. These fields can be pre-set per event by the server:
"From PathKey" and "Overriding PathKey"
When the event's PathKey configuration sets a quality field, the field shows a From PathKey caption. You can still change it — the field then shows Overriding PathKey with a Reset link, and your override lasts only for the current session on this device. It is never saved as the device default. Fields PathKey doesn't set behave normally and persist on the device.
Admin
Visible only to admin/super accounts: edit the device SMID and add the SMID widget to the home screen.
Notifications & Messages
Everything event-wide — messages, return requests, upload failures, system notices — shows up behind the bell in the top bar. Unread items bump the badge and animate the bell, and (depending on your settings) play a sound or vibrate. The app checks the server on the configured interval.
PLACEHOLDER IMAGE
assets/images/CaptureKey/Notifications.png
Screenshot: Notifications dialog with one unread message (Reply / Mark Read buttons) and the collapsed "Read Notifications (n)" group, plus the Send Message button.
- Unread notifications are listed first; read ones collapse into a Read Notifications group.
- Tap a notification (or Mark Read) to mark it read; Mark All Read clears the badge. Read state is per-photographer and syncs to the server.
- Reply on a message opens a pre-addressed response to the sender (Operations or the photographer who wrote it).
- Send Message - Compose to Everyone, Operations, or a specific photographer on the event. Two quick presets fill common bodies: Please visit this suite and Need reprints.
| Check | What it flags | Tuning |
| Blink Detection |
A detected face with closed eyes ("Blink detected"). |
On/off. |
| Blur / Soft Focus |
A detected face that appears out of focus ("Soft focus on face"). |
On/off plus a Blur Sensitivity slider — higher flags more photos as soft, lower only flags very blurry shots. |
| Exposure Check |
Photos that look significantly over- or underexposed. |
On/off. |
| Crop Guide |
Draws corner framing guides on the preview and flags faces near the edge of frame ("Face near edge of frame"). |
On/off plus a Guide Inset slider controlling how far from each edge the guides sit. |
| Show All Face Boxes |
Not a check — outlines every detected face on the preview instead of only problem faces. |
On/off. |
Offending faces are outlined on the Capture preview so you can see exactly which face triggered the flag. Use Recheck Quality on Capture to re-run the analysis after changing settings.
All of these live in Settings → Photo Quality, and each field may be pre-configured per event by PathKey (shown with a From PathKey caption).
How assignments read on the Path tab:
| State | Meaning |
| ACTIVE | The assignment your device is tagging photos with right now. One at a time per device, and device-local — it doesn't claim anything for anyone else. |
| YOURS | Open and assigned to you (the Your Assignments section). |
| OPEN | Unassigned. Anyone can Assign to Me or simply activate and shoot it. |
| RETURN | Someone requested another pass. Higher priority than normal; the row shows the reason when one was given. |
| SKIP | Operations says do not disturb. The app shows red warning styling if you activate one anyway. Completing a skipped assignment clears the flag. |
| NO PHOTOS | Completed with a "nothing to shoot" flag. The flag clears automatically if a photo is later retagged or uploaded onto the assignment. |
| DONE | Completed — shows who completed it and when. Can be reopened if work reappears. |
End Session
End Session is the event wrap-up for this device. Reach it from the user menu or from the Event Session card on the Session tab. It sends a recap summary to the server, then clears all event-scoped data — including every imported photo file — from the device.
PLACEHOLDER IMAGE
assets/images/CaptureKey/EndSession.png
Screenshot: End Event Session dialog — summary rows (assignments completed, photos imported/uploaded, …), a red "Session cannot end yet" blocker box, and the recap notes field.
Readiness blockers
The dialog will not let you confirm while any of these are true:
- An assignment is still active - Complete it or use Clear Active on Path first.
- Photos not uploaded - Anything Held Locally, Queued, Uploading, or Failed blocks the end. Retry failed uploads from the Session tab.
- Workflow updates still syncing - Pending local actions (completes, retags, notes) must reach the server first.
Recap notes
Use the notes field for anything Operations should know: which suites had issues, what equipment misbehaved, guest feedback worth logging. The text is stored with the session summary on the server.
What happens on confirm
- The app sends the session summary (assignments completed, photos imported/uploaded, camera identity, device SMID, recap notes) to the server. The call is idempotent — a retry won't create duplicates.
- On success, every imported photo file is deleted from the device and all event-scoped state is cleared.
- You stay signed in, back on the Session tab with no event loaded — ready to pick the next event or hand the phone off.
Point of no return
End Session is destructive on the device. Don't end until all uploads are complete — the blockers enforce this, so don't work around them by deleting un-uploaded photos unless you truly mean to discard them.
Logging out is separate
Logout in the user menu only clears who is signed in. If the event session hasn't been ended, the app warns you before letting you log out anyway.
Transfer Session
Export Session on the Session tab packages the device's session — a manifest plus every imported photo — and serves it over the local network for a print station or another machine to download directly, without going through the server.
PLACEHOLDER IMAGE
assets/images/CaptureKey/Transfer.png
Screenshot: Transfer Session dialog in the serving step — download QR code, URL underneath, status card ("Waiting for connection…" or a progress bar), End Transfer button.
- Make sure the receiving machine is on the same network — connect it to this phone's hotspot, or put both on the same Wi-Fi. The dialog has a shortcut to the phone's Hotspot / Wi-Fi settings.
- Tap Start. The phone starts a small local web server and shows a QR code plus the download URL.
- Scan the QR (or enter the URL) on the receiving machine. The dialog tracks progress: waiting → transferring with a percentage → complete, and counts how many times the bundle has been downloaded.
- Tap End Transfer when done. The dialog blocks accidental dismissal — the server keeps running until you end it.
If a transfer is interrupted, just rescan the QR to retry. The service also announces itself on the network via mDNS (_capturekey._tcp) so compatible receivers can discover it automatically.
Normal photo retrieval doesn't need this
Uploaded photos are stored on the server per event and pulled from there by SolidKey for fulfillment. Transfer Session is for the direct, venue-local handoff case — e.g. an on-site print station with no internet path to the server.
SMID
The SMID is the Shatterproof Media ID label for this device. It rides along with every uploaded photo and the end-of-session summary so Operations can trace which phone shot what. The camera body has its own SMID, resolved server-side from the inventory system by camera serial number.
Ways the device SMID is displayed:
- In-app readout - Small text under the top bar, always visible while signed in.
- Home-screen widget - Shows the SMID large, with buttons to display it as a QR code and to open this manual. Add it from Settings → Admin (Add SMID widget to home screen) or from the launcher's widget picker.
- Persistent notification - A silent, ongoing notification shows the SMID even when the app is closed. Requires notification permission.
Editing: only admin/super accounts see Settings → Admin, where the SMID can be changed (1-10 uppercase letters, numbers, underscores, or dashes). It is a device/app setting — it survives logout and event changes.
App Updates
CaptureKey updates itself from the Shatterportal software channel:
- A check runs at every login and then on the interval set in Settings → Display & Power.
- You can check manually any time: tap the logo → Check for Updates in the About dialog.
- When an update is found, Download & Install fetches the APK and hands it to the Android installer. The install prompt is the normal system dialog.
Mandatory updates
A release can be flagged mandatory on the server. When the app detects one, the update dialog opens non-dismissably — the app cannot be used until the update is installed. Failed downloads offer Retry.
The installed app must be signed with the same key as the downloaded APK or Android rejects the install — relevant only if a device somehow ended up with a debug-signed build.
Sync & Conflict Rules
Multiple photographers touch the same event at the same time. CaptureKey's model keeps things predictable:
- Active is device-local. Two devices can have "the same" assignment active. Each only tags the photos it sees.
- Complete is event-global, last write wins. The server records whoever completed it most recently. Completing also clears any skip flag and any pending return request on the row.
- Assign to Me wins the row. Reassignment replaces the previous owner, even if the row was already on someone's list. Last write wins; there's no locking at event scale.
- No Photos clears on new photo. If a photo is uploaded or retagged onto a No Photos assignment, the flag drops automatically. The assignment stays completed unless someone reopens it.
- Reopen takes ownership. Reopening a completed or returned row also assigns it to whoever reopened it.
- Skip is operator-managed. Operations sets and clears Skip through PathKey. Photographers see the red warning but can shoot it if instructed.
- Local writes are optimistic. Actions apply instantly on your device and sync to the server through an outbox in the background. Your own pending changes are overlaid on the server data so they always appear applied.
- Refresh protects your outbox. When the server has newer data but this device still has unsynced changes, a banner appears and the app waits instead of refreshing over them. A manual pull-to-refresh in that state asks for confirmation first.
Canon Camera Notes
CaptureKey talks to Canon EOS bodies directly over USB using MTP plus the Canon EOS event stream (a native libusb/PTP layer handles what Android's MTP API can't). Tested bodies include the R100 and the T5i. Other recent EOS bodies should work but may need a firmware check.
Compatibility notes
- Canon R100 - Works.
- Canon T5i - Works, with broadened handling for older Canon EOS event variants. If the status says "Listening" but no captures arrive, power-cycle the camera and reconnect.
- Other EOS bodies - Generally fine. If a specific body misbehaves, expand the Camera card on the Session tab, note the camera name / stable ID / USB IDs shown there, and send them to Operations.
Capture destination
Leave the camera set to write to its SD card. CaptureKey pulls copies. Writing to the card keeps a physical backup and is faster on tethered bursts than writing over USB.
Delete from card
If you turn Delete From Card After Import on (Session tab → Camera card), the app deletes each successfully imported photo from the card. This only runs after CaptureKey has the file and has registered it for upload. It does not run on failure.
Offline Behavior
Short-lived events often happen in venues with bad networking. CaptureKey is local-first:
- All workflow state is persisted on the device, scoped to your photographer and event. Camera capture, import, tagging, and quality checks work with no connection at all.
- Every event-global change you make (completes, retags, notes, no-photos, returns) is queued in an outbox and synced to the server in the background. The Session Activity log reports each sync as it lands.
- Photo uploads are handled by Android's WorkManager: when the device is online it drains the queue; when it's not, it waits. Failed uploads retry automatically the moment a network connection returns.
- Nothing needs to be pressed when the network comes back — outbox actions and uploads both resume on their own.