# Timeline Editor Interactive web-based editor for `timeline.seq` files. ## Features - 📂 Load/save `timeline.seq` files - 📊 Visual Gantt-style timeline with sticky time markers (beat-based) - 🎯 Drag & drop sequences and effects - 🎯 Resize effects with handles - 📦 Collapsible sequences (double-click to collapse) - 📏 Vertical grid lines synchronized with time ticks - ⏱️ Edit timing and properties (in beats) - ⚙️ Stack-order based priority system - 🔍 Zoom (10%-200%) with mouse wheel + Ctrl/Cmd - 🎵 Audio waveform visualization (aligned to beats) - 🎼 Snap-to-beat mode (enabled by default) - 🎛️ BPM slider (60-200 BPM) - 🔄 Re-order sequences by time - 🗑️ Delete sequences/effects - ▶️ Audio playback with auto-expand/collapse - 🎚️ Sticky audio track and timeline ticks - 🔴 **Playback indicator on waveform** (NEW) - 🎯 **Double-click seek during playback** (NEW) - 📍 **Click waveform to seek** (NEW) ## Usage 1. **Open:** `open tools/timeline_editor/index.html` or double-click in browser 2. **Load timeline:** Click "📂 Load timeline.seq" → select `workspaces/main/timeline.seq` 3. **Load audio:** Click "🎵 Load Audio (WAV)" → select audio file 4. **Auto-load via URL:** `index.html?seq=timeline.seq&wav=audio.wav` 4. **Playback:** - Click "▶ Play" or press **Spacebar** to play/pause - Click waveform to seek to position - **Double-click timeline** to seek during playback (continues playing) - Watch sequences auto-expand/collapse during playback - Red playback indicators on both timeline and waveform show current position 5. **Edit:** - Drag sequences/effects to reposition - Double-click sequence header to collapse/expand - Click item to edit properties in side panel - Drag effect handles to resize 6. **Zoom:** Ctrl/Cmd + mouse wheel (zooms at cursor position) 7. **Save:** Click "💾 Save timeline.seq" ## File Format ⚠️ **For complete format specification, see:** `doc/SEQUENCE.md` The editor parses and generates `.seq` files with this format: ``` # BPM 120 SEQUENCE ["optional_name"] [optional_end] EFFECT <+|=|-> [args...] EFFECT <+|=|-> [args...] ``` **Priority Modifiers:** - `+` = Increment priority (normal effects) - `=` = Keep same priority as previous - `-` = Decrement priority (background layers) **Time Notation (Beat-Based):** - **Default:** All numbers are beats (e.g., `4`, `16.5` = beats) - `4b`, `16b` = Explicit beats (optional 'b' suffix for clarity) - `2.0s`, `8.25s` = Explicit seconds (rare, for physical timing) Example (Beat-Based): ``` # BPM 120 SEQUENCE 0 0 "Opening Scene" # Start at beat 0 EFFECT - FlashCubeEffect 0 4 # Beats 0-4 (0-2s @ 120 BPM) EFFECT + FlashEffect 0 2 # Beats 0-2 (0-1s) EFFECT + FadeEffect 1 4 # Beats 1-4 (0.5-2s) SEQUENCE 8 1 "Beat Drop" # Start at beat 8 (bar 3) EFFECT + HeptagonEffect 0 1 # First beat of sequence EFFECT = ParticlesEffect 0 4 # Full bar (4 beats) SEQUENCE 2.5s 0 "Explicit seconds" # Rare: start at 2.5 physical seconds EFFECT + Fade 0 4 # Still uses beats for duration ``` ## URL Parameters Auto-load files on page load: ``` index.html?seq=../../workspaces/main/timeline.seq&wav=../../audio/track.wav ``` **Parameters:** - `seq` - Path to `.seq` file (relative or absolute URL) - `wav` - Path to `.wav` audio file (relative or absolute URL) **Example:** ```bash open "tools/timeline_editor/index.html?seq=../../workspaces/main/timeline.seq" ``` ## Keyboard Shortcuts - **Spacebar**: Play/pause audio playback - **Double-click timeline**: Seek to position (continues playing if active) - **Ctrl/Cmd + Wheel**: Zoom in/out at cursor position ## Technical Notes - Pure HTML/CSS/JavaScript (no dependencies, works offline) - **Internal representation uses beats** (not seconds) - Sequences have absolute times (beats), effects are relative to parent sequence - BPM used for seconds conversion (tooltips, audio waveform alignment) - Priority determines render order (higher = on top) - Collapsed sequences show 35px title bar, expanded show full effect stack - Time markers show beats by default (4-beat/bar increments) - **Waveform and time markers are sticky** at top during scroll/zoom - Vertical grid lines aid alignment - Snap-to-beat enabled by default for musical alignment - **Auto-expand/collapse**: Active sequence expands during playback, previous collapses - **Auto-scroll**: Timeline follows playback indicator (keeps it in middle third of viewport) - **Dual playback indicators**: Red bars on both timeline and waveform (synchronized) - **Seamless seek**: Double-click or waveform click seeks without stopping playback