@prestyj/cli 5.28.0 → 5.28.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.
- package/README.md +2 -2
- package/assets/motion/THIRD-PARTY.md +14 -19
- package/assets/motion/bin/flash-check.mjs +314 -0
- package/assets/motion/bin/fonts.mjs +17 -13
- package/assets/motion/bin/library.mjs +8 -8
- package/assets/motion/bin/motion-check.mjs +12 -6
- package/assets/motion/fonts/finger-paint/OFL.txt +93 -0
- package/assets/motion/fonts/finger-paint/finger-paint-normal.woff2 +0 -0
- package/assets/motion/fonts/fonts.json +56 -0
- package/assets/motion/fonts/short-stack/OFL.txt +94 -0
- package/assets/motion/fonts/short-stack/short-stack-normal.woff2 +0 -0
- package/assets/motion/fonts/sora/OFL.txt +93 -0
- package/assets/motion/fonts/sora/sora-normal.woff2 +0 -0
- package/assets/motion/fonts/specimen.jpg +0 -0
- package/assets/motion/fonts/unbounded/OFL.txt +93 -0
- package/assets/motion/fonts/unbounded/unbounded-normal.woff2 +0 -0
- package/assets/motion/library/README.md +2 -0
- package/assets/motion/plugin.json +1 -1
- package/assets/motion/references/motion-language.md +128 -0
- package/assets/motion/references/runtime/determinism-rules.md +3 -3
- package/assets/motion/references/runtime/gsap-easing-and-stagger.md +19 -19
- package/assets/motion/references/runtime/gsap.md +3 -3
- package/assets/motion/references/runtime/inputs-and-assets.md +19 -9
- package/assets/motion/references/runtime/minimal-composition.md +6 -0
- package/assets/motion/skills/brand-kit/SKILL.md +16 -15
- package/assets/motion/skills/motion/SKILL.md +166 -90
- package/assets/motion/skills/source-ingest/SKILL.md +7 -10
- package/assets/motion/skills/video-qa/SKILL.md +43 -20
- package/dist/cli.js +4 -3
- package/dist/cli.js.map +1 -1
- package/dist/core/agent-session.d.ts +13 -3
- package/dist/core/agent-session.js +32 -6
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/agents.js +12 -3
- package/dist/core/agents.js.map +1 -1
- package/dist/core/auth-providers.js +1 -1
- package/dist/core/auth-providers.js.map +1 -1
- package/dist/core/autopilot-verdict.d.ts +5 -1
- package/dist/core/autopilot-verdict.js +30 -13
- package/dist/core/autopilot-verdict.js.map +1 -1
- package/dist/core/fast-apply-benchmark.d.ts +1 -1
- package/dist/core/fast-apply-benchmark.js +2 -2
- package/dist/core/fast-apply-benchmark.js.map +1 -1
- package/dist/core/ideal-review-subagent.d.ts +16 -2
- package/dist/core/ideal-review-subagent.js +19 -2
- package/dist/core/ideal-review-subagent.js.map +1 -1
- package/dist/core/nolan-context.d.ts +7 -5
- package/dist/core/nolan-context.js +106 -16
- package/dist/core/nolan-context.js.map +1 -1
- package/dist/core/nolan-prompt.js +24 -21
- package/dist/core/nolan-prompt.js.map +1 -1
- package/dist/core/project-discovery.js +77 -26
- package/dist/core/project-discovery.js.map +1 -1
- package/dist/core/semantic-search-benchmark.d.ts +1 -1
- package/dist/core/semantic-search-benchmark.js +2 -2
- package/dist/core/semantic-search-benchmark.js.map +1 -1
- package/dist/core/skills.js +13 -3
- package/dist/core/skills.js.map +1 -1
- package/dist/core/subagent-manager.d.ts +3 -1
- package/dist/core/subagent-manager.js +3 -1
- package/dist/core/subagent-manager.js.map +1 -1
- package/dist/core/subagent-policy.js +1 -1
- package/dist/core/subagent-policy.js.map +1 -1
- package/dist/core/worktree-setup.d.ts +23 -0
- package/dist/core/worktree-setup.js +128 -9
- package/dist/core/worktree-setup.js.map +1 -1
- package/dist/core/worktree.d.ts +20 -2
- package/dist/core/worktree.js +74 -31
- package/dist/core/worktree.js.map +1 -1
- package/dist/modes/json-mode.js +11 -2
- package/dist/modes/json-mode.js.map +1 -1
- package/dist/modes/subagent-worker-mode.d.ts +36 -1
- package/dist/modes/subagent-worker-mode.js +68 -38
- package/dist/modes/subagent-worker-mode.js.map +1 -1
- package/dist/motion-agent/motion-agent.d.ts +1 -1
- package/dist/motion-agent/motion-agent.js +1 -1
- package/dist/motion-agent/motion-check-tool.d.ts +15 -1
- package/dist/motion-agent/motion-check-tool.js +345 -37
- package/dist/motion-agent/motion-check-tool.js.map +1 -1
- package/dist/motion-agent/motion-prompt.d.ts +1 -1
- package/dist/motion-agent/motion-prompt.js +16 -20
- package/dist/motion-agent/motion-prompt.js.map +1 -1
- package/dist/motion-agent/motion-review-session.js +1 -1
- package/dist/motion-agent/motion-review-session.js.map +1 -1
- package/dist/motion-agent/motion-studio-context.js +1 -1
- package/dist/motion-agent/motion-studio-context.js.map +1 -1
- package/dist/system-prompt.d.ts +2 -1
- package/dist/system-prompt.js +12 -3
- package/dist/system-prompt.js.map +1 -1
- package/dist/tools/bash.js +64 -0
- package/dist/tools/bash.js.map +1 -1
- package/dist/tools/edit.js +1 -1
- package/dist/tools/edit.js.map +1 -1
- package/dist/tools/goals.d.ts +1 -1
- package/dist/tools/index.d.ts +6 -0
- package/dist/tools/index.js +2 -1
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/read-tracker.d.ts +30 -2
- package/dist/tools/read-tracker.js +92 -5
- package/dist/tools/read-tracker.js.map +1 -1
- package/dist/tools/read.js +36 -5
- package/dist/tools/read.js.map +1 -1
- package/dist/tools/subagent-shared.d.ts +19 -0
- package/dist/tools/subagent-shared.js +30 -0
- package/dist/tools/subagent-shared.js.map +1 -1
- package/dist/tools/write.js +4 -3
- package/dist/tools/write.js.map +1 -1
- package/dist/ui/components/Footer.js +1 -1
- package/dist/ui/components/Footer.js.map +1 -1
- package/dist/ui/render.d.ts +2 -0
- package/dist/ui/render.js +3 -0
- package/dist/ui/render.js.map +1 -1
- package/dist/utils/text.d.ts +12 -0
- package/dist/utils/text.js +11 -0
- package/dist/utils/text.js.map +1 -1
- package/package.json +5 -5
- package/assets/motion/skills/mixkit-split-text-617/SKILL.md +0 -115
- package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-480.json +0 -1
- package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-494.json +0 -1
- package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-5.json +0 -1
- package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-508.json +0 -1
- package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-6525.json +0 -1
- package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-6539.json +0 -1
- package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-6647.json +0 -1
- package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-6663.json +0 -1
- package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-6677.json +0 -1
- package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-6691.json +0 -1
- package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-6706.json +0 -1
- package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-6722.json +0 -1
- package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-6736.json +0 -1
- package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-6750.json +0 -1
- package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-6764.json +0 -1
- package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-6780.json +0 -1
- package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-6794.json +0 -1
- package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-6810.json +0 -1
- package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-6823.json +0 -1
- package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-6872.json +0 -1
- package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-6936.json +0 -1
- package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-76.json +0 -1
- package/assets/motion/skills/mixkit-split-text-617/data/manifest.json +0 -495
- package/assets/motion/skills/mixkit-split-text-617/references/RECONSTRUCTION.md +0 -201
- package/assets/motion/skills/mixkit-split-text-617/references/VERIFICATION.md +0 -107
- package/assets/motion/skills/mixkit-split-text-617/tools/inspect_motion.py +0 -130
|
@@ -205,5 +205,61 @@
|
|
|
205
205
|
"stretch": "75% 112.5%"
|
|
206
206
|
}
|
|
207
207
|
]
|
|
208
|
+
},
|
|
209
|
+
{
|
|
210
|
+
"family": "Unbounded",
|
|
211
|
+
"dir": "unbounded",
|
|
212
|
+
"license": "OFL-1.1",
|
|
213
|
+
"use": "Wide, rounded display face for big titles.",
|
|
214
|
+
"files": [
|
|
215
|
+
{
|
|
216
|
+
"file": "unbounded-normal.woff2",
|
|
217
|
+
"style": "normal",
|
|
218
|
+
"weight": "200 900",
|
|
219
|
+
"stretch": null
|
|
220
|
+
}
|
|
221
|
+
]
|
|
222
|
+
},
|
|
223
|
+
{
|
|
224
|
+
"family": "Sora",
|
|
225
|
+
"dir": "sora",
|
|
226
|
+
"license": "OFL-1.1",
|
|
227
|
+
"use": "Clean geometric sans for body text and captions.",
|
|
228
|
+
"files": [
|
|
229
|
+
{
|
|
230
|
+
"file": "sora-normal.woff2",
|
|
231
|
+
"style": "normal",
|
|
232
|
+
"weight": "100 800",
|
|
233
|
+
"stretch": null
|
|
234
|
+
}
|
|
235
|
+
]
|
|
236
|
+
},
|
|
237
|
+
{
|
|
238
|
+
"family": "Short Stack",
|
|
239
|
+
"dir": "short-stack",
|
|
240
|
+
"license": "OFL-1.1",
|
|
241
|
+
"use": "Casual handwritten feel.",
|
|
242
|
+
"files": [
|
|
243
|
+
{
|
|
244
|
+
"file": "short-stack-normal.woff2",
|
|
245
|
+
"style": "normal",
|
|
246
|
+
"weight": "400",
|
|
247
|
+
"stretch": null
|
|
248
|
+
}
|
|
249
|
+
]
|
|
250
|
+
},
|
|
251
|
+
{
|
|
252
|
+
"family": "Finger Paint",
|
|
253
|
+
"dir": "finger-paint",
|
|
254
|
+
"license": "OFL-1.1",
|
|
255
|
+
"use": "Playful painted, childlike handwritten feel.",
|
|
256
|
+
"files": [
|
|
257
|
+
{
|
|
258
|
+
"file": "finger-paint-normal.woff2",
|
|
259
|
+
"style": "normal",
|
|
260
|
+
"weight": "400",
|
|
261
|
+
"stretch": null
|
|
262
|
+
}
|
|
263
|
+
]
|
|
208
264
|
}
|
|
209
265
|
]
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
Copyright (c) 2011 by Sorkin Type Co (www.sorkintype.com),
|
|
2
|
+
with Reserved Font Name "Short Stack".
|
|
3
|
+
|
|
4
|
+
This Font Software is licensed under the SIL Open Font License, Version 1.1.
|
|
5
|
+
This license is copied below, and is also available with a FAQ at:
|
|
6
|
+
http://scripts.sil.org/OFL
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
-----------------------------------------------------------
|
|
10
|
+
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
|
|
11
|
+
-----------------------------------------------------------
|
|
12
|
+
|
|
13
|
+
PREAMBLE
|
|
14
|
+
The goals of the Open Font License (OFL) are to stimulate worldwide
|
|
15
|
+
development of collaborative font projects, to support the font creation
|
|
16
|
+
efforts of academic and linguistic communities, and to provide a free and
|
|
17
|
+
open framework in which fonts may be shared and improved in partnership
|
|
18
|
+
with others.
|
|
19
|
+
|
|
20
|
+
The OFL allows the licensed fonts to be used, studied, modified and
|
|
21
|
+
redistributed freely as long as they are not sold by themselves. The
|
|
22
|
+
fonts, including any derivative works, can be bundled, embedded,
|
|
23
|
+
redistributed and/or sold with any software provided that any reserved
|
|
24
|
+
names are not used by derivative works. The fonts and derivatives,
|
|
25
|
+
however, cannot be released under any other type of license. The
|
|
26
|
+
requirement for fonts to remain under this license does not apply
|
|
27
|
+
to any document created using the fonts or their derivatives.
|
|
28
|
+
|
|
29
|
+
DEFINITIONS
|
|
30
|
+
"Font Software" refers to the set of files released by the Copyright
|
|
31
|
+
Holder(s) under this license and clearly marked as such. This may
|
|
32
|
+
include source files, build scripts and documentation.
|
|
33
|
+
|
|
34
|
+
"Reserved Font Name" refers to any names specified as such after the
|
|
35
|
+
copyright statement(s).
|
|
36
|
+
|
|
37
|
+
"Original Version" refers to the collection of Font Software components as
|
|
38
|
+
distributed by the Copyright Holder(s).
|
|
39
|
+
|
|
40
|
+
"Modified Version" refers to any derivative made by adding to, deleting,
|
|
41
|
+
or substituting -- in part or in whole -- any of the components of the
|
|
42
|
+
Original Version, by changing formats or by porting the Font Software to a
|
|
43
|
+
new environment.
|
|
44
|
+
|
|
45
|
+
"Author" refers to any designer, engineer, programmer, technical
|
|
46
|
+
writer or other person who contributed to the Font Software.
|
|
47
|
+
|
|
48
|
+
PERMISSION & CONDITIONS
|
|
49
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
|
50
|
+
a copy of the Font Software, to use, study, copy, merge, embed, modify,
|
|
51
|
+
redistribute, and sell modified and unmodified copies of the Font
|
|
52
|
+
Software, subject to the following conditions:
|
|
53
|
+
|
|
54
|
+
1) Neither the Font Software nor any of its individual components,
|
|
55
|
+
in Original or Modified Versions, may be sold by itself.
|
|
56
|
+
|
|
57
|
+
2) Original or Modified Versions of the Font Software may be bundled,
|
|
58
|
+
redistributed and/or sold with any software, provided that each copy
|
|
59
|
+
contains the above copyright notice and this license. These can be
|
|
60
|
+
included either as stand-alone text files, human-readable headers or
|
|
61
|
+
in the appropriate machine-readable metadata fields within text or
|
|
62
|
+
binary files as long as those fields can be easily viewed by the user.
|
|
63
|
+
|
|
64
|
+
3) No Modified Version of the Font Software may use the Reserved Font
|
|
65
|
+
Name(s) unless explicit written permission is granted by the corresponding
|
|
66
|
+
Copyright Holder. This restriction only applies to the primary font name as
|
|
67
|
+
presented to the users.
|
|
68
|
+
|
|
69
|
+
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
|
|
70
|
+
Software shall not be used to promote, endorse or advertise any
|
|
71
|
+
Modified Version, except to acknowledge the contribution(s) of the
|
|
72
|
+
Copyright Holder(s) and the Author(s) or with their explicit written
|
|
73
|
+
permission.
|
|
74
|
+
|
|
75
|
+
5) The Font Software, modified or unmodified, in part or in whole,
|
|
76
|
+
must be distributed entirely under this license, and must not be
|
|
77
|
+
distributed under any other license. The requirement for fonts to
|
|
78
|
+
remain under this license does not apply to any document created
|
|
79
|
+
using the Font Software.
|
|
80
|
+
|
|
81
|
+
TERMINATION
|
|
82
|
+
This license becomes null and void if any of the above conditions are
|
|
83
|
+
not met.
|
|
84
|
+
|
|
85
|
+
DISCLAIMER
|
|
86
|
+
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
87
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
|
|
88
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
|
|
89
|
+
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
|
|
90
|
+
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
|
91
|
+
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
|
|
92
|
+
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
93
|
+
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
|
|
94
|
+
OTHER DEALINGS IN THE FONT SOFTWARE.
|
|
Binary file
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
Copyright 2019 The Sora Project Authors (https://github.com/sora-xor/sora-font)
|
|
2
|
+
|
|
3
|
+
This Font Software is licensed under the SIL Open Font License, Version 1.1.
|
|
4
|
+
|
|
5
|
+
This license is copied below, and is also available with a FAQ at: https://scripts.sil.org/OFL
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
-----------------------------------------------------------
|
|
9
|
+
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
|
|
10
|
+
-----------------------------------------------------------
|
|
11
|
+
|
|
12
|
+
PREAMBLE
|
|
13
|
+
The goals of the Open Font License (OFL) are to stimulate worldwide
|
|
14
|
+
development of collaborative font projects, to support the font creation
|
|
15
|
+
efforts of academic and linguistic communities, and to provide a free and
|
|
16
|
+
open framework in which fonts may be shared and improved in partnership
|
|
17
|
+
with others.
|
|
18
|
+
|
|
19
|
+
The OFL allows the licensed fonts to be used, studied, modified and
|
|
20
|
+
redistributed freely as long as they are not sold by themselves. The
|
|
21
|
+
fonts, including any derivative works, can be bundled, embedded,
|
|
22
|
+
redistributed and/or sold with any software provided that any reserved
|
|
23
|
+
names are not used by derivative works. The fonts and derivatives,
|
|
24
|
+
however, cannot be released under any other type of license. The
|
|
25
|
+
requirement for fonts to remain under this license does not apply
|
|
26
|
+
to any document created using the fonts or their derivatives.
|
|
27
|
+
|
|
28
|
+
DEFINITIONS
|
|
29
|
+
"Font Software" refers to the set of files released by the Copyright
|
|
30
|
+
Holder(s) under this license and clearly marked as such. This may
|
|
31
|
+
include source files, build scripts and documentation.
|
|
32
|
+
|
|
33
|
+
"Reserved Font Name" refers to any names specified as such after the
|
|
34
|
+
copyright statement(s).
|
|
35
|
+
|
|
36
|
+
"Original Version" refers to the collection of Font Software components as
|
|
37
|
+
distributed by the Copyright Holder(s).
|
|
38
|
+
|
|
39
|
+
"Modified Version" refers to any derivative made by adding to, deleting,
|
|
40
|
+
or substituting -- in part or in whole -- any of the components of the
|
|
41
|
+
Original Version, by changing formats or by porting the Font Software to a
|
|
42
|
+
new environment.
|
|
43
|
+
|
|
44
|
+
"Author" refers to any designer, engineer, programmer, technical
|
|
45
|
+
writer or other person who contributed to the Font Software.
|
|
46
|
+
|
|
47
|
+
PERMISSION & CONDITIONS
|
|
48
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
|
49
|
+
a copy of the Font Software, to use, study, copy, merge, embed, modify,
|
|
50
|
+
redistribute, and sell modified and unmodified copies of the Font
|
|
51
|
+
Software, subject to the following conditions:
|
|
52
|
+
|
|
53
|
+
1) Neither the Font Software nor any of its individual components,
|
|
54
|
+
in Original or Modified Versions, may be sold by itself.
|
|
55
|
+
|
|
56
|
+
2) Original or Modified Versions of the Font Software may be bundled,
|
|
57
|
+
redistributed and/or sold with any software, provided that each copy
|
|
58
|
+
contains the above copyright notice and this license. These can be
|
|
59
|
+
included either as stand-alone text files, human-readable headers or
|
|
60
|
+
in the appropriate machine-readable metadata fields within text or
|
|
61
|
+
binary files as long as those fields can be easily viewed by the user.
|
|
62
|
+
|
|
63
|
+
3) No Modified Version of the Font Software may use the Reserved Font
|
|
64
|
+
Name(s) unless explicit written permission is granted by the corresponding
|
|
65
|
+
Copyright Holder. This restriction only applies to the primary font name as
|
|
66
|
+
presented to the users.
|
|
67
|
+
|
|
68
|
+
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
|
|
69
|
+
Software shall not be used to promote, endorse or advertise any
|
|
70
|
+
Modified Version, except to acknowledge the contribution(s) of the
|
|
71
|
+
Copyright Holder(s) and the Author(s) or with their explicit written
|
|
72
|
+
permission.
|
|
73
|
+
|
|
74
|
+
5) The Font Software, modified or unmodified, in part or in whole,
|
|
75
|
+
must be distributed entirely under this license, and must not be
|
|
76
|
+
distributed under any other license. The requirement for fonts to
|
|
77
|
+
remain under this license does not apply to any document created
|
|
78
|
+
using the Font Software.
|
|
79
|
+
|
|
80
|
+
TERMINATION
|
|
81
|
+
This license becomes null and void if any of the above conditions are
|
|
82
|
+
not met.
|
|
83
|
+
|
|
84
|
+
DISCLAIMER
|
|
85
|
+
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
86
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
|
|
87
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
|
|
88
|
+
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
|
|
89
|
+
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
|
90
|
+
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
|
|
91
|
+
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
92
|
+
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
|
|
93
|
+
OTHER DEALINGS IN THE FONT SOFTWARE.
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
Copyright 2022 The Unbounded Project Authors (https://github.com/googlefonts/unbounded)
|
|
2
|
+
|
|
3
|
+
This Font Software is licensed under the SIL Open Font License, Version 1.1.
|
|
4
|
+
This license is copied below, and is also available with a FAQ at:
|
|
5
|
+
https://scripts.sil.org/OFL
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
-----------------------------------------------------------
|
|
9
|
+
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
|
|
10
|
+
-----------------------------------------------------------
|
|
11
|
+
|
|
12
|
+
PREAMBLE
|
|
13
|
+
The goals of the Open Font License (OFL) are to stimulate worldwide
|
|
14
|
+
development of collaborative font projects, to support the font creation
|
|
15
|
+
efforts of academic and linguistic communities, and to provide a free and
|
|
16
|
+
open framework in which fonts may be shared and improved in partnership
|
|
17
|
+
with others.
|
|
18
|
+
|
|
19
|
+
The OFL allows the licensed fonts to be used, studied, modified and
|
|
20
|
+
redistributed freely as long as they are not sold by themselves. The
|
|
21
|
+
fonts, including any derivative works, can be bundled, embedded,
|
|
22
|
+
redistributed and/or sold with any software provided that any reserved
|
|
23
|
+
names are not used by derivative works. The fonts and derivatives,
|
|
24
|
+
however, cannot be released under any other type of license. The
|
|
25
|
+
requirement for fonts to remain under this license does not apply
|
|
26
|
+
to any document created using the fonts or their derivatives.
|
|
27
|
+
|
|
28
|
+
DEFINITIONS
|
|
29
|
+
"Font Software" refers to the set of files released by the Copyright
|
|
30
|
+
Holder(s) under this license and clearly marked as such. This may
|
|
31
|
+
include source files, build scripts and documentation.
|
|
32
|
+
|
|
33
|
+
"Reserved Font Name" refers to any names specified as such after the
|
|
34
|
+
copyright statement(s).
|
|
35
|
+
|
|
36
|
+
"Original Version" refers to the collection of Font Software components as
|
|
37
|
+
distributed by the Copyright Holder(s).
|
|
38
|
+
|
|
39
|
+
"Modified Version" refers to any derivative made by adding to, deleting,
|
|
40
|
+
or substituting -- in part or in whole -- any of the components of the
|
|
41
|
+
Original Version, by changing formats or by porting the Font Software to a
|
|
42
|
+
new environment.
|
|
43
|
+
|
|
44
|
+
"Author" refers to any designer, engineer, programmer, technical
|
|
45
|
+
writer or other person who contributed to the Font Software.
|
|
46
|
+
|
|
47
|
+
PERMISSION & CONDITIONS
|
|
48
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
|
49
|
+
a copy of the Font Software, to use, study, copy, merge, embed, modify,
|
|
50
|
+
redistribute, and sell modified and unmodified copies of the Font
|
|
51
|
+
Software, subject to the following conditions:
|
|
52
|
+
|
|
53
|
+
1) Neither the Font Software nor any of its individual components,
|
|
54
|
+
in Original or Modified Versions, may be sold by itself.
|
|
55
|
+
|
|
56
|
+
2) Original or Modified Versions of the Font Software may be bundled,
|
|
57
|
+
redistributed and/or sold with any software, provided that each copy
|
|
58
|
+
contains the above copyright notice and this license. These can be
|
|
59
|
+
included either as stand-alone text files, human-readable headers or
|
|
60
|
+
in the appropriate machine-readable metadata fields within text or
|
|
61
|
+
binary files as long as those fields can be easily viewed by the user.
|
|
62
|
+
|
|
63
|
+
3) No Modified Version of the Font Software may use the Reserved Font
|
|
64
|
+
Name(s) unless explicit written permission is granted by the corresponding
|
|
65
|
+
Copyright Holder. This restriction only applies to the primary font name as
|
|
66
|
+
presented to the users.
|
|
67
|
+
|
|
68
|
+
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
|
|
69
|
+
Software shall not be used to promote, endorse or advertise any
|
|
70
|
+
Modified Version, except to acknowledge the contribution(s) of the
|
|
71
|
+
Copyright Holder(s) and the Author(s) or with their explicit written
|
|
72
|
+
permission.
|
|
73
|
+
|
|
74
|
+
5) The Font Software, modified or unmodified, in part or in whole,
|
|
75
|
+
must be distributed entirely under this license, and must not be
|
|
76
|
+
distributed under any other license. The requirement for fonts to
|
|
77
|
+
remain under this license does not apply to any document created
|
|
78
|
+
using the Font Software.
|
|
79
|
+
|
|
80
|
+
TERMINATION
|
|
81
|
+
This license becomes null and void if any of the above conditions are
|
|
82
|
+
not met.
|
|
83
|
+
|
|
84
|
+
DISCLAIMER
|
|
85
|
+
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
86
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
|
|
87
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
|
|
88
|
+
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
|
|
89
|
+
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
|
90
|
+
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
|
|
91
|
+
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
92
|
+
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
|
|
93
|
+
OTHER DEALINGS IN THE FONT SOFTWARE.
|
|
Binary file
|
|
@@ -102,3 +102,5 @@ project's `CREDITS.md` when added.
|
|
|
102
102
|
2–3 scene recipes.
|
|
103
103
|
- `sample.html`: a one-scene composition that shows the look, used for its
|
|
104
104
|
preview. It links `assets/fonts/fonts.css` and `assets/looks/<id>.css`.
|
|
105
|
+
Videos should instead paste the `head` that `library.mjs look` returns: it
|
|
106
|
+
declares the fonts in the page, which `hf check` requires.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "hyperframes",
|
|
3
3
|
"version": "0.8.82",
|
|
4
|
-
"description": "EZ Motion's
|
|
4
|
+
"description": "EZ Motion's skills and craft references, backed by the pinned HyperFrames runtime. Release-managed by GG; no self-updates."
|
|
5
5
|
}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
# Motion language
|
|
2
|
+
|
|
3
|
+
Use this for every video you design. The user's brand kit, references or a
|
|
4
|
+
chosen library look override any default below. These are principles, not a
|
|
5
|
+
house look. Choose the concept, palette and type fresh for every video; never
|
|
6
|
+
copy an earlier video's.
|
|
7
|
+
|
|
8
|
+
## The bar
|
|
9
|
+
|
|
10
|
+
Make a showcase piece, as if the best motion designers will judge it frame by
|
|
11
|
+
frame. Ambition means deliberate craft, not length or effect count. Every
|
|
12
|
+
colour, word, cut and ease needs a reason. Cut generic defaults: plain fades,
|
|
13
|
+
slowly drifting gradients, text that slides up and sits there. Judge it as the
|
|
14
|
+
kind of video it is: an explainer by how clearly it teaches, a tribute by how
|
|
15
|
+
it honours its subject, a launch by how it makes people want the product.
|
|
16
|
+
|
|
17
|
+
## Plan first
|
|
18
|
+
|
|
19
|
+
Before writing code, decide these and record them in the `Concept` and
|
|
20
|
+
`Language` lines of `frame.md`. A few lines is enough; nobody approves them.
|
|
21
|
+
|
|
22
|
+
- **Concept**: the idea the video demonstrates, in one sentence. Show it; don't
|
|
23
|
+
just state it.
|
|
24
|
+
- **Motif**: one shape or element that recurs and links every scene.
|
|
25
|
+
- **Register**: the tone (calm, playful, urgent, tender, precise…) and what it
|
|
26
|
+
means for size, speed, easing and colour. Take it from the brief, the brand
|
|
27
|
+
and the viewing context.
|
|
28
|
+
- **Palette**: each colour's role.
|
|
29
|
+
- **Type**: each family's role.
|
|
30
|
+
- **Beat**: tempo, arc and frame rate.
|
|
31
|
+
|
|
32
|
+
## Principles
|
|
33
|
+
|
|
34
|
+
**Register.** Map the tone to motion before choosing anything else. Quiet,
|
|
35
|
+
steady motion carries information and reading; expressive motion is saved for
|
|
36
|
+
the moments that matter, because it only reads as special against calm. These
|
|
37
|
+
pairings are illustrative, not presets: calm is long, soft moves and few of
|
|
38
|
+
them; playful is springy overshoot, squash and stretch; luxurious is slow and
|
|
39
|
+
precise with generous space; urgent is fast moves and hard cuts; tender is
|
|
40
|
+
warm, slow and held; technical is precise and snapping.
|
|
41
|
+
|
|
42
|
+
**Continuity.** Each scene hands something to the next: a shape, a word, a
|
|
43
|
+
colour field or a camera move. Prefer match cuts and shape handoffs to
|
|
44
|
+
cross-fades. The `type-as-spatial-handoff` study in [README.md](README.md) shows
|
|
45
|
+
type becoming the next scene.
|
|
46
|
+
|
|
47
|
+
**Palette.** A few colours, each with a role, derived from the brand, subject or
|
|
48
|
+
references. How many, how saturated and how often the frame changes colour
|
|
49
|
+
follow the register: full-frame colour blocks that change on most cuts suit a
|
|
50
|
+
loud, kinetic piece; a calm, tender or documentary piece holds a steadier field
|
|
51
|
+
and lets one accent carry attention. Gradients and glows are seasoning, not the
|
|
52
|
+
base. Keep text readable.
|
|
53
|
+
|
|
54
|
+
**No harmful flashing.** Anything flashing over more than about 3% of the frame
|
|
55
|
+
counts. Keep light/dark swaps, and swaps to and from saturated red, to at most
|
|
56
|
+
six in any one second (three flashes): faster flashing can trigger seizures,
|
|
57
|
+
and `motion_check` fails it. A swap on every beat at 120 BPM is fine; a white
|
|
58
|
+
flash frame on every half-beat is not.
|
|
59
|
+
|
|
60
|
+
**Type.** Choose faces for the register and the reading job. Size follows the
|
|
61
|
+
viewing context and how much there is to read: a kinetic poster can set one to
|
|
62
|
+
three huge words per shot; an explainer, documentary or lyric video sets whole
|
|
63
|
+
lines at a comfortable reading size. Size type against the frame's shorter side
|
|
64
|
+
(in vertical video, the width inside the safe margins) and check that the
|
|
65
|
+
longest word fits. Animate weight and width axes as motion, not only position
|
|
66
|
+
and opacity. Use one display family, at most one contrasting voice, such as an
|
|
67
|
+
italic serif, and small uppercase tracked mono for labels and UI where the
|
|
68
|
+
subject calls for it. Bundled axes (see `fonts.mjs list` and its specimen):
|
|
69
|
+
weight and width in Mona Sans, Hubot Sans, Anybody, Archivo, Bricolage
|
|
70
|
+
Grotesque and Martian Mono; italics in Fraunces and Newsreader. Brand fonts win.
|
|
71
|
+
|
|
72
|
+
**Motion.** Smooth by default, bounce by choice. Entrances settle on the
|
|
73
|
+
critically damped spring or `power3.out` / `expo.out`; exits `power3.in`; moves
|
|
74
|
+
`power3.inOut` or `expo.inOut`. Overshoot (`back.out`, `elastic.out` or an
|
|
75
|
+
underdamped spring) is a register chosen for playful or physical work, never
|
|
76
|
+
the default; see [easing](runtime/gsap-easing-and-stagger.md). Durations follow
|
|
77
|
+
the register: roughly 0.15–0.5 s for snappy, energetic or technical motion, and
|
|
78
|
+
0.6–1.5 s or longer for calm, luxurious or tender work. Staggers run 0.012–0.06 s
|
|
79
|
+
for type and longer for larger elements. Use real animation principles where
|
|
80
|
+
they help: anticipation before big moves, squash and stretch on impact, arcs
|
|
81
|
+
instead of straight paths, overlapping action, follow-through and smears on fast
|
|
82
|
+
moves. Lead with one movement at a time, with smaller overlapping motion under
|
|
83
|
+
it. Every move starts, travels and lands on purpose; nothing drifts without a
|
|
84
|
+
reason.
|
|
85
|
+
|
|
86
|
+
**Pace.** Keep time on a grid: the track's beats (`hf beats`) when there is
|
|
87
|
+
music, otherwise a tempo chosen for the register. Cut by how much there is to
|
|
88
|
+
take in, not by the grid alone: a simple image can last one beat; a line to
|
|
89
|
+
read or an idea to grasp holds for several. Meaningful text stays still and
|
|
90
|
+
readable for at least the longer of 0.8 s and one second per 15 characters,
|
|
91
|
+
longer for the key line; repeated or decorative words can go faster. Vary the
|
|
92
|
+
density (build, release, rest) so the video is neither always fast nor always
|
|
93
|
+
slow. Shape the whole to its form, with a beginning, development, peak and
|
|
94
|
+
resolution even in five seconds. Illustratively: a launch builds to its
|
|
95
|
+
product, an explainer steps through its idea, a lyric video follows the song's
|
|
96
|
+
sections, a tribute lets each moment breathe. End on a composed frame held long
|
|
97
|
+
enough to read, and declare that hold in the hold plan before checking.
|
|
98
|
+
|
|
99
|
+
**3D, when the subject earns it.** One hero object whose material, light and
|
|
100
|
+
camera come from the concept and register, not a stock tech look; add
|
|
101
|
+
supporting elements only when they mean something. Resolve 3D back to flat 2D to
|
|
102
|
+
hand off to the next scene. Use the bundled Three.js (`three.mjs`); no 3D by
|
|
103
|
+
default.
|
|
104
|
+
|
|
105
|
+
**Chrome, when it suits.** A small persistent mono layer (labels, timecode,
|
|
106
|
+
chapter name, a progress bar with markers) makes a tech subject feel like a pro
|
|
107
|
+
tool. Leave it out elsewhere.
|
|
108
|
+
|
|
109
|
+
**Frame rate.** 30 fps suits most work. Use 60 fps when fast, dense motion or
|
|
110
|
+
scrolling UI must read smoothly; it doubles render time. Renders carry no
|
|
111
|
+
motion blur, so fast moves stutter at 24 fps: keep 24 fps for slow, filmic or
|
|
112
|
+
handmade work.
|
|
113
|
+
|
|
114
|
+
**Truth.** Show only real product UI, numbers and claims from the user's
|
|
115
|
+
sources.
|
|
116
|
+
|
|
117
|
+
## Building blocks
|
|
118
|
+
|
|
119
|
+
Library looks (`library.mjs list looks`) are complete palette, type and rhythm
|
|
120
|
+
systems; when one fits the concept, it replaces the palette and type choices
|
|
121
|
+
above. Library pieces are optional building blocks.
|
|
122
|
+
|
|
123
|
+
## Check against the plan
|
|
124
|
+
|
|
125
|
+
When `motion_check` returns frames, compare them with the plan in `frame.md` as
|
|
126
|
+
well as the technical results. A lost motif, an off-palette colour, a generic
|
|
127
|
+
transition or unreadable type is a concrete defect: fix it and check the new
|
|
128
|
+
render.
|
|
@@ -15,7 +15,7 @@ For GSAP:
|
|
|
15
15
|
- **Do not** call `tl.play()` for render-critical motion.
|
|
16
16
|
- **Do not** create empty tweens only to set duration; use `data-duration` on the clip instead.
|
|
17
17
|
|
|
18
|
-
Use the adjacent `gsap.md`, `gsap-timeline-and-labels.md` and `gsap-easing-and-stagger.md` for GSAP mechanics. These technical references do not
|
|
18
|
+
Use the adjacent `gsap.md`, `gsap-timeline-and-labels.md` and `gsap-easing-and-stagger.md` for GSAP mechanics. These technical references do not choose the design; the video's plan in `frame.md` does.
|
|
19
19
|
|
|
20
20
|
## Determinism Rules
|
|
21
21
|
|
|
@@ -41,9 +41,9 @@ Build the visible end-state in static HTML and CSS first, then animate from/to t
|
|
|
41
41
|
- **The root composition's total duration (render length / frame count) is fixed at compile time**, read once from the static root `data-duration` before scripts run, like `data-width` / `data-height`. A script or `--variables` value that rewrites the root `data-duration` afterward is ignored. To vary render length per output, author the root `data-duration` directly. (A _clip's_ own `data-duration` is re-read from the live DOM, so scripts/variables can still drive clip lengths. Only when the root omits `data-duration` does the renderer probe the live DOM / timeline for total length.)
|
|
42
42
|
- Scene containers should fill the scene with `width: 100%; height: 100%; box-sizing: border-box`.
|
|
43
43
|
- Use padding, flex, grid, and `max-width` for layout. Avoid positioning main content with hardcoded `top`/`left` offsets when a layout container can do it.
|
|
44
|
-
-
|
|
44
|
+
- Absolute layers are appropriate for deliberately placed design elements; keep one positioning model per scene.
|
|
45
45
|
- Prefer transforms and opacity for animation.
|
|
46
|
-
- Keep text inside its intended container.
|
|
46
|
+
- Keep text inside its intended container. Wrap, resize or use `window.__hyperframes.fitTextFontSize(text, { maxWidth, fontFamily, fontWeight })` deliberately; never let text clip silently.
|
|
47
47
|
- For text measurement without DOM reflow, use `window.__hyperframes.pretext`. Measure off a canvas instead of writing into the page and reading it back, so nothing reflows: `pretext.prepare(text, font)` then `pretext.layout(prepared, maxWidth, lineHeight)` → `{ lineCount, height }`. `prepare` does the font measurement; everything downstream of a prepared string is arithmetic and cheap enough to run per frame. `fitTextFontSize` is built on it.
|
|
48
48
|
- `layout` gives you height, not width. To size a container to its text (shrinkwrap), use `pretext.prepareWithSegments(text, font)` and then `pretext.measureNaturalWidth(prepared)` for the single-line width, or `pretext.measureLineStats(prepared, maxWidth)` for `{ lineCount, maxLineWidth }`.
|
|
49
49
|
- `font` is a CSS font shorthand string, e.g. `"700 90px Inter"`.
|
|
@@ -6,19 +6,19 @@ Built-in eases: `power1`, `power2`, `power3`, `power4`, `back`, `bounce`, `circ`
|
|
|
6
6
|
|
|
7
7
|
Each has `.in`, `.out`, `.inOut` variants.
|
|
8
8
|
|
|
9
|
-
| Ease | Use for
|
|
10
|
-
| ------------------------------------------ |
|
|
11
|
-
| `power1.out`, `power2.out` | Gentle motion for secondary elements (a caption fade, a small shift). NOT the entrance default.
|
|
12
|
-
| `power3.out` (house default), `power4.out` | The standard long-tail settle. Entrances, title cards, hero reveals.
|
|
13
|
-
| `sine.inOut` | Long, slow, calm motion. Crossfades, ambient drift.
|
|
14
|
-
| `back.out(1.7)` | Overshoot then settle.
|
|
15
|
-
| `elastic.out(1, 0.3)` | Springy bounce. Same
|
|
16
|
-
| `expo.inOut` | Snappy, dramatic. Quick transitions between hero scenes.
|
|
17
|
-
| `none` (linear) | Camera moves with timed counterpoint, mechanical motion.
|
|
9
|
+
| Ease | Use for |
|
|
10
|
+
| ------------------------------------------ | ------------------------------------------------------------------------------------------------------- |
|
|
11
|
+
| `power1.out`, `power2.out` | Gentle motion for secondary elements (a caption fade, a small shift). NOT the entrance default. |
|
|
12
|
+
| `power3.out` (house default), `power4.out` | The standard long-tail settle. Entrances, title cards, hero reveals. |
|
|
13
|
+
| `sine.inOut` | Long, slow, calm motion. Crossfades, ambient drift. |
|
|
14
|
+
| `back.out(1.7)` | Overshoot then settle. A chosen register (playful, physical), never a default. |
|
|
15
|
+
| `elastic.out(1, 0.3)` | Springy bounce. Same register rule; prefer a baked spring (see Spring Eases below). |
|
|
16
|
+
| `expo.inOut` | Snappy, dramatic. Quick transitions between hero scenes. |
|
|
17
|
+
| `none` (linear) | Camera moves with timed counterpoint, mechanical motion. |
|
|
18
18
|
|
|
19
19
|
Pick `.out` for entrances, `.in` for exits, `.inOut` for symmetric moves and continuous motion.
|
|
20
20
|
|
|
21
|
-
**Smooth
|
|
21
|
+
**Smooth by default, bounce by choice** — the same rule as the Motion section of [`motion-language.md`](../motion-language.md): entrances default to `power3.out` or the baked critically-damped spring (see Spring Eases below); overshoot eases (`back` / `elastic` / `bounce`, or an underdamped spring) are a register the brief chooses for playful or physical work, never the house style.
|
|
22
22
|
|
|
23
23
|
## Easing Vocabulary (character & mood)
|
|
24
24
|
|
|
@@ -29,15 +29,15 @@ The full palette by character (each family has `.in`, `.out`, `.inOut` variants)
|
|
|
29
29
|
| Family | Character | Typical use |
|
|
30
30
|
| -------------------- | ---------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
31
31
|
| `power1`–`power4` | Gentle (1) to aggressive (4) acceleration curves | General purpose. **power3 is the house workhorse**; power2 for gentle secondary motion, power4 for dramatic snaps |
|
|
32
|
-
| `back(N)` | Overshoot then settle. N controls how far past the target (1=subtle, 4=wild) |
|
|
33
|
-
| `elastic(amp, freq)` | Spring bounce. amp=magnitude, freq=oscillation speed |
|
|
34
|
-
| `bounce` | Ball-drop bouncing |
|
|
32
|
+
| `back(N)` | Overshoot then settle. N controls how far past the target (1=subtle, 4=wild) | Chosen register only (playful, physical), never a default. Keep N ≤ 2; prefer a baked spring at ζ 0.6–0.7 (physical settle, see Spring Eases) |
|
|
33
|
+
| `elastic(amp, freq)` | Spring bounce. amp=magnitude, freq=oscillation speed | Same register rule; the baked spring (below) is the physical version |
|
|
34
|
+
| `bounce` | Ball-drop bouncing | Physical-comedy register only (something literally dropping) |
|
|
35
35
|
| `expo` | Extreme acceleration curve (much steeper than power4) | Premium/luxury reveals, dramatic entrances |
|
|
36
36
|
| `sine` | Smooth, organic, no hard edges | Ambient float, breathing, Ken Burns, anything that loops. `.inOut` for yoyo motion |
|
|
37
37
|
| `circ` | Circular acceleration (starts very fast, ends very gentle or vice versa) | Camera moves, scene transitions, orbital motion |
|
|
38
38
|
| `steps(N)` | Discrete N-step jumps, no interpolation | Typing effects, cursor blink, counter ticks, retro/digital aesthetics |
|
|
39
39
|
|
|
40
|
-
**Mood mapping:** Match easing character to the beat's emotional content. Smooth/organic easings (`sine`, `power1`) feel contemplative and drifting. Aggressive deceleration (`power4.out`, `expo.out`) feels snappy and confident. Spring overshoot (`back.out`) feels bouncy and physical — but bouncy is a register, not an emphasis tool; reach for it only
|
|
40
|
+
**Mood mapping:** Match easing character to the beat's emotional content. Smooth/organic easings (`sine`, `power1`) feel contemplative and drifting. Aggressive deceleration (`power4.out`, `expo.out`) feels snappy and confident. Spring overshoot (`back.out`) feels bouncy and physical — but bouncy is a register, not an emphasis tool; reach for it only when the brief's register is playful or physical. The register recorded in `frame.md` should guide which character fits — not a formula.
|
|
41
41
|
|
|
42
42
|
## Defaults
|
|
43
43
|
|
|
@@ -58,7 +58,7 @@ Setting defaults at timeline scope is preferred — it documents the motion lang
|
|
|
58
58
|
|
|
59
59
|
## Spring Eases (baked physics, seek-safe)
|
|
60
60
|
|
|
61
|
-
The "iOS feel" is a **damped spring's velocity curve**, not a bounce: a fast launch into a long asymptotic settle. Well-made system animations are critically damped or close to it — they barely overshoot, or don't at all. `power3.out` / `expo.out` approximate that curve; when you want the exact one — or a _physical_ overshoot for
|
|
61
|
+
The "iOS feel" is a **damped spring's velocity curve**, not a bounce: a fast launch into a long asymptotic settle. Well-made system animations are critically damped or close to it — they barely overshoot, or don't at all. `power3.out` / `expo.out` approximate that curve; when you want the exact one — or a _physical_ overshoot for a playful register — bake the spring's closed-form solution into a function ease.
|
|
62
62
|
|
|
63
63
|
Why not a real-time spring library: an interactive spring is a stateful integrator (velocity accumulates frame to frame), which cannot be seeked deterministically — you'd have to simulate frames 0…N−1 to render frame N. The closed form below is a **pure function of progress** — no state, nothing to desync, seek-safe by construction. This is also why interaction-lib spring solvers are banned in compositions.
|
|
64
64
|
|
|
@@ -67,7 +67,7 @@ Why not a real-time spring library: an interactive spring is a stateful integrat
|
|
|
67
67
|
// response ≈ seconds one oscillation would take (0.3–0.6 for entrances)
|
|
68
68
|
// dampingFraction 1.0 = critically damped — smooth settle, NO overshoot (house default)
|
|
69
69
|
// 0.80–0.85 ≈ the iOS system register — ~1–1.5% overshoot, felt not seen
|
|
70
|
-
// 0.60–0.70 =
|
|
70
|
+
// 0.60–0.70 = playful register — ~5–10% overshoot (by choice; replaces back.out)
|
|
71
71
|
function springEase({ response = 0.5, dampingFraction = 1 } = {}) {
|
|
72
72
|
const w = (2 * Math.PI) / response; // undamped natural frequency
|
|
73
73
|
const z = dampingFraction;
|
|
@@ -120,20 +120,20 @@ tl.fromTo(
|
|
|
120
120
|
| ----------------- | --------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
121
121
|
| **1.0 (default)** | none (monotone) | The house settle — the exact curve `power3.out` approximates. Product / enterprise / serious tone. |
|
|
122
122
|
| 0.80–0.85 | ~1–1.5% | "Alive, not bouncy" — the iOS system default register. The overshoot is felt, not seen. |
|
|
123
|
-
| 0.60–0.70 | ~5–10% |
|
|
123
|
+
| 0.60–0.70 | ~5–10% | Playful register, by choice (same rule as `back.out`, which this replaces — a spring's second-order settle reads physical where `back` reads cartoon). |
|
|
124
124
|
| < 0.55 | > 12% | Don't. Cartoon-wobble territory. |
|
|
125
125
|
|
|
126
126
|
| response | duration (ζ=1) | feel |
|
|
127
127
|
| --------- | -------------- | ------------------------------------------------------------ |
|
|
128
128
|
| 0.25–0.35 | 0.37–0.51s | tight snap — chips, small UI |
|
|
129
129
|
| 0.35–0.50 | 0.51–0.74s | standard entrance |
|
|
130
|
-
| 0.50–0.70 | 0.74–1.03s | weighted hero landing —
|
|
130
|
+
| 0.50–0.70 | 0.74–1.03s | weighted hero landing — when the shot opens on it, start it early so the subject is seen within about half a second |
|
|
131
131
|
|
|
132
132
|
Craft notes:
|
|
133
133
|
|
|
134
134
|
- **ζ=1 vs `power3.out`**: the true spring front-loads harder (~67% vs ~58% travelled at quarter-time) and settles on a longer asymptotic tail; max shape difference ~11%. That long tail is the "premium" read — use it when the settle IS the shot (a wordmark landing, a final lockup).
|
|
135
135
|
- **At ζ<1, overshooting curves go on transforms only** — never on `opacity` (it would push past 1) or color. Split opacity onto its own `power2.out` tween at the same timeline position.
|
|
136
|
-
- **
|
|
136
|
+
- **Default unchanged**: ζ below ~0.8 is a register the brief chooses, never a default. The default of this section is ζ=1 — real spring physics is not a license for bounce.
|
|
137
137
|
|
|
138
138
|
## Stagger
|
|
139
139
|
|
|
@@ -56,13 +56,13 @@ For transforms, autoAlpha, clearProps, and SVG specifics see `./gsap-transforms-
|
|
|
56
56
|
|
|
57
57
|
## Animated properties
|
|
58
58
|
|
|
59
|
-
Prefer these efficient targets when they
|
|
59
|
+
Prefer these efficient targets when they achieve the intended motion:
|
|
60
60
|
|
|
61
61
|
- **Compositor-cheap**: `opacity`, `x`, `y`, `scale`, `scaleX`, `scaleY`, `rotation`, `rotationX`, `rotationY`, `skewX`, `skewY`, `transformOrigin`
|
|
62
62
|
- **Visual fills**: `color`, `backgroundColor`, `borderColor`, `borderRadius`
|
|
63
63
|
- **CSS variables**: `"--hue": 180` etc.
|
|
64
64
|
- **Media `volume`** (on `<audio>` / `<video>`): do not tween it for fades or ducking; use the `data-automation` volume lane (see `data-attributes.md`). A lane wins over a tween on the same element.
|
|
65
|
-
- **DOM text `innerText`** (for numeric counters): tween it directly, e.g. `tl.to(el, { innerText: 100, snap: { innerText: 1 } })` — `snap` keeps it integer; the GSAP inspector recognizes it as a counter. Use a deterministic proxy value with `onUpdate` for locale formatting or suffix logic when the
|
|
65
|
+
- **DOM text `innerText`** (for numeric counters): tween it directly, e.g. `tl.to(el, { innerText: 100, snap: { innerText: 1 } })` — `snap` keeps it integer; the GSAP inspector recognizes it as a counter. Use a deterministic proxy value with `onUpdate` for locale formatting or suffix logic when the design needs it.
|
|
66
66
|
|
|
67
67
|
**Avoid** (use the transform alias instead):
|
|
68
68
|
|
|
@@ -80,7 +80,7 @@ Prefer these efficient targets when they preserve the recipe's behaviour:
|
|
|
80
80
|
- `./gsap-timeline-and-labels.md` — timeline creation, position parameter (`+=`, `<`, `>`), labels, nesting, sub-comp `fromTo` preference, playback control.
|
|
81
81
|
- `./gsap-easing-and-stagger.md` — easing families, stagger objects, function-based values, `gsap.matchMedia()`, `gsap.defaults()`.
|
|
82
82
|
- `./gsap-transforms-and-perf.md` — transform aliases, autoAlpha, `quickTo`, `will-change`, performance rules.
|
|
83
|
-
- The
|
|
83
|
+
- The video's plan defines effects and motion; these API examples are not additional creative instructions.
|
|
84
84
|
|
|
85
85
|
## Best Practices
|
|
86
86
|
|