Complete Reference Manual · v1.0
Director's Desk
Production Management Tool — Features, How-To & Technical Reference
Pure HTML · JS · No Libraries Touch Ready Export / Import 6 Modules
Section 01
Overview

What is Director's Desk?

Director's Desk is a single-file, self-contained production management tool built for filmmakers, directors, and creative teams. It runs entirely in your browser — no server, no account, no internet connection required after the file is downloaded.

Everything is stored locally in your browser's localStorage and can be exported or imported as a portable .json file. The entire application is one .html file — open it in any modern browser and start working immediately.

✦ Philosophy

No dependencies. No build step. No cloud. Your production data lives on your machine and travels with you as a simple JSON file. Share it with your team by emailing the file.

Feature Summary

📊
Dashboard
Live overview of all production stats — scripts, scenes, team, equipment at a glance.
📄
Scripts
Write, version, and track screenplay drafts with built-in formatting shortcuts.
🎭
Story & Scenes
Break down your story scene by scene with INT/EXT, location, cast, and director's notes.
👥
Team
Manage crew and cast with roles, contacts, and availability tracking.
🎥
Equipment
Log cameras, lenses, lights, and grip with status indicators — available, rented, or missing.
🎨
Drawboard
Multi-board canvas for storyboards, shot sketches, diagrams — with full touch support.
Section 02
Modules

Dashboard

The Dashboard is the first tab you see on launch. It auto-aggregates data from all other modules and shows:

WidgetWhat it shows
Stats BarTotal count of scripts, scenes, team members, and equipment items
Latest ScriptThe most recently added script with its genre and status badge
Scene ProgressScenes marked "Done" vs total, displayed as a progress bar
Team AvailabilityCount of available team members vs total
EquipmentTotal items tracked and count of items with "Missing" status flagged in red
Note

The Dashboard updates automatically whenever you save any record. It is always in sync with your current data.

Scripts

The Scripts module is a lightweight screenplay drafting environment. Each script record contains:

FieldPurpose
TitleName of the script or episode
StatusDraft / In Review / Final — shown as a colour-coded badge
VersionFree-text version label, e.g. v1.0, v2-revision
Genre / TypeDrama, Short Film, Documentary, Commercial, etc.
Notes / SynopsisShort summary or production notes
Script ContentFull free-text screenplay body with formatting toolbar

Formatting Toolbar

Inside the script editor, five quick-insert buttons follow standard screenplay conventions:

INT. Inserts interior scene heading prefix
EXT. Inserts exterior scene heading prefix
CUT TO Inserts a CUT TO: transition with spacing
FADE IN Inserts FADE IN: opener
FADE OUT Inserts FADE OUT. closer
Tip

Each script stores its full text body. A 120-character preview is shown in the list view. Open the edit form to see and edit the complete content.

Story & Scenes

Scene breakdown follows traditional production design practice. Each scene record maps to a single shootable unit:

FieldDetails
Scene NumberProduction number (01, 02A, etc.)
INT / EXTInterior, Exterior, or INT/EXT split
LocationSet name or address
Time of DayDAY / NIGHT / DAWN / DUSK
StatusPlanned / Shooting / Done — colour-coded in list
CharactersComma-separated list of characters in the scene
DescriptionWhat happens — action, mood, key beats
Director's NotesPrivate shot ideas, camera moves, emotional direction

Status colours in the list: Planned grey · Shooting amber · Done green. The Dashboard progress bar reflects Done scenes automatically.

Team Resources

Each team member record stores contact and scheduling information:

FieldDetails
NameFull name of the person
RoleDirector, DP, Producer, Writer, Actor, Editor, Sound, Art, Other
ContactEmail address or phone number
AvailabilityAvailable / Partial / Unavailable — colour coded green / amber / red
Notes / BioPrevious credits, special skills, scheduling constraints

Use the Role filter dropdown to quickly view only one department (e.g. show all Sound crew).

Equipment

Track every piece of gear your production needs or owns:

FieldDetails
NameMake and model (e.g. Sony FX3, Aputure 600D)
CategoryCamera / Lens / Lighting / Sound / Grip / Post / Other
StatusAvailable · Rented · Missing
Owner / SourceOwned, rental house name, borrowed from crew, etc.
NotesSerial number, rental dates, condition notes, specs

The Dashboard flags missing items in red so nothing falls through the cracks on shoot day.

Drawboard

The Drawboard is a full canvas drawing environment for storyboards, shot diagrams, location sketches, and production notes. It supports multiple boards — one per scene, per reel, or however you organise your work.

Drawing Tools

IconToolBehaviour
✏️PencilFreehand strokes at 60% opacity — soft, textured feel ideal for rough sketches
🖊️PenSmooth opaque strokes with a subtle glow — clean lines for final storyboard panels
RectangleDrag to draw a rectangle — optional fill mode via checkbox
Circle / EllipseDrag to draw an ellipse fitted to bounding box — optional fill mode
🧹EraserPixel-level destination-out erase — enlarges to 2.5× brush size for efficient clearing
TTextClick canvas to open a floating text overlay, type multi-line text, confirm to stamp permanently

Toolbar Controls

ControlWhat it does
Colour Swatches6 preset production palette colours — click to activate
Custom Colour PickerFull colour wheel via native browser colour input
Size Slider1–60px brush size; label updates live
Font Size8–120px font size for the Text tool only
Fill ToggleAppears for Rect and Circle only — fills shape with 50% opacity colour
↩ UndoSteps back through up to 40 drawing actions per board session
↪ RedoRe-applies undone actions within the same session
🗑 ClearWipes the entire current board after confirmation
⬇ PNGExports the current board as a transparent-background PNG file

Multi-Board Management

Create unlimited boards for a single production. Boards are listed as tabs at the top of the Drawboard toolbar.

1
New Board
Click the + Board button to add a blank canvas. The app switches to it automatically.
2
Rename Board
Double-click any board tab to rename it — e.g. "Act 1 Storyboard" or "Location Sketch — Warehouse".
3
Switch Boards
Click any board tab. The current board saves automatically before switching.
4
Delete Board
Click Del Board to permanently remove the current board. Must have at least one board at all times.
Section 03
How-To Guides

Getting Started

1
Open the File
Open director-tool.html in any modern browser (Chrome, Firefox, Safari, Edge). No installation needed.
2
Your Data Auto-Saves
Every form save writes to localStorage immediately. Close the tab and reopen — your data is still there.
3
Export Early & Often
Click ⬇ Export in the top-right header to download a .json backup file. Date-stamped automatically.
4
Share with Your Team
Send the exported .json file to a collaborator. They click ⬆ Import to load your full production data into their own browser.
⚠ Important

Clearing browser data or cookies may erase localStorage. Always keep a recent .json export as your backup. Treat it like a project file.

Writing a Script

1
Open Scripts Tab
Click the Scripts tab in the navigation bar.
2
Click + New Script
Fill in the title, genre, version, and status. Status starts as Draft.
3
Write in the Script Editor
The large textarea at the bottom of the form is your writing area. Use the toolbar buttons (INT., EXT., CUT TO, etc.) to insert standard screenplay formatting at the cursor position.
4
Save
Click Save Script. The script appears in the list with a preview of the first 120 characters.
5
Revise & Promote
Click Edit on any script to update it. Change the status from Draft → In Review → Final as the script progresses through production.

Using the Drawing Tools

1
Switch to Drawboard
Click the Drawboard tab. The canvas fills the viewport automatically.
2
Choose a Tool
Click any tool icon in the toolbar. The active tool is highlighted in amber. A hint line at the bottom of the canvas describes the selected tool.
3
Set Colour & Size
Click a preset colour swatch or use the circular custom colour picker. Drag the Size slider to set brush thickness.
4
Draw
Mouse or finger — works the same. Freehand tools (Pencil, Pen, Eraser) follow the pointer continuously. Shape tools (Rect, Circle) show a live preview as you drag and stamp on release.
5
Add Text
Select the Text tool (T), click the canvas where you want the text to appear. A floating input box opens. Type your label, set font size if needed, then click Add or press Ctrl+Enter to stamp it permanently.
6
Undo Mistakes
Click ↩ Undo to step back. Works for all tool operations. Up to 40 steps per board session.

Export & Import

The export/import system serialises your entire production database — all scripts, scenes, team members, equipment records, and Drawboard images — into a single portable JSON file.

Exporting

1
Click ⬇ Export
Found in the top-right header. Triggers an immediate browser download.
2
File is Saved
The filename is auto-generated as directors-desk-YYYY-MM-DD.json. Keep this file safe — it is your entire production archive.

Importing

1
Click ⬆ Import
Opens a file picker. Select a previously exported .json file.
2
Confirm Replace
A dialog asks "Replace current data with imported data?" Confirm to load. This overwrites your current browser data.
3
Done
All tabs refresh with the imported data. Drawboard images are restored from the embedded base64 strings in the JSON.
Note — Drawboard in Export

Each board's canvas image is stored as a base64 PNG data URL inside the JSON. This makes the export file larger when boards contain drawings, but keeps everything self-contained in one file.

Section 04
Technical Details

Architecture

Director's Desk is a pure vanilla implementation. No build toolchain, no package manager, no external dependencies whatsoever. The entire application ships as a single .html file.

LayerTechnologyNotes
MarkupHTML5Semantic structure, ARIA roles on interactive elements
StylingCSS3 Custom PropertiesDark theme via :root variables; no preprocessor
LogicVanilla JavaScript (ES5-compatible)No classes; procedural function style for maximum compatibility
CanvasHTML5 Canvas 2D APIHiDPI (devicePixelRatio) aware; composite operations for eraser
PersistencelocalStorage + JSONAuto-save on every mutation; full export/import via Blob + FileReader
FontsGoogle Fonts (Bebas Neue, Courier Prime)Loaded via @import; gracefully degrades offline

Data Structure

The global state object is the single source of truth for all application data. It is serialised to JSON on every save and stored in localStorage under the key directorDesk.

// Global state object
var state = {
  scripts: [
    {
      id:      "uid_string",
      title:   "Script Title",
      status:  "draft" | "review" | "final",
      version: "v1.0",
      genre:   "Drama",
      notes:   "Synopsis...",
      content: "FADE IN:\n\nINT. ..."
    }
  ],
  scenes: [
    {
      id:       "uid_string",
      number:   "01",
      intExt:   "INT" | "EXT" | "INT/EXT",
      location: "Warehouse",
      time:     "DAY" | "NIGHT" | "DAWN" | "DUSK",
      status:   "planned" | "shooting" | "done",
      chars:    "JOHN, MARY",
      desc:     "Scene description...",
      notes:    "Director notes..."
    }
  ],
  team: [
    {
      id:           "uid_string",
      name:         "Full Name",
      role:         "DP",
      contact:      "email@example.com",
      availability: "available" | "partial" | "unavailable",
      notes:        "Bio / credits..."
    }
  ],
  equipment: [
    {
      id:       "uid_string",
      name:     "Sony FX3",
      category: "Camera",
      status:   "available" | "rented" | "missing",
      owner:    "Owned",
      notes:    "Serial: ABC123"
    }
  ],
  drawboards: [
    {
      id:        "uid_string",
      name:      "Board 1",
      imageData: "data:image/png;base64,...",
      // stored on board switch or export
      strokes:   [],  // reserved for future vector export
      texts:     []   // reserved
    }
  ]
};

Canvas Engine

The Drawboard uses the HTML5 Canvas 2D API directly. Key implementation decisions:

HiDPI / Retina Support

The canvas is scaled by window.devicePixelRatio so drawings appear sharp on all screens. The logical drawing coordinates match CSS pixels; the physical canvas buffer is multiplied by DPR.

db.dpr = window.devicePixelRatio || 1;
dbCanvas.width  = w * db.dpr;
dbCanvas.height = h * db.dpr;
dbCtx.scale(db.dpr, db.dpr);

Touch Input

Touch events are mapped to the same pointer handlers as mouse events using a thin wrapper. touch-action: none on the canvas prevents the browser from intercepting scroll or zoom gestures during drawing.

function dbTouchStart(e) {
  e.preventDefault();  // block browser scroll/zoom
  var t = e.touches[0];
  dbPointerDown({ clientX: t.clientX, clientY: t.clientY });
}

Shape Preview

Rectangles and ellipses show a live preview while dragging. Before the first pointer move, a full getImageData snapshot is taken. On each move, the snapshot is restored with putImageData before redrawing the shape at the new dimensions. On pointer-up, the final shape is committed.

Eraser

The eraser uses globalCompositeOperation = 'destination-out' to punch transparent holes into the canvas rather than painting white. This preserves transparency for clean PNG export.

Pencil vs Pen

Both tools use the same continuous path-drawing loop but differ in alpha and shadow:

PropertyPencilPen
globalAlpha0.61.0
shadowBlur01
shadowColormatches stroke colour

Storage & Persistence

localStorage Key

All data is stored under a single key: directorDesk. The value is a JSON string of the complete state object.

Save Strategy

The save() function is called immediately after every mutation (form save, delete, board change). There is no debounce or batch — writes are synchronous and instant.

ID Generation

Every record gets a unique ID generated by combining timestamp base-36 encoding with 4 random alphanumeric characters:

function uid() {
  return Date.now().toString(36) +
         Math.random().toString(36).slice(2, 6);
}

Drawboard Persistence

Canvas image data is not continuously serialised on every stroke (that would be too slow). Instead, dbSaveCurrentBoard() is called in three situations: when switching boards, when creating a new board, and when clicking Export. The canvas is serialised as a data:image/png;base64 string stored in state.drawboards[i].imageData.

⚠ Important

If you close the Drawboard tab without exporting, any unsaved strokes since the last board switch are still in the canvas but not yet written to state. Switch boards or export before closing the tab to ensure full persistence.

Section 05
Keyboard Shortcuts

Text Tool

Ctrl + Enter Commit text to canvas (same as clicking Add)
Escape Cancel text input and close overlay

Script Editor

INT. toolbar button Inserts at cursor position
EXT. toolbar button Inserts at cursor position
CUT TO toolbar button Inserts with newlines for proper screenplay spacing

Form Dialogs

Click backdrop Closes the current form without saving
Tip

All standard browser shortcuts work inside text areas — Ctrl+A select all, Ctrl+Z undo typing, Ctrl+C / Ctrl+V copy/paste — these are native browser functions, not overridden by the app.

Section 06
Tips & Tricks

Production Workflow

A recommended order for setting up a new production from scratch:

1
Start with the Script
Add your working draft in the Scripts tab. Set status to Draft. Give it a clear version number.
2
Break Down into Scenes
Go to Story and create one entry per scene. Number them sequentially. Fill in location and characters for every scene.
3
Build Your Team
Add every confirmed crew and cast member with their contact info and current availability.
4
Log Equipment
Add all gear you need. Flag anything you don't yet have as "Missing" — the Dashboard will surface it as a red warning.
5
Sketch Shot Plans
Create one Drawboard per scene or per shoot day. Use the Pencil and Text tools to rough out camera positions, blocking, and framing ideas.
6
Export Daily
At the end of each working session, export to JSON. Keep dated backups in a project folder.
Production Tips

Drawboard Pro Tips

Use Pencil for thumbnails, Pen for finals. The Pencil's lower opacity is perfect for fast rough storyboard thumbnails. Once you like a composition, switch to Pen and re-draw on top for clean lines.

Combine shapes and freehand. Use Rect and Circle to block out camera frames and subject areas, then use Pen to draw characters and details inside them.

Label everything with Text. Add scene numbers, shot codes, and lens notes directly onto the storyboard panels using the Text tool. Set font size to 14–16px for small annotations, 24–32px for shot headers.

One board per shot list. If you have many scenes, consider naming boards by shoot day rather than scene — "Day 1 — INT. Office", "Day 2 — EXT. Street". This mirrors how you'll actually work on set.

Script Writing Tips

Use the version field deliberately. Start at v0.1 for rough outlines. Promote to v1.0 when the structure is locked. Increment by 0.1 for minor revisions and 1.0 for full redrafts after notes.

Keep synopsis and content separate. The Notes / Synopsis field is for your quick reference — the one-paragraph pitch. The Script Content field is for the full screenplay. Don't duplicate between them.

Sharing with Your Team

Export the JSON and send it to your AD, DP, or producer. They import it on their machine, and immediately have full access to the script, scene breakdown, and storyboards. They can add team members, update equipment status, and re-export. You import their version and the data merges on load.

Offline Use

The tool works fully offline once the HTML file is saved locally. Google Fonts will not load without internet but the layout degrades gracefully to Georgia serif. All functionality remains intact.