Shot List Builder for Photographers

Plan every shot before you pick up the camera. Enter your shoot details, add shots with scene, subject, lens, and priority, drag to reorder, then export a print-ready PDF or share a JSON file your second shooter can import on their own device.

Shoot Details

Shot List 0

Add a Shot

πŸ“‹
No shots yet. Add your first shot above.

Export & Share

Export a print-ready PDF with numbered rows and a checkbox column, or download a JSON file your second shooter can import on any device.

How it works

Everything runs in your browser β€” no account, no upload, no internet required after the page loads. Your shot list is auto-saved to localStorage and stays on your device until you clear it.

  1. Fill in shoot details β€” client name, date, location, photographer.
  2. Add shots β€” scene, subject, lens/focal length, priority (Must Have / High / Nice to Have), and any notes like lighting cues or reference angles.
  3. Drag to reorder β€” grab the ≑ handle on any row to reorder shots by sequence or priority. The order is saved automatically.
  4. Export PDF β€” generates a formatted PDF with shoot header, numbered rows, and a checkbox column so you can tick shots off on set.
  5. Share JSON β€” download the shot list as a JSON file and send it to your second shooter. They import it on their own device and get the full list offline.

Frequently asked questions

What should I include in a photographer's shot list?
A good shot list covers every shot you cannot afford to miss β€” the ceremony kiss, first dance, cake cutting, family formals, and candid moments. For each entry, note the scene or location, who the subjects are, the lens or focal length you plan to use, and any lighting or composition cues (backlit, wide establishing shot, close-up detail). Group shots by location or time block so you can move efficiently on set. A priority column (Must Have / High / Nice to Have) helps you decide what to cut if you run short on time.
How does drag-to-reorder work, and is the order saved?
Click and drag the ≑ handle on any shot row to move it up or down the list. Sortable.js handles the drag interaction entirely in the browser. Every time you reorder, add, or edit a shot, the list is automatically written to localStorage β€” a small storage area that persists in your browser even after you close the tab. Your order is restored the next time you open the page on the same device and browser. If you share the list with a second shooter via JSON export, they import the file and see the same order on their own device.
What does the PDF export look like, and can I print it?
The exported PDF opens a download in your browser. It contains a header block with the shoot name, date, location, and photographer, followed by a numbered table with one row per shot. Each row shows the scene, subject, lens, priority, and notes, plus an empty checkbox column on the left for ticking off shots during the session. The PDF is A4-sized and formatted for printing on a standard printer β€” useful for a printed call sheet or a clipboard on set. The PDF is generated entirely client-side using pdf-lib; nothing is sent to a server.
How do I share the shot list with a second shooter?
Click "Download JSON" to save a .json file that contains your shoot details and every shot in the current order. Send that file to your second shooter by email, AirDrop, or any file-sharing method. On their device, they open this page, click "Import JSON", select the file, and the full shot list is instantly restored β€” no account needed and no internet required after the initial page load. Any edits they make stay on their device; changes are not synced back automatically.
Is my shot list stored on a server or shared with anyone?
No. All data is stored exclusively in your browser's localStorage. Nothing is transmitted to any server. The only time data leaves your device is when you explicitly click "Download JSON" or "Export PDF" β€” and both of those produce a local file download in your browser. Clearing your browser data or using a private/incognito window will erase the stored list.