hyperframes 0.1.14 → 0.1.15

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.
@@ -0,0 +1,588 @@
1
+ <template id="main-graphics-template">
2
+ <div
3
+ data-composition-id="main-graphics"
4
+ data-width="1920"
5
+ data-height="1080"
6
+ data-duration="14.72"
7
+ >
8
+ <!-- A-Roll Video -->
9
+ <video
10
+ id="a-roll-video"
11
+ src="https://gen-os-static.s3.us-east-2.amazonaws.com/astral_assets/uploaded_assets/67cf5a05_e134ec83a57042b38776c952da595870.mp4"
12
+ style="
13
+ position: absolute;
14
+ width: 100%;
15
+ height: 100%;
16
+ object-fit: cover;
17
+ opacity: 1;
18
+ z-index: 0;
19
+ "
20
+ crossorigin="anonymous"
21
+ ></video>
22
+
23
+ <!-- Scene 1: Hook -->
24
+ <div
25
+ id="white-wipe"
26
+ style="
27
+ position: absolute;
28
+ top: 0;
29
+ left: 0;
30
+ width: 100%;
31
+ height: 100%;
32
+ background-color: white;
33
+ z-index: 15;
34
+ "
35
+ ></div>
36
+ <div id="scene-1" class="scene">
37
+ <div class="hook-container">
38
+ <div class="hook-what-if">What if</div>
39
+ <div class="hook-motion-graphics">motion graphics</div>
40
+ <div class="hook-wrote-themselves">wrote themselves?</div>
41
+ </div>
42
+ </div>
43
+
44
+ <!-- Scene 2: Swiss Style -->
45
+ <div id="scene-2" class="scene">
46
+ <div class="swiss-panel">
47
+ <div class="swiss-grid">
48
+ <div class="grid-line horizontal" style="top: 25%"></div>
49
+ <div class="grid-line horizontal" style="top: 50%"></div>
50
+ <div class="grid-line horizontal" style="top: 75%"></div>
51
+ <div class="grid-line vertical" style="left: 25%"></div>
52
+ <div class="grid-line vertical" style="left: 50%"></div>
53
+ <div class="grid-line vertical" style="left: 75%"></div>
54
+ <div class="swiss-circle"></div>
55
+ <div class="swiss-square"></div>
56
+ </div>
57
+ <div class="swiss-content">
58
+ <div class="swiss-title">HyperFrames</div>
59
+ <div class="swiss-subtitle">turns code into</div>
60
+ <div class="swiss-main-text">
61
+ <span class="word">production-ready</span>
62
+ <span class="word">video</span>
63
+ </div>
64
+ </div>
65
+ </div>
66
+ </div>
67
+
68
+ <!-- Scene 3: Figma Config Style -->
69
+ <div id="scene-3" class="scene">
70
+ <div class="dark-overlay"></div>
71
+ <div class="figma-container">
72
+ <div class="figma-item" id="figma-animations">
73
+ <div class="glyph-container">
74
+ <div class="glyph-ring ring-unified"></div>
75
+ <div class="glyph-diamond"></div>
76
+ </div>
77
+ <div class="figma-label">animations</div>
78
+ </div>
79
+ <div class="figma-item" id="figma-transitions">
80
+ <div class="glyph-container">
81
+ <div class="glyph-rect rect-unified"></div>
82
+ <div class="glyph-wipe"></div>
83
+ </div>
84
+ <div class="figma-label">transitions</div>
85
+ </div>
86
+ <div class="figma-item" id="figma-typography">
87
+ <div class="glyph-container">
88
+ <div class="glyph-tri tri-unified"></div>
89
+ <div class="glyph-lines">
90
+ <div class="line"></div>
91
+ <div class="line"></div>
92
+ <div class="line"></div>
93
+ </div>
94
+ </div>
95
+ <div class="figma-label">typography</div>
96
+ </div>
97
+ <div class="figma-footer">all generated from a single prompt</div>
98
+ </div>
99
+ </div>
100
+
101
+ <!-- Scene 4: David Carson Style -->
102
+ <div id="scene-4" class="scene">
103
+ <div class="carson-overlay"></div>
104
+ <div class="carson-container">
105
+ <div class="carson-line-1">No timeline<span class="red-dot">.</span></div>
106
+ <div class="carson-line-2">no After Effects.</div>
107
+ </div>
108
+ </div>
109
+
110
+ <!-- Scene 5: Wes Anderson -->
111
+ <div id="scene-5" class="scene">
112
+ <div class="wes-bg"></div>
113
+ <div class="wes-container">
114
+ <div class="wes-text-top">Just describe the motion</div>
115
+ <div class="wes-rule"></div>
116
+ <div class="wes-text-bottom">and render.</div>
117
+ </div>
118
+ </div>
119
+
120
+ <!-- Scene 6: Vignelli Style -->
121
+ <div id="scene-6" class="scene">
122
+ <div
123
+ id="scene-6-overlay"
124
+ style="
125
+ position: absolute;
126
+ top: 0;
127
+ left: 0;
128
+ width: 100%;
129
+ height: 100%;
130
+ background-color: black;
131
+ z-index: -1;
132
+ "
133
+ ></div>
134
+ <div class="vignelli-container">
135
+ <div class="vignelli-title">HyperFrames</div>
136
+ <div class="vignelli-subtitle">is here.</div>
137
+ <div class="vignelli-rule"></div>
138
+ </div>
139
+ </div>
140
+
141
+ <!-- Black Out -->
142
+ <div
143
+ id="black-out"
144
+ style="
145
+ position: absolute;
146
+ top: 0;
147
+ left: 0;
148
+ width: 100%;
149
+ height: 100%;
150
+ background-color: black;
151
+ z-index: 100;
152
+ opacity: 0;
153
+ pointer-events: none;
154
+ "
155
+ ></div>
156
+
157
+ <style>
158
+ [data-composition-id="main-graphics"] {
159
+ background: black;
160
+ font-family: "Inter", sans-serif;
161
+ color: white;
162
+ overflow: hidden;
163
+ }
164
+
165
+ .scene {
166
+ position: absolute;
167
+ top: 0;
168
+ left: 0;
169
+ width: 100%;
170
+ height: 100%;
171
+ display: flex;
172
+ justify-content: center;
173
+ align-items: center;
174
+ opacity: 0;
175
+ z-index: 1;
176
+ }
177
+
178
+ /* Scene 1: Hook */
179
+ #scene-1 {
180
+ background-color: #0a0a0f;
181
+ z-index: 10;
182
+ opacity: 1;
183
+ }
184
+ .hook-container {
185
+ text-align: center;
186
+ }
187
+ .hook-what-if {
188
+ font-size: 32px;
189
+ font-weight: 400;
190
+ opacity: 0;
191
+ }
192
+ .hook-motion-graphics {
193
+ font-size: 120px;
194
+ font-weight: 900;
195
+ text-transform: uppercase;
196
+ margin-top: 10px;
197
+ transform: scale(0);
198
+ }
199
+ .hook-wrote-themselves {
200
+ font-size: 48px;
201
+ font-style: italic;
202
+ color: #00e5ff;
203
+ margin-top: 10px;
204
+ opacity: 0;
205
+ }
206
+
207
+ /* Scene 2: Swiss Style */
208
+ .swiss-panel {
209
+ position: absolute;
210
+ right: 100px;
211
+ width: 800px;
212
+ height: 400px;
213
+ background: #ffffff;
214
+ border-radius: 4px;
215
+ display: flex;
216
+ padding: 40px;
217
+ color: black;
218
+ transform: translateX(100%);
219
+ z-index: 2;
220
+ }
221
+ .swiss-grid {
222
+ position: absolute;
223
+ top: 0;
224
+ left: 0;
225
+ width: 100%;
226
+ height: 100%;
227
+ pointer-events: none;
228
+ }
229
+ .grid-line {
230
+ position: absolute;
231
+ background: #e53935;
232
+ }
233
+ .grid-line.horizontal {
234
+ width: 100%;
235
+ height: 2px;
236
+ }
237
+ .grid-line.vertical {
238
+ height: 100%;
239
+ width: 2px;
240
+ }
241
+
242
+ .swiss-circle {
243
+ position: absolute;
244
+ width: 60px;
245
+ height: 60px;
246
+ background: #e53935;
247
+ border-radius: 50%;
248
+ top: 20%;
249
+ left: 10%;
250
+ opacity: 0;
251
+ }
252
+ .swiss-square {
253
+ position: absolute;
254
+ width: 50px;
255
+ height: 50px;
256
+ background: black;
257
+ bottom: 15%;
258
+ right: 15%;
259
+ opacity: 0;
260
+ }
261
+
262
+ .swiss-content {
263
+ position: relative;
264
+ z-index: 3;
265
+ display: flex;
266
+ flex-direction: column;
267
+ justify-content: center;
268
+ }
269
+ .swiss-title {
270
+ font-family: "Inter", sans-serif;
271
+ font-size: 64px;
272
+ font-weight: 900;
273
+ opacity: 0;
274
+ }
275
+ .swiss-subtitle {
276
+ font-size: 24px;
277
+ color: #666;
278
+ margin-top: 10px;
279
+ opacity: 0;
280
+ }
281
+ .swiss-main-text {
282
+ font-size: 48px;
283
+ font-weight: 900;
284
+ margin-top: 20px;
285
+ display: flex;
286
+ gap: 15px;
287
+ }
288
+ .swiss-main-text .word {
289
+ opacity: 0;
290
+ }
291
+
292
+ /* Scene 3: Figma Config Style */
293
+ .dark-overlay {
294
+ position: absolute;
295
+ width: 100%;
296
+ height: 100%;
297
+ background: rgba(0, 0, 0, 0.55);
298
+ z-index: 1;
299
+ }
300
+ .figma-container {
301
+ position: relative;
302
+ z-index: 2;
303
+ width: 1200px;
304
+ display: flex;
305
+ justify-content: space-between;
306
+ align-items: center;
307
+ flex-wrap: wrap;
308
+ }
309
+ .figma-item {
310
+ display: flex;
311
+ flex-direction: column;
312
+ align-items: center;
313
+ gap: 20px;
314
+ opacity: 0;
315
+ }
316
+ .glyph-container {
317
+ position: relative;
318
+ width: 120px;
319
+ height: 120px;
320
+ display: flex;
321
+ justify-content: center;
322
+ align-items: center;
323
+ }
324
+ .glyph-ring {
325
+ position: absolute;
326
+ width: 100%;
327
+ height: 100%;
328
+ border-radius: 50%;
329
+ border: 8px solid transparent;
330
+ }
331
+ .ring-unified {
332
+ background:
333
+ linear-gradient(black, black) padding-box,
334
+ linear-gradient(to right, #f24e1e, #a259ff) border-box;
335
+ }
336
+ .glyph-diamond {
337
+ width: 40px;
338
+ height: 40px;
339
+ background: white;
340
+ transform: rotate(45deg);
341
+ }
342
+ .glyph-rect {
343
+ position: absolute;
344
+ width: 100%;
345
+ height: 100%;
346
+ border-radius: 8px;
347
+ background: linear-gradient(to bottom right, #f24e1e, #a259ff);
348
+ }
349
+ .glyph-wipe {
350
+ position: absolute;
351
+ width: 0%;
352
+ height: 100%;
353
+ background: rgba(255, 255, 255, 0.3);
354
+ left: 0;
355
+ }
356
+ .glyph-tri {
357
+ width: 100px;
358
+ height: 100px;
359
+ background: linear-gradient(to bottom right, #f24e1e, #a259ff);
360
+ clip-path: polygon(50% 0%, 0% 100%, 100% 100%);
361
+ }
362
+ .glyph-lines {
363
+ display: flex;
364
+ flex-direction: column;
365
+ gap: 8px;
366
+ width: 60px;
367
+ }
368
+ .glyph-lines .line {
369
+ height: 4px;
370
+ background: white;
371
+ width: 0;
372
+ }
373
+ .figma-label {
374
+ font-size: 40px;
375
+ font-weight: bold;
376
+ }
377
+ .figma-footer {
378
+ width: 100%;
379
+ text-align: center;
380
+ font-size: 22px;
381
+ margin-top: 60px;
382
+ opacity: 0;
383
+ }
384
+
385
+ /* Scene 4: David Carson Style */
386
+ .carson-overlay {
387
+ position: absolute;
388
+ width: 100%;
389
+ height: 100%;
390
+ background: rgba(0, 0, 0, 0.6);
391
+ z-index: 1;
392
+ }
393
+ .carson-container {
394
+ position: relative;
395
+ z-index: 2;
396
+ width: 100%;
397
+ height: 100%;
398
+ }
399
+ .carson-line-1 {
400
+ position: absolute;
401
+ top: 20%;
402
+ left: 10%;
403
+ font-size: 140px;
404
+ font-weight: 900;
405
+ transform: translateY(200px);
406
+ z-index: 2;
407
+ }
408
+ .carson-line-1 .red-dot {
409
+ color: #ff0000;
410
+ font-size: 240px;
411
+ position: absolute;
412
+ top: -40px;
413
+ left: 80%;
414
+ z-index: 1;
415
+ opacity: 0.8;
416
+ }
417
+ .carson-line-2 {
418
+ position: absolute;
419
+ bottom: 30%;
420
+ right: 10%;
421
+ font-size: 80px;
422
+ font-weight: 400;
423
+ opacity: 0;
424
+ z-index: 3;
425
+ transform: rotate(-5deg);
426
+ }
427
+
428
+ /* Scene 5: Wes Anderson */
429
+ .wes-bg {
430
+ position: absolute;
431
+ width: 100%;
432
+ height: 100%;
433
+ background: #f5f0e8;
434
+ z-index: -1;
435
+ }
436
+ .wes-bg::after {
437
+ content: "";
438
+ position: absolute;
439
+ top: 0;
440
+ left: 0;
441
+ width: 100%;
442
+ height: 100%;
443
+ opacity: 0.05;
444
+ background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noiseFilter'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.65' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noiseFilter)'/%3E%3C/svg%3E");
445
+ }
446
+ .wes-container {
447
+ text-align: center;
448
+ color: #2c1e16;
449
+ overflow: hidden;
450
+ }
451
+ .wes-text-top {
452
+ font-family: "Libre Baskerville", serif;
453
+ font-size: 44px;
454
+ font-style: italic;
455
+ transform: translateY(-100px);
456
+ }
457
+ .wes-rule {
458
+ width: 0;
459
+ height: 1px;
460
+ background: #2c1e16;
461
+ margin: 20px auto;
462
+ }
463
+ .wes-text-bottom {
464
+ font-family: "Libre Baskerville", serif;
465
+ font-size: 44px;
466
+ transform: translateY(100px);
467
+ }
468
+
469
+ /* Scene 6: Vignelli Style */
470
+ .vignelli-container {
471
+ text-align: center;
472
+ }
473
+ .vignelli-title {
474
+ font-family: "Inter", sans-serif;
475
+ font-size: 120px;
476
+ font-weight: 900;
477
+ letter-spacing: -0.02em;
478
+ opacity: 0;
479
+ }
480
+ .vignelli-subtitle {
481
+ font-family: "Inter", sans-serif;
482
+ font-size: 32px;
483
+ color: #00e5ff;
484
+ margin-top: 20px;
485
+ opacity: 0;
486
+ }
487
+ .vignelli-rule {
488
+ width: 0;
489
+ height: 2px;
490
+ background: white;
491
+ margin: 30px auto 0;
492
+ }
493
+ </style>
494
+
495
+ <script>
496
+ const tl = gsap.timeline({ paused: true });
497
+
498
+ const video = document.getElementById("a-roll-video");
499
+
500
+ // --- Initial Setup ---
501
+ tl.set(
502
+ video,
503
+ { width: "100%", height: "100%", left: 0, top: 0, borderRadius: 0, scale: 1, opacity: 0 },
504
+ 0,
505
+ );
506
+ tl.set("#white-wipe", { xPercent: -100 }, 0);
507
+
508
+ // --- Scene 1: Hook (0s - 2.0s) ---
509
+ tl.set("#scene-1", { opacity: 1, clipPath: "none" }, 0);
510
+ tl.to(".hook-what-if", { opacity: 1, y: -30, duration: 0.8, ease: "power3.out" }, 0.2);
511
+ tl.to(".hook-motion-graphics", { scale: 1, duration: 0.8, ease: "back.out(1.7)" }, 0.5);
512
+ tl.fromTo(
513
+ ".hook-wrote-themselves",
514
+ { x: 100, opacity: 0 },
515
+ { x: 0, opacity: 1, duration: 0.6, ease: "power2.out" },
516
+ 0.9,
517
+ );
518
+
519
+ // --- Transition to Scene 2 (2.0s - 2.4s) ---
520
+ tl.to("#white-wipe", { xPercent: 0, duration: 0.2, ease: "power2.in" }, 2.0);
521
+ tl.set("#scene-1", { opacity: 0 }, 2.2);
522
+ tl.set(video, { opacity: 1 }, 2.2);
523
+ tl.to("#white-wipe", { xPercent: 100, duration: 0.2, ease: "power2.out" }, 2.2);
524
+
525
+ // --- Scene 2: Swiss Style (2.0s - 5.0s) ---
526
+ tl.to("#scene-2", { opacity: 1, duration: 0.1 }, 2.2);
527
+ tl.to(".swiss-panel", { x: 0, duration: 0.8, ease: "expo.out" }, 2.3);
528
+ tl.to(".swiss-title", { opacity: 1, duration: 0.1 }, 2.5);
529
+ tl.to(".swiss-subtitle", { opacity: 1, y: 0, duration: 0.4 }, 2.7);
530
+ tl.to(
531
+ ".swiss-main-text .word",
532
+ { opacity: 1, y: 0, stagger: 0.15, duration: 0.5, ease: "power2.out" },
533
+ 3.0,
534
+ );
535
+ tl.to(".swiss-circle", { opacity: 1, scale: 1.2, duration: 0.6, ease: "back.out" }, 3.2);
536
+ tl.to(".swiss-square", { opacity: 1, rotation: 45, duration: 0.6, ease: "back.out" }, 3.4);
537
+ tl.to(".swiss-panel", { x: "120%", duration: 0.7, ease: "expo.in" }, 4.7);
538
+ tl.to("#scene-2", { opacity: 0, duration: 0.1 }, 5.0);
539
+
540
+ // --- Scene 3: Figma Config Style (5.3s - 9.6s) ---
541
+ tl.to("#scene-3", { opacity: 1, duration: 0.3 }, 5.3);
542
+ tl.to("#figma-animations", { opacity: 1, y: 0, duration: 0.6 }, 5.5);
543
+ tl.to(".glyph-diamond", { rotation: 225, duration: 2, repeat: 1, ease: "power2.inOut" }, 5.5);
544
+
545
+ tl.to("#figma-transitions", { opacity: 1, y: 0, duration: 0.6 }, 6.2);
546
+ tl.to(".glyph-wipe", { width: "100%", duration: 1, ease: "power2.inOut" }, 6.2);
547
+
548
+ tl.to("#figma-typography", { opacity: 1, y: 0, duration: 0.6 }, 6.9);
549
+ tl.to(".glyph-lines .line", { width: "100%", stagger: 0.2, duration: 0.5 }, 7.1);
550
+
551
+ tl.to(".figma-footer", { opacity: 1, y: -20, duration: 0.8 }, 7.8);
552
+ tl.to("#scene-3", { opacity: 0, duration: 0.5 }, 9.1);
553
+
554
+ // --- Scene 4: David Carson Style (9.6s - 11.7s) ---
555
+ tl.to("#scene-4", { opacity: 1, duration: 0.1 }, 9.6);
556
+ tl.to(".carson-line-1", { y: 0, duration: 0.6, ease: "expo.out" }, 9.7);
557
+ tl.to(".carson-line-2", { opacity: 1, x: -50, duration: 0.5, ease: "back.out" }, 10.2);
558
+ tl.to(".carson-container", { y: 300, duration: 0.6, ease: "expo.in" }, 11.4);
559
+ tl.to("#scene-4", { opacity: 0, duration: 0.1 }, 11.7);
560
+
561
+ // --- Scene 5: Wes Anderson (11.7s - 13.5s) ---
562
+ tl.to(video, { opacity: 0, duration: 0.4 }, 11.7);
563
+ tl.to("#scene-5", { opacity: 1, duration: 0.1 }, 11.7);
564
+ tl.to(".wes-text-top", { y: 0, duration: 0.6, ease: "back.out(1.2)" }, 12.0);
565
+ tl.to(".wes-rule", { width: 400, duration: 0.6 }, 12.3);
566
+ tl.to(".wes-text-bottom", { y: 0, duration: 0.6, ease: "back.out(1.2)" }, 12.6);
567
+ tl.to("#scene-5", { opacity: 0, duration: 0.5 }, 13.0);
568
+
569
+ // --- Scene 6: Vignelli Style (13.5s - 14.72s) ---
570
+ tl.set(video, { opacity: 1 }, 13.5);
571
+ tl.set("#scene-6", { opacity: 1 }, 13.5);
572
+ tl.set("#scene-6-overlay", { opacity: 1 }, 13.5);
573
+
574
+ tl.to("#scene-6-overlay", { opacity: 0.6, duration: 0.4 }, 13.5);
575
+
576
+ tl.to(".vignelli-title", { opacity: 1, duration: 0.5 }, 13.8);
577
+ tl.to(".vignelli-subtitle", { opacity: 1, duration: 0.5 }, 14.0);
578
+ tl.to(".vignelli-rule", { width: 300, duration: 0.4 }, 14.2);
579
+
580
+ tl.to("#scene-6-overlay", { opacity: 0, duration: 0.3 }, 14.4);
581
+
582
+ tl.set("#black-out", { opacity: 1 }, 14.7);
583
+
584
+ window.__timelines = window.__timelines || {};
585
+ window.__timelines["main-graphics"] = tl;
586
+ </script>
587
+ </div>
588
+ </template>
@@ -0,0 +1,61 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <meta name="viewport" content="width=1920, height=1080" />
6
+ <title>Kinetic Type</title>
7
+ <script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>
8
+ <link rel="preconnect" href="https://fonts.googleapis.com" />
9
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
10
+ <link
11
+ href="https://fonts.googleapis.com/css2?family=Inter:ital,wght@0,400;0,700;0,900;1,400&family=Libre+Baskerville:ital,wght@0,400;0,700;1,400&display=block"
12
+ rel="stylesheet"
13
+ />
14
+ <style>
15
+ * {
16
+ box-sizing: border-box;
17
+ margin: 0;
18
+ padding: 0;
19
+ }
20
+ html,
21
+ body {
22
+ margin: 0;
23
+ width: 1920px;
24
+ height: 1080px;
25
+ overflow: hidden;
26
+ background-color: #0a0a0f;
27
+ font-family:
28
+ "Inter",
29
+ -apple-system,
30
+ sans-serif;
31
+ }
32
+ </style>
33
+ </head>
34
+ <body>
35
+ <div
36
+ id="root"
37
+ data-composition-id="main"
38
+ data-start="0"
39
+ data-duration="15"
40
+ data-width="1920"
41
+ data-height="1080"
42
+ >
43
+ <div
44
+ id="graphics-layer"
45
+ data-composition-id="main-graphics"
46
+ data-composition-src="compositions/main-graphics.html"
47
+ data-start="0"
48
+ data-duration="15"
49
+ data-track-index="1"
50
+ data-width="1920"
51
+ data-height="1080"
52
+ ></div>
53
+ </div>
54
+
55
+ <script>
56
+ window.__timelines = window.__timelines || {};
57
+ const tl = gsap.timeline({ paused: true });
58
+ window.__timelines["main"] = tl;
59
+ </script>
60
+ </body>
61
+ </html>