477 lines
13 KiB
Markdown
477 lines
13 KiB
Markdown
# Gnommo Feature Development Roadmap
|
|
|
|
## Overview
|
|
Features to standardize the Keynote-to-YouTube workflow, so that once the presentation is complete, only a standardized recording session stands between you and a finished video.
|
|
|
|
---
|
|
|
|
## 1. Video Description Generator
|
|
|
|
**Command:** `gnommo -p <project> description`
|
|
|
|
Generate a complete YouTube description with citations, attributions, and chapters.
|
|
|
|
---
|
|
|
|
### 1.1 Manuscript Citations (`[cite:...]`)
|
|
|
|
Citations embedded in the manuscript represent sources, references, or links mentioned during narration. The text after `cite:` is the **literal reference** that should appear in the description.
|
|
|
|
**Format in manuscript.txt:**
|
|
```
|
|
[cite:Reference text exactly as it should appear]
|
|
```
|
|
|
|
**Examples:**
|
|
```
|
|
[S3]
|
|
According to this study [cite:Smith et al. (2024) "Effects of AI on Productivity" - https://example.com/paper],
|
|
the effect is significant.
|
|
|
|
[S7]
|
|
I'm using [cite:Keynote by Apple - https://apple.com/keynote] for all my presentations.
|
|
|
|
[S12]
|
|
This technique was pioneered by [cite:Dr. Jane Doe, MIT Media Lab].
|
|
```
|
|
|
|
**Output in description:**
|
|
```
|
|
SOURCES & REFERENCES
|
|
━━━━━━━━━━━━━━━━━━━━
|
|
1:23 - Smith et al. (2024) "Effects of AI on Productivity" - https://example.com/paper
|
|
4:56 - Keynote by Apple - https://apple.com/keynote
|
|
8:30 - Dr. Jane Doe, MIT Media Lab
|
|
```
|
|
|
|
**Requirements:**
|
|
- Parse `[cite:...]` markers from manuscript.txt
|
|
- Extract the literal text after `cite:` as the reference
|
|
- Align citations to timestamps (same fuzzy matching as other markers)
|
|
- Group citations in order of appearance
|
|
- Citations are NOT aligned for rendering (ignored by renderer) but ARE timestamped for description
|
|
|
|
**Note:** `[cite:...]` markers should not affect video rendering or narration alignment - they are metadata-only markers for description generation.
|
|
|
|
---
|
|
|
|
### 1.2 Pexels/Stock Footage Attribution
|
|
|
|
Attribution for Pexels content is **not legally required** but is appreciated and professional.
|
|
|
|
**Official Pexels attribution format:**
|
|
```
|
|
by [Contributor Name] via Pexels
|
|
```
|
|
|
|
**Implementation:**
|
|
- Extend `videos.json` to include attribution metadata:
|
|
```json
|
|
{
|
|
"beach_waves": {
|
|
"source_file": "pexels/beach.mp4",
|
|
"is_shared": true,
|
|
"attribution": {
|
|
"source": "pexels",
|
|
"creator": "John Doe",
|
|
"url": "https://pexels.com/video/12345"
|
|
}
|
|
}
|
|
}
|
|
```
|
|
- Auto-detect Pexels videos from `shared_assets/pexels/` folder
|
|
- Support Pexels metadata JSON files (if downloaded with video)
|
|
- Generate attribution section for video description:
|
|
```
|
|
STOCK FOOTAGE
|
|
━━━━━━━━━━━━━
|
|
Beach waves by John Doe via Pexels: https://pexels.com/video/12345
|
|
City timelapse by Jane Smith via Pexels: https://pexels.com/video/67890
|
|
```
|
|
|
|
**Pexels License Notes** (from pexels.com/license):
|
|
- Free for personal and commercial use
|
|
- Attribution not required but appreciated
|
|
- Cannot sell unaltered copies
|
|
- Cannot redistribute on other stock platforms
|
|
|
|
### 1.3 Complete Description Output
|
|
|
|
**Output file:** `out/description_youtube.txt`
|
|
|
|
Combine all elements into a ready-to-paste YouTube description.
|
|
|
|
**Structure:**
|
|
```
|
|
[Video description from project.json "description" field]
|
|
|
|
CHAPTERS
|
|
━━━━━━━━
|
|
0:00 Introduction
|
|
1:23 Topic One
|
|
3:45 Topic Two
|
|
...
|
|
|
|
REFERENCES
|
|
━━━━━━━━━━
|
|
1:23 - Smith et al. (2024) "AI Study" - https://example.com
|
|
4:56 - Keynote by Apple - https://apple.com/keynote
|
|
...
|
|
|
|
STOCK FOOTAGE
|
|
━━━━━━━━━━━━━
|
|
Beach waves by John Doe via Pexels: https://pexels.com/video/12345
|
|
...
|
|
|
|
[Optional footer from project.json "footer" field - social links, subscribe CTA, etc.]
|
|
```
|
|
|
|
**project.json additions:**
|
|
```json
|
|
{
|
|
"description": "In this video, I walk through the complete Gnommo workflow for creating YouTube videos from Keynote presentations.",
|
|
"footer": "Subscribe for more tutorials: https://youtube.com/@channel\nTwitter: https://twitter.com/handle"
|
|
}
|
|
```
|
|
|
|
**Requirements:**
|
|
- Pull video description from `project.json` "description" field
|
|
- Generate chapters from slide markers (see Section 2)
|
|
- Collect all `[cite:...]` references with timestamps
|
|
- Collect all Pexels/stock attributions from `videos.json`
|
|
- Append optional footer from `project.json` "footer" field
|
|
- Output to `out/description_youtube.txt`
|
|
- Sections with no content are omitted (e.g., no STOCK FOOTAGE section if none used)
|
|
|
|
---
|
|
|
|
## 2. YouTube Chapter Markers
|
|
|
|
**Command:** `gnommo -p <project> chapters`
|
|
|
|
Auto-generate chapter timestamps from slide markers.
|
|
|
|
**Requirements:**
|
|
- Extract chapter titles from:
|
|
- Keynote slide titles (via presenter notes import)
|
|
- First sentence after each `[SN]` marker
|
|
- Optional `[chapter:Title]` markers for explicit chapter names
|
|
- Calculate timestamps from aligned marker timings
|
|
- Output copy-paste ready format:
|
|
```
|
|
CHAPTERS
|
|
━━━━━━━━
|
|
0:00 Introduction
|
|
1:23 What is Gnommo?
|
|
3:45 Setting Up Your Project
|
|
7:12 Recording Tips
|
|
10:30 Rendering Your Video
|
|
12:45 Outro
|
|
```
|
|
- Option to merge small chapters (minimum duration threshold)
|
|
- Support for nested chapters (main topics + subtopics)
|
|
|
|
---
|
|
|
|
## 3. Subtitle/Caption Export
|
|
|
|
**Command:** `gnommo -p <project> subtitles`
|
|
|
|
Generate subtitle files from Whisper transcription.
|
|
|
|
**Requirements:**
|
|
- Export formats: SRT, VTT, TXT
|
|
- Use existing word-level timestamps from transcription
|
|
- Smart line breaking (max characters per line, break at punctuation)
|
|
- Speaker diarization support (future: multiple speakers)
|
|
- Options:
|
|
- `--format srt|vtt|txt`
|
|
- `--max-chars 42` (characters per line)
|
|
- `--max-duration 5` (seconds per subtitle block)
|
|
|
|
**Example output (SRT):**
|
|
```
|
|
1
|
|
00:00:01,500 --> 00:00:04,200
|
|
Hello and welcome to this tutorial
|
|
on video editing with Gnommo.
|
|
|
|
2
|
|
00:00:04,500 --> 00:00:07,800
|
|
Today we're going to cover
|
|
the complete workflow.
|
|
```
|
|
|
|
---
|
|
|
|
## 4. Thumbnail Generation
|
|
|
|
**Command:** `gnommo -p <project> thumbnail`
|
|
|
|
Auto-generate thumbnail candidates from slides.
|
|
|
|
**Requirements:**
|
|
- Designate thumbnail slides with `[thumbnail]` marker
|
|
- If no marker, use slide 1 or title slide
|
|
- Apply text overlays from config:
|
|
```json
|
|
{
|
|
"thumbnail": {
|
|
"title_text": "Episode ${episode_number}",
|
|
"subtitle_text": "${title}",
|
|
"font": "Impact",
|
|
"text_color": "#FFFFFF",
|
|
"outline_color": "#000000",
|
|
"position": "bottom-left"
|
|
}
|
|
}
|
|
```
|
|
- Generate multiple variants:
|
|
- With/without text overlay
|
|
- Different zoom levels
|
|
- Different color treatments (saturated, high contrast)
|
|
- Output to `out/thumbnails/` folder
|
|
- Resolution: 1280x720 (YouTube standard)
|
|
|
|
---
|
|
|
|
## 5. Intro/Outro Templates
|
|
|
|
**Configuration in project.json:**
|
|
```json
|
|
{
|
|
"intro": {
|
|
"template": "templates/intro_v2.mp4",
|
|
"duration": 3.5,
|
|
"transition": "fade",
|
|
"variables": {
|
|
"episode_number": "12",
|
|
"title": "Getting Started with Gnommo"
|
|
}
|
|
},
|
|
"outro": {
|
|
"template": "templates/outro_subscribe.mp4",
|
|
"duration": 8.0,
|
|
"transition": "fade"
|
|
}
|
|
}
|
|
```
|
|
|
|
**Requirements:**
|
|
- Define intro/outro templates in `shared_assets/templates/`
|
|
- Auto-prepend intro before first slide
|
|
- Auto-append outro after last slide
|
|
- Support variable substitution in templates (episode number, title)
|
|
- Configurable transition types (fade, cut, wipe)
|
|
- End screen safe zone support (last 20 seconds)
|
|
|
|
---
|
|
|
|
## 6. Multi-Platform Format Presets
|
|
|
|
**Command:** `gnommo -p <project> render --format <preset>`
|
|
|
|
**Presets:**
|
|
| Preset | Aspect | Resolution | Notes |
|
|
|--------|--------|------------|-------|
|
|
| `youtube` | 16:9 | 1920x1080 | Default, standard horizontal |
|
|
| `youtube-4k` | 16:9 | 3840x2160 | 4K export |
|
|
| `shorts` | 9:16 | 1080x1920 | Vertical, auto-reframe slides |
|
|
| `podcast` | - | Audio only | MP3/M4A export for podcast feeds |
|
|
| `square` | 1:1 | 1080x1080 | Instagram/LinkedIn |
|
|
|
|
**Requirements:**
|
|
- Auto-adjust cutout positions per format
|
|
- Smart slide reframing for vertical (zoom to content area)
|
|
- Separate output folders per format
|
|
- Batch export to multiple formats: `--format youtube,shorts,podcast`
|
|
|
|
---
|
|
|
|
## 7. Teleprompter Script Generation
|
|
|
|
**Command:** `gnommo -p <project> teleprompter`
|
|
|
|
Extract clean narration text for teleprompter display.
|
|
|
|
**Requirements:**
|
|
- Strip all markers from manuscript
|
|
- Keep only spoken text
|
|
- Output formats:
|
|
- `--format txt` - Plain text
|
|
- `--format html` - Scrollable HTML page with large font
|
|
- `--format json` - For teleprompter apps
|
|
- Optional: Include slide thumbnails as visual cues
|
|
- Configurable font size and scroll speed hints
|
|
|
|
**Example HTML output:**
|
|
```html
|
|
<div class="teleprompter">
|
|
<p class="cue">[SLIDE: Introduction]</p>
|
|
<p>Hello and welcome to this tutorial on video editing with Gnommo.</p>
|
|
<p class="cue">[SLIDE: What is Gnommo?]</p>
|
|
<p>Gnommo is a code-first video editing pipeline...</p>
|
|
</div>
|
|
```
|
|
|
|
---
|
|
|
|
## 8. Recording Checklist Generator
|
|
|
|
**Command:** `gnommo -p <project> checklist`
|
|
|
|
Generate a pre-recording checklist based on project configuration.
|
|
|
|
**Output includes:**
|
|
- [ ] Camera settings (resolution, fps from project.json)
|
|
- [ ] Lighting setup (if green screen detected in videos.json)
|
|
- [ ] Audio check (microphone levels)
|
|
- [ ] Props/demos needed (parsed from `[video:...]` markers)
|
|
- [ ] Slide count and estimated duration
|
|
- [ ] Teleprompter ready
|
|
- [ ] Recording space clear
|
|
|
|
**Customizable via `checklist_template.md` in project folder.**
|
|
|
|
---
|
|
|
|
## 9. Audio Normalization
|
|
|
|
**Automatic during render or standalone command:**
|
|
`gnommo -p <project> normalize`
|
|
|
|
**Requirements:**
|
|
- Target: -14 LUFS (YouTube standard)
|
|
- Apply loudness normalization to narration track
|
|
- Preserve dynamic range (avoid over-compression)
|
|
- Normalize intro/outro audio to match
|
|
- Option: `--target-lufs -14`
|
|
|
|
**Implementation:**
|
|
- Use FFmpeg `loudnorm` filter
|
|
- Two-pass normalization for accurate results
|
|
- Report before/after levels
|
|
|
|
---
|
|
|
|
## 10. Project Templates
|
|
|
|
**Command:** `gnommo init <project-name> --template <template>`
|
|
|
|
**Built-in templates:**
|
|
| Template | Description |
|
|
|----------|-------------|
|
|
| `tutorial` | Talking head + slides, square slide layout |
|
|
| `explainer` | Full-screen slides, minimal presenter |
|
|
| `review` | Product review format, multiple camera angles |
|
|
| `talking-head` | Full-screen presenter, no slides |
|
|
| `screencast` | Screen recording with small presenter PIP |
|
|
|
|
**Requirements:**
|
|
- Templates stored in `~/.gnommo/templates/` or `shared_assets/templates/`
|
|
- Each template includes:
|
|
- `project.json` with preset cutouts and settings
|
|
- `manuscript.txt` skeleton with example markers
|
|
- Sample `videos.json` structure
|
|
- User can create custom templates: `gnommo template save <name>`
|
|
|
|
---
|
|
|
|
## 11. Batch Processing
|
|
|
|
**Command:** `gnommo batch render project1 project2 project3`
|
|
|
|
**Requirements:**
|
|
- Process multiple projects in sequence
|
|
- Continue on failure (don't stop batch for one failed project)
|
|
- Summary report at end:
|
|
```
|
|
BATCH COMPLETE
|
|
━━━━━━━━━━━━━━
|
|
✓ project1 - rendered in 5:23
|
|
✓ project2 - rendered in 4:17
|
|
✗ project3 - failed (missing slide S12)
|
|
```
|
|
- Options:
|
|
- `--parallel 2` - Run N renders in parallel
|
|
- `--skip-existing` - Skip if `out/final.mp4` exists
|
|
- `--format youtube,shorts` - Render all formats for each project
|
|
|
|
---
|
|
|
|
## 12. Progress Dashboard
|
|
|
|
**Command:** `gnommo status` or `gnommo -p <project> status`
|
|
|
|
Display pipeline status for all projects or specific project.
|
|
|
|
**Output:**
|
|
```
|
|
PROJECT STATUS
|
|
━━━━━━━━━━━━━━
|
|
Project Import Preprocess Transcribe Render Output
|
|
─────────────────────────────────────────────────────────────
|
|
video1 ✓ ✓ ✓ ✓ final.mp4 (12:34)
|
|
video2 ✓ ✓ ✓ ✗ -
|
|
video3 ✓ ✗ - - -
|
|
video4 ✗ - - - -
|
|
```
|
|
|
|
**Requirements:**
|
|
- Scan all project directories
|
|
- Check for existence of intermediate files
|
|
- Show file timestamps and durations
|
|
- Highlight what needs to be done next
|
|
|
|
---
|
|
|
|
## 13. Recording Session Mode (Future)
|
|
|
|
**Command:** `gnommo -p <project> session`
|
|
|
|
Live recording assistant mode.
|
|
|
|
**Features:**
|
|
- Display current slide on secondary monitor
|
|
- Show teleprompter text overlay
|
|
- Keyboard shortcuts to advance slides
|
|
- Real-time recording with proper settings
|
|
- Auto-stop at end of manuscript
|
|
- Voice command support: "next slide", "pause"
|
|
|
|
**Note:** This is a stretch goal requiring significant UI work.
|
|
|
|
---
|
|
|
|
## Implementation Priority
|
|
|
|
### Phase 1 - Core YouTube Workflow (High Impact)
|
|
1. **Video Description Generator** (citations + Pexels attribution)
|
|
2. **YouTube Chapter Markers**
|
|
3. **Subtitle/Caption Export**
|
|
4. **Audio Normalization**
|
|
|
|
### Phase 2 - Content Creation Efficiency
|
|
5. **Thumbnail Generation**
|
|
6. **Intro/Outro Templates**
|
|
7. **Teleprompter Script Generation**
|
|
8. **Recording Checklist Generator**
|
|
|
|
### Phase 3 - Scale & Automation
|
|
9. **Project Templates**
|
|
10. **Multi-Platform Format Presets**
|
|
11. **Batch Processing**
|
|
12. **Progress Dashboard**
|
|
|
|
### Phase 4 - Advanced
|
|
13. **Recording Session Mode**
|
|
|
|
---
|
|
|
|
## Notes
|
|
|
|
- All new commands should follow existing CLI pattern: `gnommo -p <project> <command>`
|
|
- Output files go to `out/` subdirectory by default
|
|
- All features should support `--dry-run` where applicable
|
|
- Verbose mode (`-v`) should show detailed progress
|