@tikagent/video-editor-cli 0.0.0-stage → 1.5.0-preview.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/LICENSE +82 -0
- package/THIRD-PARTY-NOTICES.md +21 -0
- package/dist/bin/tik-video-editor-cli.js +2 -0
- package/dist/lib/asr.js +1 -0
- package/dist/lib/audio.js +1 -0
- package/dist/lib/auth.js +1 -0
- package/dist/lib/browser-zip.js +1 -0
- package/dist/lib/browser.js +1 -0
- package/dist/lib/cli.js +1 -0
- package/dist/lib/doctor.js +1 -0
- package/dist/lib/download.js +1 -0
- package/dist/lib/export-progress.js +1 -0
- package/dist/lib/import-video.js +1 -0
- package/dist/lib/local.js +1 -0
- package/dist/lib/media.js +1 -0
- package/dist/lib/operation.js +1 -0
- package/dist/lib/preset.js +1 -0
- package/dist/lib/processes.js +1 -0
- package/dist/lib/self.js +1 -0
- package/dist/lib/service-urls.js +1 -0
- package/dist/lib/storage.js +1 -0
- package/dist/runtime/LICENSE +21 -0
- package/dist/runtime/analyze.js +1 -0
- package/dist/runtime/app.js +1 -0
- package/dist/runtime/cli/lib/browser-zip.js +1 -0
- package/dist/runtime/cli/lib/browser.js +1 -0
- package/dist/runtime/cli/lib/processes.js +1 -0
- package/dist/runtime/export-audio.js +1 -0
- package/dist/runtime/export-cache.js +1 -0
- package/dist/runtime/export-encoder.js +1 -0
- package/dist/runtime/export-save.js +1 -0
- package/dist/runtime/export-worker.js +1 -0
- package/dist/runtime/favicon.svg +14 -0
- package/dist/runtime/i18n.js +1 -0
- package/dist/runtime/icons/favicon-32.png +0 -0
- package/dist/runtime/icons/tik-logo.png +0 -0
- package/dist/runtime/index.html +320 -0
- package/dist/runtime/library/README.md +12 -0
- package/dist/runtime/library/elements/bokeh-drift.svg +19 -0
- package/dist/runtime/library/elements/light-leak-cool.svg +16 -0
- package/dist/runtime/library/elements/light-leak-warm.svg +22 -0
- package/dist/runtime/library/elements/vhs-scanlines.svg +18 -0
- package/dist/runtime/library/elements/vignette-frame.svg +14 -0
- package/dist/runtime/library/fonts//351/230/277/351/207/214/345/267/264/345/267/264/346/231/256/346/203/240/344/275/223-/344/270/255/351/273/221.woff2 +0 -0
- package/dist/runtime/library/fonts//351/230/277/351/207/214/345/267/264/345/267/264/346/231/256/346/203/240/344/275/223-/345/270/270/350/247/204.woff2 +0 -0
- package/dist/runtime/library/fonts//351/230/277/351/207/214/345/267/264/345/267/264/346/231/256/346/203/240/344/275/223-/347/262/227/344/275/223.woff2 +0 -0
- package/dist/runtime/library/sfx/README.md +13 -0
- package/dist/runtime/library/svg/arrow-bounce.svg +18 -0
- package/dist/runtime/library/svg/arrow-scribble.svg +13 -0
- package/dist/runtime/library/svg/burst-lines.svg +30 -0
- package/dist/runtime/library/svg/checkmark-success.svg +19 -0
- package/dist/runtime/library/svg/confetti-burst.svg +23 -0
- package/dist/runtime/library/svg/countdown-ring.svg +92 -0
- package/dist/runtime/library/svg/equalizer.svg +18 -0
- package/dist/runtime/library/svg/glow-orbs.svg +29 -0
- package/dist/runtime/library/svg/heart-pop.svg +26 -0
- package/dist/runtime/library/svg/loading-dots.svg +16 -0
- package/dist/runtime/library/svg/location-pin.svg +25 -0
- package/dist/runtime/library/svg/lower-third.svg +17 -0
- package/dist/runtime/library/svg/new-badge.svg +18 -0
- package/dist/runtime/library/svg/progress-bar.svg +16 -0
- package/dist/runtime/library/svg/radial-pulse.svg +19 -0
- package/dist/runtime/library/svg/rating-stars.svg +25 -0
- package/dist/runtime/library/svg/rec-indicator.svg +41 -0
- package/dist/runtime/library/svg/sparkles.svg +17 -0
- package/dist/runtime/library/svg/speech-bubble.svg +23 -0
- package/dist/runtime/library/svg/subscribe-bell.svg +29 -0
- package/dist/runtime/library/svg/subscribe-pill.svg +22 -0
- package/dist/runtime/library/svg/swipe-up.svg +46 -0
- package/dist/runtime/library/svg/underline-swoosh.svg +15 -0
- package/dist/runtime/manifest.json +40 -0
- package/dist/runtime/meter-worklet.js +1 -0
- package/dist/runtime/optimized-encoder-worker.js +1 -0
- package/dist/runtime/optimized-export.js +1 -0
- package/dist/runtime/paths.js +1 -0
- package/dist/runtime/project-store.js +1 -0
- package/dist/runtime/ruler-worker.js +1 -0
- package/dist/runtime/server.js +1 -0
- package/dist/runtime/style.css +2126 -0
- package/dist/runtime/timeline.js +1 -0
- package/dist/runtime/waveform.js +1 -0
- package/package.json +37 -4
- package/scripts/build-package.js +69 -0
- package/scripts/next-version.js +56 -0
- package/scripts/pack-runtime.js +26 -0
- package/scripts/release-channel.js +115 -0
- package/README.md +0 -3
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# FableCut 素材库
|
|
2
|
+
|
|
3
|
+
这里是默认可复用素材。内容会实时出现在编辑器左侧面板,可以直接拖到时间线上。文件按原路径引用(`/library/...`),不会复制进项目。
|
|
4
|
+
|
|
5
|
+
| 文件夹 | 编辑器标签 | 内容 |
|
|
6
|
+
| --- | --- | --- |
|
|
7
|
+
| `sfx/` | 音效 | 呼啸、点击、上升音、冲击等(`.mp3 .wav .ogg .m4a`) |
|
|
8
|
+
| `elements/` | 元素 | 叠加素材:带透明通道的 PNG、漏光、纹理、短循环 |
|
|
9
|
+
| `svg/` | SVG | 按 CLAUDE.md 约定编写的矢量动画 |
|
|
10
|
+
| `fonts/` | (字体编辑器) | `.ttf .otf .woff .woff2`,自动注册,字体族名等于文件名 |
|
|
11
|
+
|
|
12
|
+
把网上找到的可自由使用素材放进对应文件夹,已打开的编辑器会自动刷新列表。允许子文件夹,列表中也会显示。
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="1280" height="720" viewBox="0 0 1280 720">
|
|
2
|
+
<!-- FableCut element · drifting bokeh (loops ~8s) · blend:"screen", fit:"cover" -->
|
|
3
|
+
<style>
|
|
4
|
+
.b { animation: drift 8s ease-in-out infinite alternate; }
|
|
5
|
+
@keyframes drift {
|
|
6
|
+
from { transform: translate(0, 0); }
|
|
7
|
+
to { transform: translate(60px, -50px); }
|
|
8
|
+
}
|
|
9
|
+
</style>
|
|
10
|
+
<g fill="#ffffff">
|
|
11
|
+
<circle class="b" style="--d:0s" cx="140" cy="560" r="70" opacity="0.16"/>
|
|
12
|
+
<circle class="b" style="--d:-1.5s" cx="380" cy="180" r="45" opacity="0.12"/>
|
|
13
|
+
<circle class="b" style="--d:-3s" cx="720" cy="500" r="95" opacity="0.10"/>
|
|
14
|
+
<circle class="b" style="--d:-4.5s" cx="980" cy="150" r="55" opacity="0.15"/>
|
|
15
|
+
<circle class="b" style="--d:-6s" cx="1160" cy="420" r="80" opacity="0.11"/>
|
|
16
|
+
<circle class="b" style="--d:-2s" cx="560" cy="640" r="38" opacity="0.18"/>
|
|
17
|
+
<circle class="b" style="--d:-5s" cx="860" cy="300" r="28" opacity="0.20"/>
|
|
18
|
+
</g>
|
|
19
|
+
</svg>
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="1280" height="720" viewBox="0 0 1280 720">
|
|
2
|
+
<!-- FableCut element · cool light leak · use with blend:"screen", fit:"cover", opacity ~0.7 -->
|
|
3
|
+
<defs>
|
|
4
|
+
<radialGradient id="a" cx="80%" cy="15%" r="60%">
|
|
5
|
+
<stop offset="0%" stop-color="#7cc7ff" stop-opacity="0.85"/>
|
|
6
|
+
<stop offset="50%" stop-color="#4f8cff" stop-opacity="0.35"/>
|
|
7
|
+
<stop offset="100%" stop-color="#3355ff" stop-opacity="0"/>
|
|
8
|
+
</radialGradient>
|
|
9
|
+
<radialGradient id="b" cx="10%" cy="90%" r="55%">
|
|
10
|
+
<stop offset="0%" stop-color="#b39dff" stop-opacity="0.55"/>
|
|
11
|
+
<stop offset="100%" stop-color="#7b6cff" stop-opacity="0"/>
|
|
12
|
+
</radialGradient>
|
|
13
|
+
</defs>
|
|
14
|
+
<rect width="1280" height="720" fill="url(#a)"/>
|
|
15
|
+
<rect width="1280" height="720" fill="url(#b)"/>
|
|
16
|
+
</svg>
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="1280" height="720" viewBox="0 0 1280 720">
|
|
2
|
+
<!-- FableCut element · warm light leak · use with blend:"screen", fit:"cover", opacity ~0.7 -->
|
|
3
|
+
<defs>
|
|
4
|
+
<radialGradient id="a" cx="15%" cy="20%" r="55%">
|
|
5
|
+
<stop offset="0%" stop-color="#ffb36b" stop-opacity="0.95"/>
|
|
6
|
+
<stop offset="45%" stop-color="#ff7a3c" stop-opacity="0.45"/>
|
|
7
|
+
<stop offset="100%" stop-color="#ff5d2e" stop-opacity="0"/>
|
|
8
|
+
</radialGradient>
|
|
9
|
+
<radialGradient id="b" cx="85%" cy="80%" r="60%">
|
|
10
|
+
<stop offset="0%" stop-color="#ffd9a0" stop-opacity="0.6"/>
|
|
11
|
+
<stop offset="100%" stop-color="#ff8a5c" stop-opacity="0"/>
|
|
12
|
+
</radialGradient>
|
|
13
|
+
<linearGradient id="c" x1="0" y1="0" x2="1" y2="0.3">
|
|
14
|
+
<stop offset="0%" stop-color="#ff6b35" stop-opacity="0.35"/>
|
|
15
|
+
<stop offset="30%" stop-color="#ff6b35" stop-opacity="0"/>
|
|
16
|
+
<stop offset="100%" stop-color="#ff6b35" stop-opacity="0"/>
|
|
17
|
+
</linearGradient>
|
|
18
|
+
</defs>
|
|
19
|
+
<rect width="1280" height="720" fill="url(#a)"/>
|
|
20
|
+
<rect width="1280" height="720" fill="url(#b)"/>
|
|
21
|
+
<rect width="1280" height="720" fill="url(#c)"/>
|
|
22
|
+
</svg>
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="1280" height="720" viewBox="0 0 1280 720">
|
|
2
|
+
<!-- FableCut element · VHS scanlines + edge tint · blend:"overlay" or "soft-light",
|
|
3
|
+
fit:"stretch", opacity ~0.5. Pair with rgbSplit + grain props for full VHS. -->
|
|
4
|
+
<defs>
|
|
5
|
+
<pattern id="lines" width="4" height="4" patternUnits="userSpaceOnUse">
|
|
6
|
+
<rect width="4" height="2" fill="#000000" opacity="0.55"/>
|
|
7
|
+
<rect y="2" width="4" height="2" fill="#ffffff" opacity="0.05"/>
|
|
8
|
+
</pattern>
|
|
9
|
+
<linearGradient id="edge" x1="0" y1="0" x2="0" y2="1">
|
|
10
|
+
<stop offset="0%" stop-color="#00ffc8" stop-opacity="0.14"/>
|
|
11
|
+
<stop offset="8%" stop-color="#00ffc8" stop-opacity="0"/>
|
|
12
|
+
<stop offset="92%" stop-color="#ff00a8" stop-opacity="0"/>
|
|
13
|
+
<stop offset="100%" stop-color="#ff00a8" stop-opacity="0.14"/>
|
|
14
|
+
</linearGradient>
|
|
15
|
+
</defs>
|
|
16
|
+
<rect width="1280" height="720" fill="url(#lines)"/>
|
|
17
|
+
<rect width="1280" height="720" fill="url(#edge)"/>
|
|
18
|
+
</svg>
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="1280" height="720" viewBox="0 0 1280 720">
|
|
2
|
+
<!-- FableCut element · cinematic letterbox bars + soft frame · fit:"stretch" -->
|
|
3
|
+
<defs>
|
|
4
|
+
<linearGradient id="soft" x1="0" y1="0" x2="0" y2="1">
|
|
5
|
+
<stop offset="0%" stop-color="#000" stop-opacity="0.55"/>
|
|
6
|
+
<stop offset="12%" stop-color="#000" stop-opacity="0"/>
|
|
7
|
+
<stop offset="88%" stop-color="#000" stop-opacity="0"/>
|
|
8
|
+
<stop offset="100%" stop-color="#000" stop-opacity="0.55"/>
|
|
9
|
+
</linearGradient>
|
|
10
|
+
</defs>
|
|
11
|
+
<rect width="1280" height="76" fill="#000"/>
|
|
12
|
+
<rect y="644" width="1280" height="76" fill="#000"/>
|
|
13
|
+
<rect width="1280" height="720" fill="url(#soft)"/>
|
|
14
|
+
</svg>
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# 音效(请自行放入)
|
|
2
|
+
|
|
3
|
+
本文件夹**不**随仓库分发。音效网站通常允许把文件用在你的视频里,但禁止把文件本身再分发到公开合集中,因此 FableCut 不附带音效。
|
|
4
|
+
|
|
5
|
+
把 `.mp3` / `.wav` 放在这里,它们会立刻出现在编辑器的**音效**标签中(已打开的界面会实时刷新)。可以使用子文件夹。
|
|
6
|
+
|
|
7
|
+
可用的免费音效来源:
|
|
8
|
+
|
|
9
|
+
- **freesound.org**:筛选 CC0 许可,使用限制最少
|
|
10
|
+
- **pixabay.com/sound-effects**:可在项目中免费使用
|
|
11
|
+
- **mixkit.co/free-sound-effects**:可在项目中免费使用
|
|
12
|
+
|
|
13
|
+
实用的起步组合:一声呼啸、一声冲击或低音、一声弹出、一声快门、一声打字、一声上升音,再加几个界面点击。CLAUDE.md 里的多数剪辑配方按这些角色引用音效。
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="240" height="360" viewBox="0 0 240 360">
|
|
2
|
+
<!-- FableCut animated SVG · loops · downward chevrons bouncing (swipe-up / CTA / "look here") -->
|
|
3
|
+
<style>
|
|
4
|
+
.ch { transform-box: fill-box; transform-origin: center;
|
|
5
|
+
animation: fall 1.6s ease-in-out infinite; }
|
|
6
|
+
@keyframes fall {
|
|
7
|
+
0% { transform: translateY(-30px); opacity: 0; }
|
|
8
|
+
40% { opacity: 1; }
|
|
9
|
+
70% { transform: translateY(20px); opacity: 1; }
|
|
10
|
+
100% { transform: translateY(50px); opacity: 0; }
|
|
11
|
+
}
|
|
12
|
+
</style>
|
|
13
|
+
<g fill="none" stroke="#fff" stroke-width="20" stroke-linecap="round" stroke-linejoin="round">
|
|
14
|
+
<path class="ch" style="--d:0s" d="M60 70 L120 130 L180 70"/>
|
|
15
|
+
<path class="ch" style="--d:0.2s" d="M60 150 L120 210 L180 150"/>
|
|
16
|
+
<path class="ch" style="--d:0.4s" d="M60 230 L120 290 L180 230"/>
|
|
17
|
+
</g>
|
|
18
|
+
</svg>
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="400" height="400" viewBox="0 0 400 400">
|
|
2
|
+
<!-- FableCut animated SVG · one-shot (~0.7s) · hand-drawn arrow, points down-right.
|
|
3
|
+
Flip/rotate with clip props to point anywhere. -->
|
|
4
|
+
<style>
|
|
5
|
+
.s { stroke-dasharray: 520; stroke-dashoffset: 520; animation: draw 0.55s cubic-bezier(.3,.8,.3,1) both; }
|
|
6
|
+
.h { stroke-dasharray: 160; stroke-dashoffset: 160; animation: draw 0.25s ease-out both; }
|
|
7
|
+
@keyframes draw { to { stroke-dashoffset: 0; } }
|
|
8
|
+
</style>
|
|
9
|
+
<path class="s" style="--d:0s" d="M60 60 C 200 40, 320 140, 300 300" fill="none"
|
|
10
|
+
stroke="#ffd166" stroke-width="16" stroke-linecap="round"/>
|
|
11
|
+
<path class="h" style="--d:0.45s" d="M240 260 L 300 306 L 344 240" fill="none"
|
|
12
|
+
stroke="#ffd166" stroke-width="16" stroke-linecap="round" stroke-linejoin="round"/>
|
|
13
|
+
</svg>
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="700" height="700" viewBox="0 0 700 700">
|
|
2
|
+
<!-- FableCut animated SVG · one-shot (~0.6s) · radial impact/speed lines. Align to a hard cut on V4. -->
|
|
3
|
+
<style>
|
|
4
|
+
.ln { stroke-dasharray: 170; stroke-dashoffset: 170;
|
|
5
|
+
animation: shoot 0.55s cubic-bezier(.2,.8,.3,1) both; }
|
|
6
|
+
@keyframes shoot {
|
|
7
|
+
0% { stroke-dashoffset: 170; opacity: 1; }
|
|
8
|
+
65% { stroke-dashoffset: 0; opacity: 1; }
|
|
9
|
+
100% { stroke-dashoffset: -60; opacity: 0; }
|
|
10
|
+
}
|
|
11
|
+
.flash { transform-box: fill-box; transform-origin: center;
|
|
12
|
+
animation: fl 0.4s ease-out both; }
|
|
13
|
+
@keyframes fl { 0% { transform: scale(0.2); opacity: 0.9; } 100% { transform: scale(1.3); opacity: 0; } }
|
|
14
|
+
</style>
|
|
15
|
+
<circle class="flash" style="--d:0s" cx="350" cy="350" r="150" fill="#fff6d8"/>
|
|
16
|
+
<g stroke="#ffd166" stroke-width="16" stroke-linecap="round">
|
|
17
|
+
<line class="ln" style="--d:0s" x1="350.0" y1="200.0" x2="350.0" y2="40.0"/>
|
|
18
|
+
<line class="ln" style="--d:0.02s" x1="425.0" y1="220.1" x2="505.0" y2="81.5"/>
|
|
19
|
+
<line class="ln" style="--d:0.04s" x1="479.9" y1="275.0" x2="618.5" y2="195.0"/>
|
|
20
|
+
<line class="ln" style="--d:0.01s" x1="500.0" y1="350.0" x2="660.0" y2="350.0"/>
|
|
21
|
+
<line class="ln" style="--d:0.03s" x1="479.9" y1="425.0" x2="618.5" y2="505.0"/>
|
|
22
|
+
<line class="ln" style="--d:0.05s" x1="425.0" y1="479.9" x2="505.0" y2="618.5"/>
|
|
23
|
+
<line class="ln" style="--d:0s" x1="350.0" y1="500.0" x2="350.0" y2="660.0"/>
|
|
24
|
+
<line class="ln" style="--d:0.02s" x1="275.0" y1="479.9" x2="195.0" y2="618.5"/>
|
|
25
|
+
<line class="ln" style="--d:0.04s" x1="220.1" y1="425.0" x2="81.5" y2="505.0"/>
|
|
26
|
+
<line class="ln" style="--d:0.01s" x1="200.0" y1="350.0" x2="40.0" y2="350.0"/>
|
|
27
|
+
<line class="ln" style="--d:0.03s" x1="220.1" y1="275.0" x2="81.5" y2="195.0"/>
|
|
28
|
+
<line class="ln" style="--d:0.05s" x1="275.0" y1="220.1" x2="195.0" y2="81.5"/>
|
|
29
|
+
</g>
|
|
30
|
+
</svg>
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="400" height="400" viewBox="0 0 400 400">
|
|
2
|
+
<!-- FableCut animated SVG · one-shot (~1s) · success check: ring draws, badge pops, tick draws -->
|
|
3
|
+
<style>
|
|
4
|
+
.ring { fill: none; stroke: #22c55e; stroke-width: 14; stroke-linecap: round;
|
|
5
|
+
stroke-dasharray: 880; stroke-dashoffset: 880;
|
|
6
|
+
animation: draw 0.7s cubic-bezier(.3,.8,.3,1) both; }
|
|
7
|
+
.disc { transform-box: fill-box; transform-origin: center;
|
|
8
|
+
animation: pop 0.4s cubic-bezier(.34,1.56,.64,1) both; }
|
|
9
|
+
.tick { fill: none; stroke: #fff; stroke-width: 22; stroke-linecap: round; stroke-linejoin: round;
|
|
10
|
+
stroke-dasharray: 200; stroke-dashoffset: 200;
|
|
11
|
+
animation: draw2 0.4s cubic-bezier(.3,.8,.3,1) both; }
|
|
12
|
+
@keyframes draw { to { stroke-dashoffset: 0; } }
|
|
13
|
+
@keyframes draw2 { to { stroke-dashoffset: 0; } }
|
|
14
|
+
@keyframes pop { 0% { transform: scale(0); } 100% { transform: scale(1); } }
|
|
15
|
+
</style>
|
|
16
|
+
<circle class="ring" style="--d:0s" cx="200" cy="200" r="140"/>
|
|
17
|
+
<circle class="disc" style="--d:0.5s" cx="200" cy="200" r="120" fill="#22c55e"/>
|
|
18
|
+
<path class="tick" style="--d:0.7s" d="M140 205 l40 42 82 -92"/>
|
|
19
|
+
</svg>
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="800" height="800" viewBox="0 0 800 800">
|
|
2
|
+
<!-- FableCut animated SVG · one-shot (~1.8s) · confetti explosion from center -->
|
|
3
|
+
<style>
|
|
4
|
+
.c { transform-box: fill-box; transform-origin: center; animation: fly 1.6s cubic-bezier(.15,.7,.4,1) both; }
|
|
5
|
+
@keyframes fly {
|
|
6
|
+
0% { transform: translate(0,0) rotate(0turn) scale(0.4); opacity: 1; }
|
|
7
|
+
70% { opacity: 1; }
|
|
8
|
+
100% { transform: translate(var(--tx,0px), var(--ty,-300px)) rotate(2turn) scale(1); opacity: 0; }
|
|
9
|
+
}
|
|
10
|
+
</style>
|
|
11
|
+
<g>
|
|
12
|
+
<rect class="c" style="--d:0s; --tx:-260px; --ty:-200px" x="392" y="392" width="18" height="26" fill="#ff5d73"/>
|
|
13
|
+
<rect class="c" style="--d:0.04s; --tx:230px; --ty:-260px" x="392" y="392" width="16" height="24" fill="#ffd166"/>
|
|
14
|
+
<rect class="c" style="--d:0.08s; --tx:-140px; --ty:-320px" x="392" y="392" width="14" height="22" fill="#6ee7b7"/>
|
|
15
|
+
<rect class="c" style="--d:0.02s; --tx:300px; --ty:-120px" x="392" y="392" width="18" height="18" fill="#7b6cff"/>
|
|
16
|
+
<rect class="c" style="--d:0.06s; --tx:-320px; --ty:-60px" x="392" y="392" width="16" height="20" fill="#4f8cff"/>
|
|
17
|
+
<circle class="c" style="--d:0.03s; --tx:120px; --ty:-340px" cx="400" cy="400" r="10" fill="#ff9f43"/>
|
|
18
|
+
<circle class="c" style="--d:0.07s; --tx:-60px; --ty:-380px" cx="400" cy="400" r="8" fill="#ff5d73"/>
|
|
19
|
+
<circle class="c" style="--d:0.05s; --tx:260px; --ty:60px" cx="400" cy="400" r="9" fill="#6ee7b7"/>
|
|
20
|
+
<rect class="c" style="--d:0.09s; --tx:-230px; --ty:120px" x="392" y="392" width="14" height="14" fill="#ffd166"/>
|
|
21
|
+
<rect class="c" style="--d:0.01s; --tx:60px; --ty:200px" x="392" y="392" width="16" height="22" fill="#7b6cff"/>
|
|
22
|
+
</g>
|
|
23
|
+
</svg>
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="400" height="400" viewBox="0 0 400 400">
|
|
2
|
+
<!-- FableCut animated SVG · one-shot (~3s) · countdown ring 3 → 2 → 1
|
|
3
|
+
Useful for video intros, transitions, and "ready" cues. -->
|
|
4
|
+
<style>
|
|
5
|
+
/* Ring sweep — draws a circular arc over 1s per digit */
|
|
6
|
+
.ring {
|
|
7
|
+
fill: none;
|
|
8
|
+
stroke-width: 8;
|
|
9
|
+
stroke-linecap: round;
|
|
10
|
+
stroke-dasharray: 502.65;
|
|
11
|
+
stroke-dashoffset: 502.65;
|
|
12
|
+
transform-box: fill-box;
|
|
13
|
+
transform-origin: center;
|
|
14
|
+
animation: sweep 1s cubic-bezier(.4,0,.2,1) both;
|
|
15
|
+
animation-delay: var(--d, 0s);
|
|
16
|
+
}
|
|
17
|
+
@keyframes sweep {
|
|
18
|
+
0% { stroke-dashoffset: 502.65; opacity: 0.3; }
|
|
19
|
+
10% { opacity: 1; }
|
|
20
|
+
100% { stroke-dashoffset: 0; opacity: 1; }
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/* Digit pop-in */
|
|
24
|
+
.digit {
|
|
25
|
+
font-family: 'Helvetica Neue', Arial, sans-serif;
|
|
26
|
+
font-weight: 700;
|
|
27
|
+
font-size: 120px;
|
|
28
|
+
text-anchor: middle;
|
|
29
|
+
dominant-baseline: central;
|
|
30
|
+
transform-box: fill-box;
|
|
31
|
+
transform-origin: center;
|
|
32
|
+
animation: pop 0.4s cubic-bezier(.34,1.56,.64,1) both,
|
|
33
|
+
hideAtEnd 0.01s linear 1s both;
|
|
34
|
+
animation-delay: var(--d, 0s), calc(var(--d, 0s) + 0.99s);
|
|
35
|
+
opacity: 0;
|
|
36
|
+
}
|
|
37
|
+
@keyframes pop {
|
|
38
|
+
0% { transform: scale(0.3); opacity: 0; }
|
|
39
|
+
60% { transform: scale(1.1); opacity: 1; }
|
|
40
|
+
100% { transform: scale(1); opacity: 1; }
|
|
41
|
+
}
|
|
42
|
+
@keyframes hideAtEnd {
|
|
43
|
+
to { opacity: 0; }
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/* Digit fade-out at end of each second */
|
|
47
|
+
.digit-out {
|
|
48
|
+
animation: fadeOut 0.25s ease-in both;
|
|
49
|
+
}
|
|
50
|
+
@keyframes fadeOut {
|
|
51
|
+
0% { opacity: 1; transform: scale(1); }
|
|
52
|
+
100% { opacity: 0; transform: scale(0.8); }
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/* Outer glow pulse */
|
|
56
|
+
.glow {
|
|
57
|
+
fill: none;
|
|
58
|
+
stroke-width: 2;
|
|
59
|
+
opacity: 0;
|
|
60
|
+
animation: glowPulse 1s ease-out both;
|
|
61
|
+
animation-delay: var(--d, 0s);
|
|
62
|
+
}
|
|
63
|
+
@keyframes glowPulse {
|
|
64
|
+
0% { opacity: 0.6; stroke-width: 8; }
|
|
65
|
+
100% { opacity: 0; stroke-width: 30; }
|
|
66
|
+
}
|
|
67
|
+
</style>
|
|
68
|
+
|
|
69
|
+
<!-- "3" group — 0s to 1s -->
|
|
70
|
+
<g>
|
|
71
|
+
<!-- glow -->
|
|
72
|
+
<circle class="glow" style="--d:0s" cx="200" cy="200" r="150" stroke="#ff6b6b"/>
|
|
73
|
+
<!-- ring -->
|
|
74
|
+
<circle class="ring" style="--d:0s" cx="200" cy="200" r="80" stroke="#ff6b6b"/>
|
|
75
|
+
<!-- digit -->
|
|
76
|
+
<text class="digit" style="--d:0s" x="200" y="200" fill="#ff6b6b">3</text>
|
|
77
|
+
</g>
|
|
78
|
+
|
|
79
|
+
<!-- "2" group — 1s to 2s -->
|
|
80
|
+
<g>
|
|
81
|
+
<circle class="glow" style="--d:1s" cx="200" cy="200" r="150" stroke="#ffd166"/>
|
|
82
|
+
<circle class="ring" style="--d:1s" cx="200" cy="200" r="80" stroke="#ffd166"/>
|
|
83
|
+
<text class="digit" style="--d:1s" x="200" y="200" fill="#ffd166">2</text>
|
|
84
|
+
</g>
|
|
85
|
+
|
|
86
|
+
<!-- "1" group — 2s to 3s -->
|
|
87
|
+
<g>
|
|
88
|
+
<circle class="glow" style="--d:2s" cx="200" cy="200" r="150" stroke="#6ee7b7"/>
|
|
89
|
+
<circle class="ring" style="--d:2s" cx="200" cy="200" r="80" stroke="#6ee7b7"/>
|
|
90
|
+
<text class="digit" style="--d:2s" x="200" y="200" fill="#6ee7b7">1</text>
|
|
91
|
+
</g>
|
|
92
|
+
</svg>
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="400" height="300" viewBox="0 0 400 300">
|
|
2
|
+
<!-- FableCut animated SVG · loops · audio equalizer bars (music sections / podcast) -->
|
|
3
|
+
<style>
|
|
4
|
+
.bar { transform-box: fill-box; transform-origin: center bottom;
|
|
5
|
+
animation: eq 0.8s ease-in-out infinite; }
|
|
6
|
+
@keyframes eq {
|
|
7
|
+
0%, 100% { transform: scaleY(0.25); }
|
|
8
|
+
50% { transform: scaleY(1); }
|
|
9
|
+
}
|
|
10
|
+
</style>
|
|
11
|
+
<g fill="#4f8cff">
|
|
12
|
+
<rect class="bar" style="--d:0s" x="40" y="40" width="34" height="220" rx="8"/>
|
|
13
|
+
<rect class="bar" style="--d:0.25s" x="104" y="40" width="34" height="220" rx="8" fill="#7b6cff"/>
|
|
14
|
+
<rect class="bar" style="--d:0.5s" x="168" y="40" width="34" height="220" rx="8" fill="#6ee7b7"/>
|
|
15
|
+
<rect class="bar" style="--d:0.15s" x="232" y="40" width="34" height="220" rx="8" fill="#ffd166"/>
|
|
16
|
+
<rect class="bar" style="--d:0.4s" x="296" y="40" width="34" height="220" rx="8" fill="#ff5d73"/>
|
|
17
|
+
</g>
|
|
18
|
+
</svg>
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="1280" height="720" viewBox="0 0 1280 720">
|
|
2
|
+
<!-- FableCut animated SVG · loops · floating bokeh orbs. Use on V4 with props {blend:"screen", opacity:0.7, fit:"cover"} -->
|
|
3
|
+
<style>
|
|
4
|
+
.o { transform-box: fill-box; transform-origin: center;
|
|
5
|
+
animation: drift 9s ease-in-out infinite; }
|
|
6
|
+
@keyframes drift {
|
|
7
|
+
0%, 100% { transform: translate(0,0) scale(1); opacity: 0.35; }
|
|
8
|
+
50% { transform: translate(30px,-50px) scale(1.25); opacity: 0.85; }
|
|
9
|
+
}
|
|
10
|
+
.p { animation: puff 5s ease-in-out infinite; }
|
|
11
|
+
@keyframes puff { 0%,100% { opacity: 0.2; } 50% { opacity: 0.7; } }
|
|
12
|
+
</style>
|
|
13
|
+
<defs>
|
|
14
|
+
<radialGradient id="g" cx="50%" cy="50%" r="50%">
|
|
15
|
+
<stop offset="0%" stop-color="#fff" stop-opacity="0.95"/>
|
|
16
|
+
<stop offset="45%" stop-color="#bfa8ff" stop-opacity="0.6"/>
|
|
17
|
+
<stop offset="100%" stop-color="#7b6cff" stop-opacity="0"/>
|
|
18
|
+
</radialGradient>
|
|
19
|
+
</defs>
|
|
20
|
+
<g fill="url(#g)">
|
|
21
|
+
<circle class="o" style="--d:0s" cx="220" cy="180" r="120"/>
|
|
22
|
+
<circle class="o" style="--d:2.5s" cx="980" cy="230" r="160"/>
|
|
23
|
+
<circle class="o" style="--d:1.2s" cx="640" cy="520" r="100"/>
|
|
24
|
+
<circle class="o" style="--d:4s" cx="1120" cy="560" r="90"/>
|
|
25
|
+
<circle class="p" style="--d:3s" cx="430" cy="600" r="60"/>
|
|
26
|
+
<circle class="p" style="--d:1.8s" cx="820" cy="120" r="50"/>
|
|
27
|
+
<circle class="o" style="--d:5.5s" cx="120" cy="480" r="70"/>
|
|
28
|
+
</g>
|
|
29
|
+
</svg>
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="500" height="600" viewBox="0 0 500 600">
|
|
2
|
+
<!-- FableCut animated SVG · loops · beating heart with floating hearts (like / reaction) -->
|
|
3
|
+
<style>
|
|
4
|
+
.beat { transform-box: fill-box; transform-origin: center;
|
|
5
|
+
animation: beat 1.2s ease-in-out infinite; }
|
|
6
|
+
@keyframes beat {
|
|
7
|
+
0%, 100% { transform: scale(1); }
|
|
8
|
+
15% { transform: scale(1.18); }
|
|
9
|
+
30% { transform: scale(1); }
|
|
10
|
+
45% { transform: scale(1.12); }
|
|
11
|
+
}
|
|
12
|
+
.float { transform-box: fill-box; transform-origin: center;
|
|
13
|
+
animation: rise 3s ease-in infinite; }
|
|
14
|
+
@keyframes rise {
|
|
15
|
+
0% { transform: translate(0,0) scale(0.3); opacity: 0; }
|
|
16
|
+
20% { opacity: 0.9; }
|
|
17
|
+
100% { transform: translate(var(--tx,0px),-360px) scale(1); opacity: 0; }
|
|
18
|
+
}
|
|
19
|
+
</style>
|
|
20
|
+
<g fill="#ff4d6d">
|
|
21
|
+
<path class="beat" style="--d:0s" d="M250 470 C120 380 70 300 70 220 C70 150 120 110 175 110 C215 110 240 135 250 160 C260 135 285 110 325 110 C380 110 430 150 430 220 C430 300 380 380 250 470z"/>
|
|
22
|
+
<path class="float" style="--d:0s; --tx:-70px" opacity="0.8" d="M150 460 c-40 -28 -56 -52 -56 -78 c0 -22 16 -34 33 -34 c12 0 20 8 23 15 c3 -7 11 -15 23 -15 c17 0 33 12 33 34 c0 26 -16 50 -56 78z"/>
|
|
23
|
+
<path class="float" style="--d:1s; --tx:60px" opacity="0.7" d="M330 470 c-40 -28 -56 -52 -56 -78 c0 -22 16 -34 33 -34 c12 0 20 8 23 15 c3 -7 11 -15 23 -15 c17 0 33 12 33 34 c0 26 -16 50 -56 78z"/>
|
|
24
|
+
<path class="float" style="--d:2s; --tx:15px" opacity="0.6" d="M250 480 c-30 -21 -42 -39 -42 -58 c0 -16 12 -26 25 -26 c9 0 15 6 17 11 c2 -5 8 -11 17 -11 c13 0 25 10 25 26 c0 19 -12 37 -42 58z"/>
|
|
25
|
+
</g>
|
|
26
|
+
</svg>
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="300" height="120" viewBox="0 0 300 120">
|
|
2
|
+
<!-- FableCut animated SVG · loops · three bouncing dots (loading / buffering) -->
|
|
3
|
+
<style>
|
|
4
|
+
.d { transform-box: fill-box; transform-origin: center;
|
|
5
|
+
animation: bob 0.9s cubic-bezier(.4,0,.6,1) infinite; }
|
|
6
|
+
@keyframes bob {
|
|
7
|
+
0%, 80%, 100% { transform: translateY(0) scale(1); opacity: 0.5; }
|
|
8
|
+
40% { transform: translateY(-26px) scale(1.15); opacity: 1; }
|
|
9
|
+
}
|
|
10
|
+
</style>
|
|
11
|
+
<g fill="#7b6cff">
|
|
12
|
+
<circle class="d" style="--d:0s" cx="80" cy="60" r="18"/>
|
|
13
|
+
<circle class="d" style="--d:0.15s" cx="150" cy="60" r="18"/>
|
|
14
|
+
<circle class="d" style="--d:0.3s" cx="220" cy="60" r="18"/>
|
|
15
|
+
</g>
|
|
16
|
+
</svg>
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="400" height="500" viewBox="0 0 400 500">
|
|
2
|
+
<!-- FableCut animated SVG · pin drops in once (~0.9s), then ground ring pulses forever (map / travel) -->
|
|
3
|
+
<style>
|
|
4
|
+
.pin { transform-box: fill-box; transform-origin: center bottom;
|
|
5
|
+
animation: drop 0.8s cubic-bezier(.5,1.6,.5,1) both; }
|
|
6
|
+
@keyframes drop {
|
|
7
|
+
0% { transform: translateY(-320px) scale(0.6); opacity: 0; }
|
|
8
|
+
60% { opacity: 1; }
|
|
9
|
+
80% { transform: translateY(0) scaleY(0.82) scaleX(1.12); }
|
|
10
|
+
100% { transform: translateY(0) scale(1); opacity: 1; }
|
|
11
|
+
}
|
|
12
|
+
.ping { transform-box: fill-box; transform-origin: center;
|
|
13
|
+
animation: ping 1.8s ease-out infinite; }
|
|
14
|
+
@keyframes ping {
|
|
15
|
+
0% { transform: scale(0.3); opacity: 0.8; }
|
|
16
|
+
100% { transform: scale(1.6); opacity: 0; }
|
|
17
|
+
}
|
|
18
|
+
</style>
|
|
19
|
+
<ellipse class="ping" style="--d:0.9s" cx="200" cy="430" rx="90" ry="26" fill="none" stroke="#ff5d73" stroke-width="6"/>
|
|
20
|
+
<g class="pin" style="--d:0s">
|
|
21
|
+
<path d="M200 90 C120 90 70 150 70 220 C70 300 160 380 200 430 C240 380 330 300 330 220 C330 150 280 90 200 90z" fill="#ff5d73"/>
|
|
22
|
+
<circle cx="200" cy="215" r="46" fill="#fff"/>
|
|
23
|
+
<circle cx="200" cy="215" r="22" fill="#ff5d73"/>
|
|
24
|
+
</g>
|
|
25
|
+
</svg>
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="1280" height="720" viewBox="0 0 1280 720">
|
|
2
|
+
<!-- FableCut animated SVG · one-shot (~1.2s in) · lower-third bar.
|
|
3
|
+
Put your name/role with FableCut TEXT clips on top of this. -->
|
|
4
|
+
<style>
|
|
5
|
+
.bar { animation: slide 0.7s cubic-bezier(.2,.9,.25,1) both; }
|
|
6
|
+
.rule { animation: grow 0.6s cubic-bezier(.2,.9,.25,1) both; transform-origin: left center; }
|
|
7
|
+
.dot { transform-box: fill-box; transform-origin: center; animation: pop 0.45s cubic-bezier(.34,1.56,.64,1) both; }
|
|
8
|
+
@keyframes slide { from { transform: translateX(-110%); opacity: 0; } to { transform: translateX(0); opacity: 1; } }
|
|
9
|
+
@keyframes grow { from { transform: scaleX(0); } to { transform: scaleX(1); } }
|
|
10
|
+
@keyframes pop { from { transform: scale(0); } to { transform: scale(1); } }
|
|
11
|
+
</style>
|
|
12
|
+
<g>
|
|
13
|
+
<rect class="bar" style="--d:0s" x="60" y="540" width="520" height="86" rx="14" fill="#101018" opacity="0.85"/>
|
|
14
|
+
<rect class="rule" style="--d:0.35s" x="60" y="632" width="520" height="6" rx="3" fill="#7b6cff"/>
|
|
15
|
+
<circle class="dot" style="--d:0.55s" cx="96" cy="583" r="14" fill="#7b6cff"/>
|
|
16
|
+
</g>
|
|
17
|
+
</svg>
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="360" height="360" viewBox="0 0 360 360">
|
|
2
|
+
<!-- FableCut animated SVG · badge pops + starburst spins forever (sticker / "NEW" / sale).
|
|
3
|
+
Add your own TEXT clip on top for the label. -->
|
|
4
|
+
<style>
|
|
5
|
+
.burst { transform-box: fill-box; transform-origin: center;
|
|
6
|
+
animation: spin 14s linear infinite; }
|
|
7
|
+
@keyframes spin { to { transform: rotate(360deg); } }
|
|
8
|
+
.in { transform-box: fill-box; transform-origin: center;
|
|
9
|
+
animation: pop 0.6s cubic-bezier(.34,1.56,.64,1) both; }
|
|
10
|
+
@keyframes pop { 0% { transform: scale(0) rotate(-40deg); } 100% { transform: scale(1) rotate(0deg); } }
|
|
11
|
+
</style>
|
|
12
|
+
<g class="in" style="--d:0s">
|
|
13
|
+
<path class="burst" style="--d:0s" fill="#ff5d73" d="M180 20
|
|
14
|
+
l26 34 40 -18 6 44 44 6 -18 40 34 26 -34 26 18 40 -44 6 -6 44 -40 -18 -26 34 -26 -34 -40 18 -6 -44 -44 -6 18 -40 -34 -26 34 -26 -18 -40 44 -6 6 -44 40 18z"/>
|
|
15
|
+
<circle cx="180" cy="180" r="96" fill="#ffd166"/>
|
|
16
|
+
<circle cx="180" cy="180" r="96" fill="none" stroke="#fff" stroke-width="5" stroke-dasharray="10 12"/>
|
|
17
|
+
</g>
|
|
18
|
+
</svg>
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="800" height="120" viewBox="0 0 800 120">
|
|
2
|
+
<!-- FableCut animated SVG · one-shot (~2s) · progress bar fills left→right with a moving shine -->
|
|
3
|
+
<style>
|
|
4
|
+
.fill { transform-box: fill-box; transform-origin: left center;
|
|
5
|
+
animation: grow 2s cubic-bezier(.5,.05,.2,1) both; }
|
|
6
|
+
@keyframes grow { from { transform: scaleX(0); } to { transform: scaleX(1); } }
|
|
7
|
+
.knob { animation: run 2s cubic-bezier(.5,.05,.2,1) both; }
|
|
8
|
+
@keyframes run { 0% { transform: translateX(0); opacity: 0; } 8% { opacity: 1; } 100% { transform: translateX(720px); opacity: 1; } }
|
|
9
|
+
</style>
|
|
10
|
+
<rect x="40" y="46" width="720" height="28" rx="14" fill="#2a2a3a"/>
|
|
11
|
+
<clipPath id="track"><rect x="40" y="46" width="720" height="28" rx="14"/></clipPath>
|
|
12
|
+
<g clip-path="url(#track)">
|
|
13
|
+
<rect class="fill" style="--d:0s" x="40" y="46" width="720" height="28" fill="#7b6cff"/>
|
|
14
|
+
</g>
|
|
15
|
+
<circle class="knob" style="--d:0s" cx="40" cy="60" r="22" fill="#fff"/>
|
|
16
|
+
</svg>
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="600" height="600" viewBox="0 0 600 600">
|
|
2
|
+
<!-- FableCut animated SVG · loops · concentric pulse rings (attention / notify / sonar) -->
|
|
3
|
+
<style>
|
|
4
|
+
.r { transform-box: fill-box; transform-origin: center;
|
|
5
|
+
animation: pulse 2.4s cubic-bezier(.2,.6,.3,1) infinite; }
|
|
6
|
+
@keyframes pulse {
|
|
7
|
+
0% { transform: scale(0.1); opacity: 0; }
|
|
8
|
+
15% { opacity: 0.9; }
|
|
9
|
+
100% { transform: scale(1); opacity: 0; }
|
|
10
|
+
}
|
|
11
|
+
</style>
|
|
12
|
+
<g fill="none" stroke="#7b6cff" stroke-width="5">
|
|
13
|
+
<circle class="r" style="--d:0s" cx="300" cy="300" r="290"/>
|
|
14
|
+
<circle class="r" style="--d:0.6s" cx="300" cy="300" r="290"/>
|
|
15
|
+
<circle class="r" style="--d:1.2s" cx="300" cy="300" r="290"/>
|
|
16
|
+
<circle class="r" style="--d:1.8s" cx="300" cy="300" r="290"/>
|
|
17
|
+
</g>
|
|
18
|
+
<circle cx="300" cy="300" r="30" fill="#7b6cff"/>
|
|
19
|
+
</svg>
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="800" height="240" viewBox="0 0 800 240">
|
|
2
|
+
<!-- FableCut animated SVG · one-shot (~1.1s) · 5 stars pop in sequence (review / rating) -->
|
|
3
|
+
<style>
|
|
4
|
+
.st { transform-box: fill-box; transform-origin: center;
|
|
5
|
+
animation: pop 0.5s cubic-bezier(.34,1.56,.64,1) both; }
|
|
6
|
+
@keyframes pop {
|
|
7
|
+
0% { transform: scale(0) rotate(-60deg); opacity: 0; }
|
|
8
|
+
100% { transform: scale(1) rotate(0deg); opacity: 1; }
|
|
9
|
+
}
|
|
10
|
+
.shine { transform-box: fill-box; transform-origin: center;
|
|
11
|
+
animation: gl 0.4s ease-out both; }
|
|
12
|
+
@keyframes gl { 0% { opacity: 0; transform: scale(0.3); } 60% { opacity: 0.9; } 100% { opacity: 0; transform: scale(1.4); } }
|
|
13
|
+
</style>
|
|
14
|
+
<g fill="#ffd166">
|
|
15
|
+
<path class="st" style="--d:0s" d="M110 40 l24 60 64 4 -50 42 17 62 -55 -36 -55 36 17 -62 -50 -42 64 -4z"/>
|
|
16
|
+
<path class="st" style="--d:0.12s" d="M255 40 l24 60 64 4 -50 42 17 62 -55 -36 -55 36 17 -62 -50 -42 64 -4z"/>
|
|
17
|
+
<path class="st" style="--d:0.24s" d="M400 40 l24 60 64 4 -50 42 17 62 -55 -36 -55 36 17 -62 -50 -42 64 -4z"/>
|
|
18
|
+
<path class="st" style="--d:0.36s" d="M545 40 l24 60 64 4 -50 42 17 62 -55 -36 -55 36 17 -62 -50 -42 64 -4z"/>
|
|
19
|
+
<path class="st" style="--d:0.48s" d="M690 40 l24 60 64 4 -50 42 17 62 -55 -36 -55 36 17 -62 -50 -42 64 -4z"/>
|
|
20
|
+
</g>
|
|
21
|
+
<g fill="#fffbe6">
|
|
22
|
+
<circle class="shine" style="--d:0.62s" cx="110" cy="120" r="30"/>
|
|
23
|
+
<circle class="shine" style="--d:0.74s" cx="700" cy="120" r="30"/>
|
|
24
|
+
</g>
|
|
25
|
+
</svg>
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="200" height="80" viewBox="0 0 200 80">
|
|
2
|
+
<!-- FableCut animated SVG · loop · live-recording REC indicator
|
|
3
|
+
Pulsing red dot + "REC" label. Great for "live" overlays. -->
|
|
4
|
+
<style>
|
|
5
|
+
.dot {
|
|
6
|
+
fill: #ff3b30;
|
|
7
|
+
transform-box: fill-box;
|
|
8
|
+
transform-origin: center;
|
|
9
|
+
animation: pulse 1.2s ease-in-out infinite;
|
|
10
|
+
}
|
|
11
|
+
@keyframes pulse {
|
|
12
|
+
0%, 100% { opacity: 1; transform: scale(1); }
|
|
13
|
+
50% { opacity: 0.4; transform: scale(0.75); }
|
|
14
|
+
}
|
|
15
|
+
.ring {
|
|
16
|
+
fill: none;
|
|
17
|
+
stroke: #ff3b30;
|
|
18
|
+
stroke-width: 2;
|
|
19
|
+
transform-box: fill-box;
|
|
20
|
+
transform-origin: center;
|
|
21
|
+
animation: ringPulse 1.2s ease-out infinite;
|
|
22
|
+
}
|
|
23
|
+
@keyframes ringPulse {
|
|
24
|
+
0% { opacity: 0.8; r: 14; }
|
|
25
|
+
100% { opacity: 0; r: 28; }
|
|
26
|
+
}
|
|
27
|
+
.label {
|
|
28
|
+
font-family: 'Helvetica Neue', Arial, sans-serif;
|
|
29
|
+
font-weight: 700;
|
|
30
|
+
font-size: 28px;
|
|
31
|
+
fill: #ff3b30;
|
|
32
|
+
letter-spacing: 3px;
|
|
33
|
+
}
|
|
34
|
+
</style>
|
|
35
|
+
<!-- Pulsing ring -->
|
|
36
|
+
<circle class="ring" style="--d:0s" cx="30" cy="40" r="14"/>
|
|
37
|
+
<!-- Solid dot -->
|
|
38
|
+
<circle class="dot" style="--d:0s" cx="30" cy="40" r="10"/>
|
|
39
|
+
<!-- REC text -->
|
|
40
|
+
<text class="label" x="58" y="48">REC</text>
|
|
41
|
+
</svg>
|