Direct upload, batch upload via spreadsheet, Frame.io import, and cloud vs local processing
Uploading Sessions
Get footage into Surflink and the AI pipeline from the Upload button (/upload). You can upload files directly or import from Adobe Frame.io.
Direct upload (step by step)
- Click Upload in the sidebar.
- Drop your clips into the drop zone (or click to pick files).
- Fill in Session Details:
- Title (e.g. "Morning session, Pipeline")
- Spot
- Date
- Description
- If you have athletes, tap names under Athletes in Session to tag who's in the footage. A counter shows how many are selected. (You can also assign tracked surfers later -- see Reviewing Sessions.)
- (Optional) Toggle Compress before upload to shrink files to ~720p before they upload. (See the note below about browser support.)
- Choose a Processing Mode:
- Cloud (Modal) -- the default; analysis runs on Surflink's cloud GPU.
- Local GPU -- analysis runs on a local SurfVision server. Enter the server URL (default
http://localhost:8000) and click Test to confirm it's online.
- Click Analyze N Clips. (The button reads "Select video clips first" until you've added files.)
Surflink creates the session, uploads each clip (up to 2 at a time), and sends them for AI analysis. You'll see an overall progress ring plus a per-clip status list (waiting, uploading, uploaded, analyzing, processing). When uploads start, you're redirected to the session page where processing continues.
Compression availability: the Compress before upload toggle only appears when your browser supports
SharedArrayBuffer. This requires specific cross-origin headers that are not configured in the default deployment, so compression is effectively unavailable in production until those headers are added. Uploading uncompressed footage always works.
Import from Frame.io
- On the Upload page, click Import from Frame.io.
- Connect: click Sign in with Adobe to authorize Frame.io (first time only).
- Select a workspace (skipped automatically if you only have one).
- Select a project.
- Browse folders and tap video files to select them. Only
video/*files are selectable; others are greyed out. - The footer shows "N clips selected" -- click Import Clips (max 10 per import).
Surflink downloads the assets, creates a session with clips, and sends each clip for AI analysis, then redirects you to the session page.
Batch upload (drag a whole shoot)
When you have a folder of clips spanning many training sessions, switch the Upload page to the Batch tab (/upload?mode=batch, also linked from the Training Sessions page). It routes each clip to the right session and athletes in one pass — no separate page or wizard.
How it works:
- Drag in your session folders — drop one or more folders named like
2026-06-17_SouthPoint(or pick a folder/files). Add more folders at any time; they accumulate. Optionally drop a session-log CSV to pull in athletes, start/end times, and link hints. - Review & link — a popup groups your clips by session folder and suggests a matching training session (by date and spot), preferring sessions that don't have footage yet. Nothing is auto-applied: per folder you Accept the suggestion, pick a different session, or create a new one (use "Accept all suggestions" to confirm them all at once). Athletes are pre-filled from the CSV when names match your roster, otherwise pick them per folder.
- Pick clips — every clip shows a tick box (on by default), a still frame grabbed in your browser, and click-to-preview. Untick anything you don't want. If a chosen session already has footage, choose Add to it or Keep existing only; any duplicate filenames can be resolved per clip (keep, add, or replace).
- Import — clips upload (2 at a time) and analyze (3 at a time) with a live, per-clip progress bar through every phase: uploading → analyzing → caching → complete.
Resume any time. Leave the tab or follow the batch notification and you land back on the live view — already-uploaded clips keep going automatically and finished ones show as done. Only clips whose files hadn't finished uploading need a quick re-drag, prompted by a small "needs files" dropzone.
Folder names parse YYYY-MM-DD plus an optional spot. Flat files with a CSV that lists clip filenames are matched by filename (case-insensitive). Sessions on the same day with the same athletes are reused rather than duplicated. Instead of a notification per clip, you get one digest when the batch finishes.
What happens after upload
Regardless of processing mode, your files are stored in Surflink's storage, and analysis produces an annotated video plus a stats file per clip. Follow the processing on the session page. For the full technical flow see the developer guide on the AI Video Pipeline.