Overview CaptureKeyLastUpdated

CaptureKey is an Android app that ingests photos from a tethered Canon camera during short-lived events, tags each photo with the assignment it belongs to (for example, a suite or table), and keeps the whole team in sync through the server.

You shoot with the camera as usual. CaptureKey listens over USB, pulls every new photo to the phone, and automatically tags it with your currently active assignment. When you move on, those photos queue for upload while you stay online-first and offline-tolerant.

Capture tab overview 1 2 3 4 5 6 7 8 9
  1. Logo / Home - The CaptureKey mark. The top bar is always visible while you're signed in to an event.
  2. Camera Status - Shows whether a Canon camera is connected and listening. A small green dot means the app is actively watching for new captures; tap to refresh the USB connection.
  3. Notifications Bell - All operator messages, return requests, and reassignments land here. The red badge counts unread. The bell animates when something new arrives.
  4. Overflow Menu - Access settings, the "About" screen, and session controls.
  5. Top Banner - Transient banners appear here for things like New Active Assignment when the app auto-activates the next item on your list.
  6. Upload Chip - Every photo shows its current upload state. See Upload States.
  7. Assignment Chip & Actions - Shows the assignment the current photo is tagged to. Tap to retag; use the buttons beside it to Complete or mark No Photos.
  8. Quick Select FAB - Floating action button that jumps straight to the assignment picker. Type any number.
  9. Bottom Tabs - Gallery · Capture · Path · Setup. Capture is the default landing tab.

Getting Started

Install & Permissions

CaptureKey is distributed through PortalKey under Software. Install the APK the same way you install other Shatterproof Android apps. On first launch, Android will prompt you for a few permissions:

  • USB access - Needed every time you plug the camera into the phone. Check Always allow on the permission dialog so it doesn't pop up mid-event.
  • Notifications - Allow these so messages from Operations and other photographers can reach you even while the screen is off.
  • Storage - CaptureKey manages its own scoped folder for imported photos. You don't need to grant broad file access.

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.

Login screen

  1. Enter your normal PortalKey username and password. You don't need a separate CaptureKey account.
  2. Tap Sign In. On success, the app loads your photographer profile and jumps to the Capture tab.
  3. Your session is remembered until it expires. You can keep closing and reopening the app without signing in again.
Auto-loaded event

After sign in, CaptureKey checks whether you already picked an event on this device. If not, it auto-loads the event the server says you're scheduled for. You can always switch events later from Setup.

Pick an Event

Each event is its own sandbox. Assignments, photos, messages, and notes from one event never leak into another. You can only be attached to one event at a time per device.

  • Go to Setup and tap Switch next to the current event to pick a different one.
  • Switching events clears the local active assignment but does not delete photos that are still waiting to upload.

Connect the Camera

CaptureKey speaks USB directly to Canon EOS cameras. No extra drivers, apps, or cables beyond a standard USB OTG connection.

  1. Plug the USB cable into the camera first, then into the phone.
  2. When Android asks which app should handle the USB device, pick CaptureKey and check Use by default.
  3. The camera status icon in the top bar should pick up a green dot within a few seconds.
  4. 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.

Normal Operation

Typical Flow

Most events follow a loop like this:

  1. Activate an assignment from the Path tab, or type the number into Quick Select.

  2. Shoot your photos. Every capture that arrives while this assignment is active is automatically tagged with it.

  3. Move on. Either tap Complete on the Capture chip, or switch assignments. CaptureKey will queue the tagged photos for upload.

  4. If the assignment didn't want photos, tap No Photos. That completes the assignment and flags it; if you later retag a photo onto it, the flag clears automatically.

  5. If someone requests a return, you'll see it as a notification and a RETURN row in Path. Re-activate, shoot, and the photo flows through normally.

Why there's no Claim button

Assignments don't need to be "claimed." When you pick one, you're telling your device to tag new photos with that number. Completing the assignment is the only action that's event-global; everything else is local and instantaneous.

Capture Tab

Capture is your home base during the event. It shows the latest photo that came in from the camera, its assignment tag, and its upload state.

Capture tab

Elements:

  1. Top Banner - Appears briefly when the app auto-activates the next assignment. Tap it to jump to that assignment in Path.
  2. Photo Preview - The current selected or newest photo. Swipe left/right to move through recent captures. Pinch to zoom.
  3. Upload Chip - Shows the live state of the visible photo. See Upload States.
  4. Assignment Chip - Tap it to retag this single photo onto a different assignment. Retagging does not change your active assignment.
  5. Complete - Completes the active assignment and may auto-activate the next item in Your Assignments.
  6. No Photos - Completes the active assignment and marks it as having no photos.
  7. Photo Note - Free text attached to a single photo. Tap the pencil to edit. Notes sync to the server with the photo.
  8. Recent strip - Thumbnails of recent photos. Tap to jump, long-press to multi-select (drops you into Gallery selection mode).
  9. Quick Select FAB - Opens the number picker. See Quick Select.

Path Tab

Path is the event-wide view of every assignment. It's the same list everyone else on the team is looking at in real time.

Path tab

Assignments are grouped into sections so you don't have to scroll a flat list:

  • ACTIVE The one assignment your device is currently tagging photos with.
  • Your Assignments - Items assigned to you that aren't yet complete.
  • Return Requested - Items the operator or a guest asked for another pass on.
  • Unassigned - Fair game for anyone to pick up.
  • Skip List - Red rows. Do not disturb. You can still activate one if Operations tells you to, but the app will warn first.
  • Other Assignments - Assigned to someone else. Visible for context; activate them only if you know what you're doing.
  • Completed - Collapsed by default. Reopen one from here if it turns out there was more work.

Row actions:

Tap the three-dot overflow on any row to reveal actions. Not all actions apply to every row.

  • Assign to Me - Pulls the assignment into your working list. Replaces the previous owner.
  • Activate - Sets this as the device-local active assignment. Doesn't change ownership.
  • Complete / No Photos - Same as on Capture, but you don't have to activate first.
  • Request Return - Flags the assignment for another pass. Notifies the current owner.
  • Reopen - Moves a completed row back into active state.
  • Edit Note - Attach a free-text note to the assignment itself (visible to the whole team).

Quick Select

Quick Select is the fastest way to change assignments without scrolling Path. It's the floating action button on Capture and Path.

Quick Select

  • Start typing the number. Matches filter in real time.
  • Tap on a row to activate that assignment.
  • Long-press a row instead to Assign to Me before activating.
  • Typed numbers that don't exist in the event are rejected with a shake; nothing is created.

Setup Tab

Setup holds everything that isn't part of the per-photo, per-assignment loop: event selection, camera status, per-device settings, and session controls.

Setup tab

  • Event - The event this device is attached to. Switch opens the event picker.
  • Camera - Model and connection state. Tap the card to re-probe USB if something looks wrong.
  • Delete from card after import - When on, successfully imported photos are deleted from the camera's SD card. Off by default.
  • Notification sound / Vibrate - Per-device. These do not sync to other devices.
  • End Session - Full event wrap-up. See End Session.
  • Sign Out - Clears the auth session only. Local event data stays so you can sign back in without losing anything.

Notifications

Every event-wide event - messages, reassignments, return requests, completions by other photographers - shows up behind the bell in the top bar. Unread items bump the red badge and animate the bell.

Notifications panel

  • Tap a row to open the relevant assignment or message thread.
  • Mark all read clears the badge without opening anything.
  • Sound and vibration are controlled in Setup. Android still decides whether to show a system notification when the app is in the background.
  • Read state is stored locally on your device only. Reading a notification on one phone does not mark it read on another.

Upload States

Photos are held locally while their assignment is active so that last-second retags, deletes, and edits don't have to fight the uploader. As soon as you move on, the photos advance through the upload pipeline automatically.

StateWhen you see itWhat to do
Held Locally Assignment is still active on this device. Nothing - this is normal. The photo will move to Queued when you complete or switch away.
Queued Upload Assignment is no longer active; photo is waiting for the uploader. Nothing. WorkManager picks these up automatically when a connection is available.
Uploading In flight right now. Keep the phone online. Large JPEGs over weak Wi-Fi can take a while.
Uploaded Server confirmed receipt. Safe to delete locally if you need space.
Upload Failed Server rejected the upload or the worker gave up after retries. Pull Capture or Gallery down to refresh. If it stays failed, see Troubleshooting.
What triggers a queue

Photos queue when the assignment they're tagged to stops being your active assignment. That happens when you tap Complete, tap No Photos, or activate a different assignment. Retagging a photo to an assignment that isn't active also immediately queues it.

Assignment States

Path rows are color-coded. A quick reference:

BadgeMeaning
ACTIVEThe assignment your device is tagging photos with right now. Only one at a time.
YOURSAssigned to you, not yet complete.
RETURNSomeone requested another pass. Treat as higher priority than normal.
OPENUnassigned. Anyone can Assign to Me or simply activate.
SKIPOperations says do not disturb. The app warns before activating a skipped row.
DONECompleted. Can be reopened if work reappears.

Advanced & Admin

The rest of this manual is for operators, shift leads, and anyone responsible for wrap-up. Most photographers don't need to touch any of it day-to-day.

End Session

End Session is the event wrap-up. It sends a recap to Operations, closes the event on the server, clears all event-scoped state on the device, and signs you out.

End Session modal

Readiness checklist

The modal will not let you finish until all three of these are green:

  • No active assignment - Complete or deactivate your current one first.
  • All photos uploaded - Zero photos in Held, Queued, Uploading, or Failed. Retry failed uploads before ending.
  • Workflow sync clear - Pending local actions (retags, notes, completes) have reached the server.

Recap notes

Use the notes field for anything Operations should know: which suites had issues, what equipment misbehaved, guest feedback worth logging. The text submits to the server as part of the final summary.

What happens on confirm

  1. The app calls finishEventSession on the server.
  2. On success, every imported photo file is deleted from the device.
  3. All event-scoped workflow state on the device is cleared.
  4. The auth session is signed out.
Point of no return

End Session is destructive on the device. Don't end the session until all uploads are complete. If the server acknowledges but you still see local data, force quit the app and reopen - the cleanup runs again on next launch.

Workflow Conflict Rules

Multiple photographers touch the same event at the same time. CaptureKey's conflict model keeps things predictable:

  • Active is device-local. Two devices can have "the same" assignment active. Each only tags photos it sees.
  • Complete is event-global. The first completion wins. Later attempts to complete the same assignment are no-ops.
  • Assign to Me wins the row. Reassignment always replaces the previous owner, even if the row was already in someone's Your Assignments.
  • No Photos clears on new photo. If any device retags or imports a photo onto a No Photos assignment, that flag drops automatically and the assignment reopens.
  • Skip is operator-managed. Only Operations can add or remove Skip state through PortalKey. Photographers see the red warning but can override if instructed.
  • Local writes are optimistic. Actions apply instantly on your device and sync to the server in the background through the outbox. If the server rejects one later, you'll see it reappear in the affected section.

Canon Camera Notes

CaptureKey talks to Canon EOS bodies directly over USB using MTP plus the EOS event stream. 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. An older build depended on EOS_GetObjectInfoEx during prep; the current app skips that call.
  • Canon T5i - Works with broadened handling for older Canon EOS event variants. If you see "listening" but no captures arrive, power-cycle the camera and reconnect.
  • Other EOS bodies - Generally fine. If a specific body misbehaves, open the Camera card on Setup, note the model string, and send it 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 this on, 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 as JSON on the device, scoped to your photographer id.
  • Every event-global change you make is queued in an outbox. The repository overlays pending outbox changes on top of the latest server snapshot so your own actions always appear applied.
  • Uploads are handled by Android's WorkManager. When it's online, it drains the queue; when it's not, it waits.
  • When the network comes back, outbox actions and uploads both resume automatically. You don't need to press anything.

Troubleshooting

Camera / USB

  • If the camera status icon is red or blank, unplug and replug the cable. Start at the phone end, then the camera end.
  • Power-cycle the camera. Canon bodies sometimes need a full off-on after the USB permission dialog is dismissed.
  • If Android keeps popping the USB permission dialog, tap Always allow for this device and check Use by default.
  • Swap to a known-good USB cable. Charge-only cables will not work.
  • If the model reads as "Unknown" on Setup, take a screenshot of the Setup card and send it to Operations.

Uploads stuck

  • Confirm the phone actually has a data connection. CaptureKey doesn't mark the connection red on its own; Wi-Fi drops can hide.
  • Pull the Capture or Gallery screen down to force a refresh. This kicks WorkManager to re-check the queue.
  • A single Upload Failed row will not block the others. Multiple in a row usually means a credential or connectivity problem.
  • If photos stay in Queued for minutes with a good connection, toggle airplane mode off and on. Android occasionally silently pins WorkManager to an unavailable network.
  • As a last resort, sign out and sign back in. Your local photos, tags, and outbox survive sign-out.

Sync / Data

  • If Path shows assignments you've already completed, pull down to refresh. Optimistic writes always reconcile with the server on refresh.
  • If two photographers appear to have the same assignment active, that's expected. Active is device-local.
  • If a No Photos assignment keeps reappearing, someone retagged a photo onto it. Check Notifications.
  • Never clear app data during an event - it deletes the outbox along with everything else. If you think something is wrong, call Operations first.

General

  • Keep the phone plugged in or on a battery pack. Tethered capture drains battery quickly.
  • Turn off auto-rotate if you keep accidentally flipping the UI when handing the phone to a guest.
  • For persistent issues, note the photographer username, event name, suite number, and approximate time, then send it to Operations. The server log can usually pick up the thread from there.

About CaptureKey

CaptureKey is part of the Shatterproof Media KeyRing. It plugs into the same PortalKey backend as PathKey, SolidKey, and SiteKey, so photographer identity, event data, and media retrieval all stay in one place.

This app is actively developed. If something feels off or could be faster, tell Operations - nothing about the workflow is set in stone.