You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
feat: complete GIF demo pipeline with 141 recorded demos and site integration
140 VHS tape files (26 stories + 114 solo) covering all 186 bray tools.
Clickable tool tags on site open GIF demos in a modal overlay.
Dedicated demo identity with Shamir backup for reproducible recordings.
Pipeline: generate-tapes.sh defines prompts, record.sh orchestrates VHS,
bray-demo.sh wraps claude -p with MCP config. Re-record any demo with
./record.sh --force <name>.
generate-tapes.sh # Generates all tape files from prompt definitions
43
46
tapes/
44
-
stories/ # Multi-tool workflow tapes
47
+
stories/ # Multi-tool workflow tapes (26)
45
48
01-identity-onboarding.tape
46
49
02-identity-backup.tape
47
50
...
48
-
solo/ # Single-tool tapes
51
+
solo/ # Single-tool tapes (114)
49
52
encode-npub.tape
50
53
verify-event.tape
51
54
...
@@ -55,48 +58,68 @@ site/demos/
55
58
56
59
## Recording Pipeline
57
60
61
+
Each tape uses an alias trick: it hides the setup (custom PS1 prompt, alias `claude` to `bray-demo.sh`), then shows only the `claude -p '<prompt>'` command and its output. The wrapper (`bray-demo.sh`) runs Claude Code with `--bare --dangerously-skip-permissions --mcp-config mcp-demo.json`, so the recording shows clean output without permission prompts.
62
+
58
63
Per-demo flow:
59
64
60
65
1. VHS reads the `.tape` file
61
66
2. VHS opens a virtual terminal with configured dimensions and theme
62
-
3. The tape runs `claude -p "<prompt>"` inside the terminal
63
-
4. Claude Code executes, calls bray MCP tools, shows output
64
-
5. VHS renders the session directly to GIF
67
+
3. Hidden setup: custom PS1, alias claude to bray-demo.sh, clear screen
68
+
4. The tape types `claude -p '<prompt>'` (visible to viewer)
69
+
5. bray-demo.sh pipes the prompt to Claude Code with bray MCP config
70
+
6. Claude Code calls bray MCP tools, shows output
71
+
7. VHS renders the session directly to GIF
65
72
66
73
Example tape file:
67
74
68
75
```tape
69
-
# 01-identity-onboarding.tape
70
76
Set Shell "zsh"
71
-
Set Width 100
72
-
Set Height 30
77
+
Set Width 1200
78
+
Set Height 600
73
79
Set Theme "Catppuccin Mocha"
74
-
Set FontSize 14
80
+
Set FontSize 16
75
81
Set Padding 20
82
+
Set TypingSpeed 40ms
83
+
84
+
Output gifs/01-identity-onboarding.gif
76
85
77
-
Output ../gifs/01-identity-onboarding.gif
86
+
Hide
87
+
Type "export PS1='darren@ForgeSworn.dev:bray $ '"
88
+
Enter
89
+
Type "alias claude=/Users/darren/WebstormProjects/bray/site/demos/bray-demo.sh"
90
+
Enter
91
+
Type "clear"
92
+
Enter
93
+
Sleep 0.5s
94
+
Show
78
95
79
-
Type "claude -p 'Create a new Nostr identity, derive a persona called demo, switch to it, then confirm with whoami'"
96
+
Type "claude -p 'Create a new Nostr identity, derive a persona called demo, switch to it, then check whoami'"
80
97
Enter
81
-
Sleep 15s
98
+
Sleep 25s
82
99
```
83
100
84
-
The orchestrator script (`record.sh`) handles:
85
-
- Looping through all tape files (or recording a single one by name)
**Tape generation:** All tapes are generated by `generate-tapes.sh`, which defines every prompt in a single file. To regenerate after prompt edits: `./generate-tapes.sh`.
102
+
103
+
**Orchestrator (`record.sh`):**
104
+
-`./record.sh` -- record all (skip existing GIFs)
105
+
-`./record.sh --force` -- re-record everything
106
+
-`./record.sh --stories` / `--solo` -- record only one category
107
+
-`./record.sh <name>` -- record a single demo by partial name match
108
+
-`./record.sh --list` -- show recording status
109
+
-`./record.sh --optimise` -- optimise existing GIFs with gifsicle
88
110
89
111
## GIF Specifications
90
112
91
113
| Setting | Value |
92
114
|---------|-------|
93
-
| Terminal width | 100 columns |
94
-
| Terminal height | 30 rows |
95
-
| Theme | Dark (matches site aesthetic) |
96
-
| Font size | 14px |
97
-
| Max duration | Story: 15-20s, Solo: 5-8s |
98
-
| Loop | Once, then hold final frame |
99
-
| Status line |`darren@ForgeSworn.dev:bray`|
115
+
| Terminal width | 1200px |
116
+
| Terminal height | Story: 600px, Solo: 400px |
117
+
| Theme | Catppuccin Mocha |
118
+
| Font size | 16px |
119
+
| Typing speed | 40ms per character |
120
+
| Padding | 20px |
121
+
| Max sleep | Story: 20-30s, Solo: 12-15s |
122
+
| PS1 prompt |`darren@ForgeSworn.dev:bray $ `|
100
123
101
124
## Story Demos (26 groupings)
102
125
@@ -131,32 +154,32 @@ Each story prompt asks Claude to perform a natural workflow using 2-4 tools in s
0 commit comments