hyperframes 0.1.15 → 0.2.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/README.md +3 -3
  2. package/dist/cli.js +3968 -3297
  3. package/dist/skills/hyperframes-captions/SKILL.md +1 -1
  4. package/dist/skills/hyperframes-compose/SKILL.md +1 -0
  5. package/dist/studio/assets/index-Bkp9HQbo.css +1 -0
  6. package/dist/studio/assets/index-DfhSlTti.js +93 -0
  7. package/dist/studio/index.html +2 -2
  8. package/dist/templates/_shared/CLAUDE.md +1 -1
  9. package/package.json +3 -2
  10. package/dist/studio/assets/index-CLmYRLY-.css +0 -1
  11. package/dist/studio/assets/index-CRvFpc0E.js +0 -84
  12. package/dist/templates/decision-tree/compositions/decision_tree.html +0 -420
  13. package/dist/templates/decision-tree/index.html +0 -56
  14. package/dist/templates/generators.ts +0 -32
  15. package/dist/templates/kinetic-type/compositions/main-graphics.html +0 -588
  16. package/dist/templates/kinetic-type/index.html +0 -61
  17. package/dist/templates/nyt-graph/compositions/nyt-chart.html +0 -450
  18. package/dist/templates/nyt-graph/index.html +0 -51
  19. package/dist/templates/play-mode/compositions/captions.html +0 -163
  20. package/dist/templates/play-mode/compositions/intro.html +0 -107
  21. package/dist/templates/play-mode/compositions/stats.html +0 -388
  22. package/dist/templates/play-mode/index.html +0 -239
  23. package/dist/templates/product-promo/assets/figma-cursors.svg +0 -30
  24. package/dist/templates/product-promo/assets/figma-logo-pieces.svg +0 -15
  25. package/dist/templates/product-promo/assets/figma-logo-pills.svg +0 -6
  26. package/dist/templates/product-promo/compositions/scene1-logo-intro.html +0 -189
  27. package/dist/templates/product-promo/compositions/scene2-4-canvas.html +0 -570
  28. package/dist/templates/product-promo/compositions/scene5-logo-outro.html +0 -226
  29. package/dist/templates/product-promo/index.html +0 -158
  30. package/dist/templates/swiss-grid/assets/swiss-grid.svg +0 -116
  31. package/dist/templates/swiss-grid/compositions/captions.html +0 -148
  32. package/dist/templates/swiss-grid/compositions/graphics.html +0 -207
  33. package/dist/templates/swiss-grid/compositions/intro.html +0 -131
  34. package/dist/templates/swiss-grid/index.html +0 -234
  35. package/dist/templates/vignelli/compositions/captions.html +0 -181
  36. package/dist/templates/vignelli/compositions/overlays.html +0 -323
  37. package/dist/templates/vignelli/index.html +0 -190
  38. package/dist/templates/warm-grain/compositions/captions.html +0 -147
  39. package/dist/templates/warm-grain/compositions/graphics.html +0 -164
  40. package/dist/templates/warm-grain/compositions/intro.html +0 -86
  41. package/dist/templates/warm-grain/index.html +0 -294
@@ -1,207 +0,0 @@
1
- <template id="graphics-template">
2
- <div data-composition-id="graphics" data-width="1920" data-height="1080" data-duration="15">
3
- <div class="grid-container">
4
- <!-- Stat 1: 47% -->
5
- <div id="stat1" class="stat-group">
6
- <div class="stat-value">47%</div>
7
- <div class="stat-label">NEED MOTION GRAPHICS</div>
8
- </div>
9
-
10
- <!-- Stat 2: 62% -->
11
- <div id="stat2" class="stat-group">
12
- <div class="stat-value">62%</div>
13
- <div class="stat-label">LOSING ATTENTION</div>
14
- <div class="progress-container">
15
- <div class="progress-bar"></div>
16
- </div>
17
- </div>
18
-
19
- <!-- Stat 3: 3 OF 4 -->
20
- <div id="stat3" class="stat-group">
21
- <div class="stat-value">3 OF 4</div>
22
- <div class="stat-label">LACK EDITING SKILLS</div>
23
- <div class="grid-blocks">
24
- <div class="block gold"></div>
25
- <div class="block gold"></div>
26
- <div class="block gold"></div>
27
- <div class="block navy"></div>
28
- </div>
29
- </div>
30
- </div>
31
-
32
- <style>
33
- [data-composition-id="graphics"] {
34
- font-family: "Helvetica", Arial, sans-serif;
35
- color: #0a1e3d;
36
- background: transparent;
37
- width: 1920px;
38
- height: 1080px;
39
- position: relative;
40
- overflow: hidden;
41
- }
42
-
43
- [data-composition-id="graphics"] .grid-container {
44
- display: grid;
45
- grid-template-columns: repeat(12, 1fr);
46
- grid-template-rows: repeat(12, 1fr);
47
- width: 100%;
48
- height: 100%;
49
- padding: 80px;
50
- gap: 20px;
51
- }
52
-
53
- [data-composition-id="graphics"] .stat-group {
54
- opacity: 0;
55
- display: flex;
56
- flex-direction: column;
57
- justify-content: flex-start;
58
- align-items: flex-start;
59
- background: #f2f2f2;
60
- padding: 40px;
61
- border-left: 10px solid #d4a017;
62
- box-shadow: 20px 20px 0px rgba(10, 30, 61, 0.1);
63
- }
64
-
65
- /* Positioning Stats on Grid - Adjusted for A-roll structure */
66
- [data-composition-id="graphics"] #stat1 {
67
- grid-column: 2 / 6;
68
- grid-row: 3 / 7;
69
- }
70
-
71
- [data-composition-id="graphics"] #stat2 {
72
- grid-column: 2 / 6;
73
- grid-row: 3 / 7;
74
- }
75
-
76
- [data-composition-id="graphics"] #stat3 {
77
- grid-column: 7 / 12;
78
- grid-row: 3 / 7;
79
- }
80
-
81
- [data-composition-id="graphics"] .stat-value {
82
- font-size: 140px;
83
- font-weight: 900;
84
- color: #d4a017;
85
- line-height: 0.8;
86
- margin-bottom: 15px;
87
- }
88
-
89
- [data-composition-id="graphics"] .stat-label {
90
- font-size: 24px;
91
- font-weight: 300; /* Lighter weight */
92
- color: #0a1e3d;
93
- letter-spacing: 2px;
94
- text-transform: uppercase;
95
- }
96
-
97
- /* Progress Bar for Stat 2 */
98
- [data-composition-id="graphics"] .progress-container {
99
- width: 100%;
100
- height: 24px;
101
- background: #e0e0e0;
102
- margin-top: 30px;
103
- border: 2px solid #0a1e3d;
104
- position: relative;
105
- }
106
-
107
- [data-composition-id="graphics"] .progress-bar {
108
- width: 0%;
109
- height: 100%;
110
- background: #d4a017;
111
- }
112
-
113
- /* Grid Blocks for Stat 3 */
114
- [data-composition-id="graphics"] .grid-blocks {
115
- display: flex;
116
- gap: 20px;
117
- margin-top: 30px;
118
- }
119
-
120
- [data-composition-id="graphics"] .block {
121
- width: 80px;
122
- height: 80px;
123
- border: 3px solid #0a1e3d;
124
- }
125
-
126
- [data-composition-id="graphics"] .block.gold {
127
- background: #d4a017;
128
- }
129
-
130
- [data-composition-id="graphics"] .block.navy {
131
- background: #0a1e3d;
132
- }
133
- </style>
134
-
135
- <script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>
136
- <script>
137
- (function () {
138
- const tl = gsap.timeline({ paused: true });
139
-
140
- // Timing Constants
141
- const S1_START = 1.86;
142
- const S1_END = 4.5;
143
- const S2_START = 4.68;
144
- const S2_END = 8.6;
145
- const S3_START = 8.88;
146
- const S3_END = 14.2;
147
-
148
- const SLIDE_DUR = 0.25; // 250ms
149
- const SHARP_EASE = "power2.out";
150
-
151
- // Stat 1 Animation
152
- tl.fromTo(
153
- "#stat1",
154
- { x: -200, opacity: 0 },
155
- { x: 0, opacity: 1, duration: SLIDE_DUR, ease: SHARP_EASE },
156
- S1_START,
157
- );
158
- tl.to(
159
- "#stat1",
160
- { x: 200, opacity: 0, duration: SLIDE_DUR, ease: "power2.in" },
161
- S1_END - SLIDE_DUR,
162
- );
163
-
164
- // Stat 2 Animation
165
- tl.fromTo(
166
- "#stat2",
167
- { y: 200, opacity: 0 },
168
- { y: 0, opacity: 1, duration: SLIDE_DUR, ease: SHARP_EASE },
169
- S2_START,
170
- );
171
- // Progress bar fill
172
- tl.to(
173
- "#stat2 .progress-bar",
174
- { width: "62%", duration: S2_END - S2_START - SLIDE_DUR * 2, ease: "none" },
175
- S2_START + SLIDE_DUR,
176
- );
177
- tl.to(
178
- "#stat2",
179
- { y: -200, opacity: 0, duration: SLIDE_DUR, ease: "power2.in" },
180
- S2_END - SLIDE_DUR,
181
- );
182
-
183
- // Stat 3 Animation
184
- tl.fromTo(
185
- "#stat3",
186
- { x: 200, opacity: 0 },
187
- { x: 0, opacity: 1, duration: SLIDE_DUR, ease: SHARP_EASE },
188
- S3_START,
189
- );
190
- // Stagger blocks
191
- tl.from(
192
- "#stat3 .block",
193
- { scale: 0, duration: 0.3, stagger: 0.1, ease: "back.out(1.7)" },
194
- S3_START + SLIDE_DUR,
195
- );
196
- tl.to(
197
- "#stat3",
198
- { x: -200, opacity: 0, duration: SLIDE_DUR, ease: "power2.in" },
199
- S3_END - SLIDE_DUR,
200
- );
201
-
202
- window.__timelines = window.__timelines || {};
203
- window.__timelines["graphics"] = tl;
204
- })();
205
- </script>
206
- </div>
207
- </template>
@@ -1,131 +0,0 @@
1
- <template id="intro-template">
2
- <div data-composition-id="intro" data-width="1920" data-height="1080" data-duration="1.86">
3
- <div class="container">
4
- <div class="grid-line"></div>
5
- <div class="text-wrapper">
6
- <h1 class="title">HYPERFRAMES</h1>
7
- <h2 class="subtitle">THE SURVEY FINDINGS</h2>
8
- </div>
9
- </div>
10
-
11
- <style>
12
- [data-composition-id="intro"] {
13
- background-color: #f5f5f5; /* Off-white */
14
- width: 1920px;
15
- height: 1080px;
16
- display: flex;
17
- align-items: center;
18
- justify-content: center;
19
- font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
20
- overflow: hidden;
21
- }
22
-
23
- [data-composition-id="intro"] .container {
24
- position: relative;
25
- width: 100%;
26
- height: 100%;
27
- display: flex;
28
- flex-direction: column;
29
- justify-content: center;
30
- padding-left: 160px; /* Swiss grid alignment */
31
- }
32
-
33
- [data-composition-id="intro"] .grid-line {
34
- position: absolute;
35
- left: 160px;
36
- top: 50%;
37
- width: 0px;
38
- height: 12px;
39
- background-color: #0a1e3d; /* Navy */
40
- transform: translateY(-180px); /* Positioned above the text */
41
- }
42
-
43
- [data-composition-id="intro"] .text-wrapper {
44
- display: flex;
45
- flex-direction: column;
46
- gap: 0;
47
- overflow: hidden;
48
- }
49
-
50
- [data-composition-id="intro"] .title {
51
- color: #0a1e3d;
52
- font-size: 180px;
53
- font-weight: 900; /* Black weight */
54
- line-height: 0.9;
55
- margin: 0;
56
- letter-spacing: -0.04em;
57
- text-transform: uppercase;
58
- transform: translateX(-100%); /* Start off-screen left */
59
- }
60
-
61
- [data-composition-id="intro"] .subtitle {
62
- color: #0a1e3d;
63
- font-size: 64px;
64
- font-weight: 300; /* Lighter weight for contrast */
65
- line-height: 1.2;
66
- margin: 0;
67
- letter-spacing: 0.1em;
68
- text-transform: uppercase;
69
- transform: translateX(-100%); /* Start off-screen left */
70
- margin-top: 20px;
71
- }
72
- </style>
73
-
74
- <script>
75
- (function () {
76
- const tl = gsap.timeline({ paused: true });
77
-
78
- // Mechanical timing: 200ms (0.2s)
79
- const MECHANICAL_DURATION = 0.2;
80
- const STAGGER = 0.1;
81
-
82
- // 1. Animate the grid line first
83
- tl.to(
84
- ".grid-line",
85
- {
86
- width: "1200px",
87
- duration: 0.4,
88
- ease: "power4.out",
89
- },
90
- 0.2,
91
- );
92
-
93
- // 2. Slide in the title
94
- tl.to(
95
- ".title",
96
- {
97
- x: 0,
98
- duration: MECHANICAL_DURATION,
99
- ease: "power2.inOut",
100
- },
101
- 0.5,
102
- );
103
-
104
- // 3. Slide in the subtitle with a slight stagger
105
- tl.to(
106
- ".subtitle",
107
- {
108
- x: 0,
109
- duration: MECHANICAL_DURATION,
110
- ease: "power2.inOut",
111
- },
112
- 0.5 + STAGGER,
113
- );
114
-
115
- // 4. Subtle ambient motion (slow drift) to keep it alive
116
- tl.to(
117
- ".text-wrapper",
118
- {
119
- x: 30,
120
- duration: 1.16, // Adjusted to fit 1.86s total
121
- ease: "none",
122
- },
123
- 0.7,
124
- );
125
-
126
- window.__timelines = window.__timelines || {};
127
- window.__timelines["intro"] = tl;
128
- })();
129
- </script>
130
- </div>
131
- </template>
@@ -1,234 +0,0 @@
1
- <!doctype html>
2
- <html lang="en">
3
- <head>
4
- <meta charset="UTF-8" />
5
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
- <title>Swiss Grid - Hyperframes</title>
7
- <script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>
8
- <style>
9
- body,
10
- html {
11
- margin: 0;
12
- padding: 0;
13
- width: 1920px;
14
- height: 1080px;
15
- background-color: #f2f2f2;
16
- overflow: hidden;
17
- font-family: "Helvetica", Arial, sans-serif;
18
- }
19
-
20
- #master-root {
21
- width: 1920px;
22
- height: 1080px;
23
- position: relative;
24
- }
25
-
26
- .background-grid {
27
- position: absolute;
28
- top: 0;
29
- left: 0;
30
- width: 100%;
31
- height: 100%;
32
- z-index: 0;
33
- }
34
-
35
- /* A-roll styling */
36
- #short_mag_cut_frame {
37
- position: absolute;
38
- border-radius: 8px; /* Required */
39
- z-index: 1;
40
- box-shadow: 0 20px 40px rgba(0, 0, 0, 0.3);
41
- overflow: hidden;
42
- background: #000;
43
- }
44
-
45
- #short_mag_cut,
46
- #short_mag_cut_frame > img.__render_frame__,
47
- #short_mag_cut_frame > img.__preview_render_frame__ {
48
- position: absolute;
49
- inset: 0;
50
- width: 100%;
51
- height: 100%;
52
- object-fit: cover;
53
- object-position: center;
54
- display: block;
55
- }
56
-
57
- /* Overlay layers */
58
- .overlay-layer {
59
- position: absolute;
60
- top: 0;
61
- left: 0;
62
- width: 100%;
63
- height: 100%;
64
- pointer-events: none;
65
- }
66
-
67
- #intro-comp {
68
- z-index: 2;
69
- }
70
- #graphics-comp {
71
- z-index: 3;
72
- }
73
- #captions-comp {
74
- z-index: 4;
75
- }
76
- </style>
77
- </head>
78
- <body>
79
- <div
80
- id="master-root"
81
- data-composition-id="master"
82
- data-width="1920"
83
- data-height="1080"
84
- data-start="0"
85
- data-duration="__VIDEO_DURATION__"
86
- >
87
- <!-- Background Grid -->
88
- <img
89
- id="bg-grid"
90
- class="background-grid"
91
- src="assets/swiss-grid.svg"
92
- alt="Grid"
93
- data-start="0"
94
- data-duration="__VIDEO_DURATION__"
95
- data-track-index="0"
96
- />
97
-
98
- <!-- A-roll Video -->
99
- <div id="short_mag_cut_frame">
100
- <video
101
- id="short_mag_cut"
102
- src="__VIDEO_SRC__"
103
- muted
104
- playsinline
105
- data-start="0"
106
- data-duration="__VIDEO_DURATION__"
107
- data-track-index="1"
108
- ></video>
109
- </div>
110
- <audio
111
- id="a-roll-audio"
112
- src="__VIDEO_SRC__"
113
- data-start="0"
114
- data-duration="__VIDEO_DURATION__"
115
- data-track-index="5"
116
- data-volume="1"
117
- ></audio>
118
-
119
- <!-- Intro Sub-composition -->
120
- <div
121
- id="intro-comp"
122
- class="overlay-layer"
123
- data-composition-id="intro"
124
- data-composition-src="compositions/intro.html"
125
- data-start="0"
126
- data-duration="1.86"
127
- data-track-index="2"
128
- ></div>
129
-
130
- <!-- Graphics Sub-composition -->
131
- <div
132
- id="graphics-comp"
133
- class="overlay-layer"
134
- data-composition-id="graphics"
135
- data-composition-src="compositions/graphics.html"
136
- data-start="0"
137
- data-duration="__VIDEO_DURATION__"
138
- data-track-index="3"
139
- ></div>
140
-
141
- <!-- Captions Sub-composition -->
142
- <div
143
- id="captions-comp"
144
- class="overlay-layer"
145
- data-composition-id="captions"
146
- data-composition-src="compositions/captions.html"
147
- data-start="0"
148
- data-duration="__VIDEO_DURATION__"
149
- data-track-index="4"
150
- ></div>
151
-
152
- <!-- Sound Effects (src set dynamically; omitted to avoid 404s) -->
153
- <audio id="sfx-intro" data-start="0" data-track-index="5" data-duration="1"></audio>
154
- <audio id="sfx-stat1" data-start="1.86" data-track-index="5" data-duration="1"></audio>
155
- <audio id="sfx-stat2" data-start="4.68" data-track-index="5" data-duration="1"></audio>
156
- <audio id="sfx-stat3" data-start="8.88" data-track-index="5" data-duration="1"></audio>
157
-
158
- <script>
159
- window.__timelines = window.__timelines || {};
160
-
161
- const masterTL = gsap.timeline({ paused: true });
162
- const v = document.getElementById("short_mag_cut_frame");
163
-
164
- // --- A-ROLL MOVEMENT (Structured Swiss Layout) ---
165
-
166
- // 1. Entrance (0-1.86s): Slide in from left, settle centered for Intro
167
- masterTL.fromTo(
168
- v,
169
- { x: -1000, y: 120, width: 960, height: 840 },
170
- { x: 480, y: 120, width: 960, height: 840, duration: 0.8, ease: "power2.out" },
171
- 0,
172
- );
173
-
174
- // 2. Stat 1 (1.86s - 4.68s): Move to right side (Graphic is on left)
175
- masterTL.to(
176
- v,
177
- {
178
- x: 1080,
179
- y: 120,
180
- width: 720,
181
- height: 720,
182
- duration: 0.25,
183
- ease: "expo.out",
184
- },
185
- 1.86,
186
- );
187
-
188
- // 3. Stat 2 (4.68s - 8.88s): Stay right, zoom in slightly
189
- masterTL.to(
190
- v,
191
- {
192
- x: 1080,
193
- y: 60,
194
- width: 780,
195
- height: 780,
196
- duration: 0.25,
197
- ease: "expo.out",
198
- },
199
- 4.68,
200
- );
201
-
202
- // 4. Stat 3 (8.88s - 14.2s): Move to left side (Graphic is on right)
203
- masterTL.to(
204
- v,
205
- {
206
- x: 120,
207
- y: 120,
208
- width: 720,
209
- height: 720,
210
- duration: 0.25,
211
- ease: "expo.out",
212
- },
213
- 8.88,
214
- );
215
-
216
- // 5. Conclusion (14.2s - 16.04s): Center large
217
- masterTL.to(
218
- v,
219
- {
220
- x: 240,
221
- y: 60,
222
- width: 1440,
223
- height: 810,
224
- duration: 0.5,
225
- ease: "expo.out",
226
- },
227
- 14.2,
228
- );
229
-
230
- window.__timelines["master"] = masterTL;
231
- </script>
232
- </div>
233
- </body>
234
- </html>