Skip to content

Commit e09a067

Browse files
committed
wpm - normalization
1 parent 09c913e commit e09a067

1 file changed

Lines changed: 37 additions & 30 deletions

File tree

README.md

Lines changed: 37 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ version: "1.0"
107107
Segments are major sections of the script.
108108

109109
```markdown
110-
## [SegmentName|120WPM|Emotion|Timing]
110+
## [SegmentName|120WPM|Emotion|Timing|Archetype:Name]
111111
```
112112

113113
All parameters after the name are optional, separated by `|`. Parameters are identified by format, not by position:
@@ -210,6 +210,8 @@ Inline markers are embedded within phrase text to control presentation.
210210

211211
**Note:** All relative speed tags are **relative to the base speed**, not absolute values. The multiplier is calculated as `1 + (offset / 100)`. For example, `slow` with offset `-20` → multiplier `1 + (-20/100)` = `0.8`. Tags stack multiplicatively when nested: `[xslow][slow]text[/slow][/xslow]` = base × 0.6 × 0.8 = 48% of base.
212212

213+
**Note on `[xfast]`:** At the default base of 140 WPM, `[xfast]` produces 210 WPM — above the comfortable teleprompter range (100–170). This is intentional: `[xfast]` is designed for short throwaway phrases where the teleprompter scrolls quickly past low-importance text. The reader is not expected to articulate every word at 210 WPM — the visual speed cue signals "skim through this." For sustained reading, authors should prefer `[fast]` (175 WPM) or lower the `base_wpm`.
214+
213215
#### Runtime Speed Control
214216

215217
The **+/−** buttons on the reading page change the **base speed** for the current run. All relative speed tags (`[xslow]`, `[slow]`, `[fast]`, `[xfast]`) automatically scale with the new base, preserving their proportional relationship. For example, pressing **+** to increase from 140 to 150 WPM means `[slow]` changes from 112 to 120 WPM.
@@ -457,7 +459,7 @@ Each archetype has expected delivery parameter ranges. These are the "ideal" val
457459
| Volume | `soft` or default | Intimate, not projecting |
458460
| Speed | 125–150 WPM | Unhurried, conversational pace |
459461
| Pauses | Natural, comfortable | Not dramatic |
460-
| Fillers | Tolerated | "um," "you know" add authenticity |
462+
| Fillers | Tolerated | "um," "you know" add authenticity _(author guidance only — not validated)_ |
461463

462464
**Motivator**_Inspire_ (recommended WPM: **155**)
463465

@@ -469,19 +471,19 @@ Each archetype has expected delivery parameter ranges. These are the "ideal" val
469471
| Volume | `loud` | Projected, fills the room |
470472
| Speed | 145–170 WPM | Energetic, building — fastest teleprompter archetype |
471473
| Pauses | Strategic dramatic pauses | After climactic statements — let it land |
472-
| Fillers | None | Momentum should not be broken |
474+
| Fillers | None | Momentum should not be broken _(author guidance only — not validated)_ |
473475

474476
**Educator**_Inform_ (recommended WPM: **120**)
475477

476478
| Parameter | Expected | Notes |
477479
|-----------|----------|-------|
478-
| Articulation | neutral (neither) | Clear, precise diction — not strongly legato or staccato |
480+
| Articulation | none expected | Clear, precise diction — neither `[legato]` nor `[staccato]` expected; both produce warnings |
479481
| Energy | 3–5 | Calm, grounded, steady |
480482
| Melody | 2–4 | Low — matter-of-fact, informational |
481483
| Volume | default | Medium, controlled, consistent |
482484
| Speed | 110–135 WPM | Deliberate, measured — slowest archetype for comprehension |
483485
| Pauses | Frequent, structured | Between concepts for processing |
484-
| Fillers | None | Precision matters |
486+
| Fillers | None | Precision matters _(author guidance only — not validated)_ |
485487

486488
**Coach**_Guide & instruct_ (recommended WPM: **145**)
487489

@@ -493,31 +495,31 @@ Each archetype has expected delivery parameter ranges. These are the "ideal" val
493495
| Volume | `loud` | Assertive, commanding |
494496
| Speed | 135–160 WPM | Punchy, variable — fast bursts then pause |
495497
| Pauses | Sharp, short | Between directives (beat. beat. beat.) |
496-
| Fillers | Zero tolerance | Every word is deliberate |
498+
| Fillers | Zero tolerance | Every word is deliberate _(author guidance only — not validated)_ |
497499

498500
**Storyteller**_Transport & engage_ (recommended WPM: **125**)
499501

500502
| Parameter | Expected | Notes |
501503
|-----------|----------|-------|
502-
| Articulation | mixed (`legato` with `staccato` moments) | Fluid with dramatic punctuation |
504+
| Articulation | both valid | Fluid with dramatic punctuation — `[legato]` and `[staccato]` both accepted, no warnings |
503505
| Energy | 4–7 | Medium, modulated — rises and falls with narrative |
504506
| Melody | 8–10 | Very high — the most melodic archetype |
505507
| Volume | variable | Whisper to full projection within one story |
506508
| Speed | 100–150 WPM | Highly variable — slows for drama, speeds for action |
507509
| Pauses | Long, dramatic | Cliffhanger beats, suspense gaps |
508-
| Fillers | None | Every word chosen for narrative effect |
510+
| Fillers | None | Every word chosen for narrative effect _(author guidance only — not validated)_ |
509511

510512
**Entertainer**_Delight_ (recommended WPM: **150**)
511513

512514
| Parameter | Expected | Notes |
513515
|-----------|----------|-------|
514-
| Articulation | mixed | `staccato` for punchlines, `legato` for setups |
516+
| Articulation | both valid | `staccato` for punchlines, `legato` for setups — both accepted, no warnings |
515517
| Energy | 6–8 | High, playful, light |
516518
| Melody | 7–9 | High — sing-song quality, playful rises |
517519
| Volume | variable | Medium-high with sudden drops for comedic effect |
518520
| Speed | 140–165 WPM | Rhythmic, comedic timing is paramount |
519521
| Pauses | Critical | Before/after punchlines |
520-
| Fillers | Intentional | Used for comedic timing |
522+
| Fillers | Intentional | Used for comedic timing _(author guidance only — not validated)_ |
521523

522524
##### Archetype Validation
523525

@@ -529,15 +531,20 @@ Validation rules:
529531
|-----------|----------|---------|
530532
| `[staccato]` inside `Archetype:Friend` | warning | Friend expects legato delivery |
531533
| `[legato]` inside `Archetype:Coach` | warning | Coach expects staccato delivery |
534+
| `[legato]` or `[staccato]` inside `Archetype:Educator` | warning | Educator expects no articulation tags (natural diction) |
532535
| `[energy:2]` inside `Archetype:Motivator` | warning | Motivator expects energy 7–10 |
533536
| `[energy:9]` inside `Archetype:Educator` | warning | Educator expects energy 3–5 |
537+
| `[energy:3]` inside `Archetype:Entertainer` | warning | Entertainer expects energy 6–8 |
534538
| `[melody:9]` inside `Archetype:Coach` | warning | Coach expects melody 1–3 |
535539
| `[melody:2]` inside `Archetype:Storyteller` | warning | Storyteller expects melody 8–10 |
540+
| `[melody:2]` inside `Archetype:Entertainer` | warning | Entertainer expects melody 7–9 |
536541
| `[whisper]` inside `Archetype:Motivator` | warning | Motivator expects loud delivery |
537542
| `[loud]` inside `Archetype:Friend` | warning | Friend expects soft/default volume |
538543
| `[xfast]` inside `Archetype:Educator` | warning | Educator expects slower pace (110–135) |
539544
| `[xslow]` inside `Archetype:Motivator` | warning | Motivator expects faster pace (145–170) |
540545

546+
Note: `Archetype:Storyteller` and `Archetype:Entertainer` accept both `[legato]` and `[staccato]` without warnings — both articulation styles are valid for these archetypes.
547+
541548
Validation is **advisory** — it helps authors stay within an archetype's established delivery profile, but deliberate violations are valid. For example, a Coach might intentionally drop to `[energy:3]` for a quiet, intense moment before building back up.
542549

543550
##### Archetype Rhythm Profiles
@@ -569,14 +576,14 @@ Beyond inline tag validation, each archetype has a distinct **rhythm** — measu
569576

570577
| Condition | Severity | Example |
571578
|-----------|----------|---------|
572-
| Average phrase length > 10 words in `Archetype:Coach` | warning | Coach expects short, punchy phrases (3–8 words) |
573-
| Average phrase length < 8 words in `Archetype:Educator` | warning | Educator expects longer, explanatory phrases (10–25 words) |
574-
| Pause frequency < 4 per 100 words in `Archetype:Educator` | warning | Educator expects frequent pauses between concepts |
575-
| Pause frequency < 8 per 100 words in `Archetype:Coach` | warning | Coach expects pauses between each directive |
576-
| Emphasis density < 10% in `Archetype:Coach` | warning | Coach expects heavy emphasis — key words should stand out |
577-
| Emphasis density > 15% in `Archetype:Educator` | warning | Educator expects restrained emphasis — precision, not drama |
578-
| Average pause > 1000 ms in `Archetype:Coach` | warning | Coach expects short, sharp pauses (200–400 ms) |
579-
| Average pause < 500 ms in `Archetype:Storyteller` | warning | Storyteller expects longer dramatic pauses |
579+
| Average phrase length > 8 words in `Archetype:Coach` | warning | Coach expects short, punchy phrases (3–8 words) |
580+
| Average phrase length < 10 words in `Archetype:Educator` | warning | Educator expects longer, explanatory phrases (10–25 words) |
581+
| Pause frequency < 6 per 100 words in `Archetype:Educator` | warning | Educator expects frequent pauses between concepts (6–12) |
582+
| Pause frequency < 8 per 100 words in `Archetype:Coach` | warning | Coach expects pauses between each directive (8–15) |
583+
| Emphasis density < 15% in `Archetype:Coach` | warning | Coach expects heavy emphasis (15–30%) |
584+
| Emphasis density > 8% in `Archetype:Educator` | warning | Educator expects restrained emphasis (3–8%) |
585+
| Average pause > 400 ms in `Archetype:Coach` | warning | Coach expects short, sharp pauses (200–400 ms) |
586+
| Average pause < 500 ms in `Archetype:Storyteller` | warning | Storyteller expects longer dramatic pauses (500–3000 ms) |
580587
| No speed variation in `Archetype:Storyteller` | warning | Storyteller expects dynamic speed changes for narrative effect |
581588

582589
**Example — Coach rhythm (good):**
@@ -592,7 +599,7 @@ No excuses. / No delays. / **Today.**
592599
[/loud][/melody][/energy][/staccato]
593600
```
594601

595-
Rhythm analysis: avg phrase 3.3 words, 15 pauses/100w, avg pause 450ms, emphasis 33% — matches Coach profile.
602+
Rhythm analysis: avg phrase 3.3 words, 15 pauses/100w, avg pause 350ms, emphasis 33% — matches Coach profile.
596603

597604
**Example — Coach rhythm (warning):**
598605

@@ -695,7 +702,7 @@ Melody is specified with the `[melody:N]` tag where N is an integer from **1 to
695702
| 7–8 | High melody. Expressive, musical, wide pitch range. | Storyteller, motivational build-up. |
696703
| 9–10 | Dramatic. Theatrical, sweeping pitch contours. | Voice actor, preacher in full flow. |
697704

698-
### Vocal Archetypes
705+
### Vocal Archetype Keywords
699706

700707
Vocal archetypes are a **closed set** — parsers should treat unknown archetype keywords as invalid header parameters. Each archetype defines a composite delivery persona based on Vinh Giang's vocal communication framework.
701708

@@ -705,10 +712,10 @@ The `Archetype:Name` parameter is added to segment or block headers using the `|
705712
|---------|------|-----------------|--------------|--------|--------|
706713
| `Friend` | Connect | 135 | `legato` | 4–6 | 6–8 |
707714
| `Motivator` | Inspire | 155 | `legato` | 7–10 | 7–9 |
708-
| `Educator` | Inform | 120 | neutral | 3–5 | 2–4 |
715+
| `Educator` | Inform | 120 | none expected | 3–5 | 2–4 |
709716
| `Coach` | Guide & instruct | 145 | `staccato` | 7–9 | 1–3 |
710-
| `Storyteller` | Transport & engage | 125 | mixed | 4–7 | 8–10 |
711-
| `Entertainer` | Delight | 150 | mixed | 6–8 | 7–9 |
717+
| `Storyteller` | Transport & engage | 125 | both valid | 4–7 | 8–10 |
718+
| `Entertainer` | Delight | 150 | both valid | 6–8 | 7–9 |
712719

713720
See the [Vocal Archetypes](#vocal-archetypes) section for full parameter profiles and validation rules.
714721

@@ -805,7 +812,7 @@ For any word, the effective WPM is determined by (highest priority first):
805812
5. `base_wpm` from front matter
806813
6. Default: 140 WPM
807814

808-
For example, `## [Rally|Archetype:Motivator]` without an explicit WPM uses 175 WPM (Motivator's recommended). But `## [Rally|150WPM|Archetype:Motivator]` uses 150 WPM — the explicit override wins.
815+
For example, `## [Rally|Archetype:Motivator]` without an explicit WPM uses 155 WPM (Motivator's recommended). But `## [Rally|150WPM|Archetype:Motivator]` uses 150 WPM — the explicit override wins.
809816

810817
### Pause Handling
811818

@@ -855,7 +862,7 @@ Phrases are the smallest unit for timing calculation.
855862

856863
### Nested Speed Resolution
857864

858-
When speed tags are nested, relative tags (`[slow]`, `[fast]`, etc.) stack multiplicatively against the **base speed** — not against each other:
865+
When speed tags are nested, relative tags (`[slow]`, `[fast]`, etc.) stack multiplicatively — each multiplier compounds on the previous:
859866

860867
- `[slow]text[/slow]` = base × 0.8
861868
- `[xslow][slow]text[/slow][/xslow]` = base × 0.6 × 0.8 = base × 0.48
@@ -975,7 +982,7 @@ The Actor profile targets natural spoken delivery — reading aloud from a telep
975982
|------|-------|
976983
| WPM error range | < 80 or > 220 |
977984
| WPM warning range | < 90 or > 200 |
978-
| Recommended WPM | 130–160 |
985+
| Recommended WPM | 125–150 |
979986
| Segment/Block WPM | Single integer |
980987
| Inline speed | Integer, respects allowed range |
981988

@@ -1081,10 +1088,10 @@ and a [emphasis]30% increase[/emphasis] in engagement. //
10811088
## [Action Items|Focused|Archetype:Coach]
10821089

10831090
### [Next Steps]
1084-
[staccato][energy:8][melody:2][loud]Three things. **Today.** //
1085-
One — download the beta. //
1086-
Two — run the benchmark. //
1087-
Three — share your feedback.[/loud][/melody][/energy][/staccato] //
1091+
[staccato][energy:8][melody:2][loud]**Three** things. **Today.** //
1092+
**One** — download the **beta**. //
1093+
**Two** — run the **benchmark**. //
1094+
**Three** — share your **feedback**.[/loud][/melody][/energy][/staccato]
10881095

10891096
## [Closing|Warm|Archetype:Friend]
10901097

0 commit comments

Comments
 (0)