loopwind 0.9.2 → 0.10.0
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/FONTS.md +13 -13
- package/HELPERS_DEMO.md +2 -2
- package/PROJECT_STRUCTURE.md +38 -38
- package/PUBLISHING.md +13 -13
- package/README.md +40 -48
- package/REGISTRY_SETUP.md +18 -18
- package/SHADCN_INTEGRATION.md +7 -7
- package/TAILWIND.md +4 -4
- package/TEMPLATE_SOURCES.md +30 -30
- package/dist/commands/render.d.ts +1 -1
- package/dist/commands/render.d.ts.map +1 -1
- package/dist/commands/render.js +53 -26
- package/dist/commands/render.js.map +1 -1
- package/dist/default-templates/AGENTS.md +29 -29
- package/dist/default-templates/image-template/template.tsx +15 -0
- package/dist/default-templates/video-template/template.tsx +19 -0
- package/dist/default-templates/website-template/template.tsx +18 -0
- package/dist/lib/renderer.js +15 -15
- package/dist/lib/renderer.js.map +1 -1
- package/dist/lib/tailwind-detector.js +1 -1
- package/dist/lib/tailwind-detector.js.map +1 -1
- package/dist/lib/tailwind.d.ts +1 -1
- package/dist/lib/tailwind.d.ts.map +1 -1
- package/dist/lib/tailwind.js +19 -19
- package/dist/lib/tailwind.js.map +1 -1
- package/dist/lib/template-validator.js +1 -1
- package/dist/lib/template-validator.js.map +1 -1
- package/dist/lib/utils.d.ts +1 -1
- package/dist/lib/utils.d.ts.map +1 -1
- package/dist/lib/utils.js +8 -7
- package/dist/lib/utils.js.map +1 -1
- package/dist/lib/video-renderer.d.ts +6 -0
- package/dist/lib/video-renderer.d.ts.map +1 -1
- package/dist/lib/video-renderer.js +69 -0
- package/dist/lib/video-renderer.js.map +1 -1
- package/dist/sdk/index.d.ts.map +1 -1
- package/dist/sdk/index.js +8 -8
- package/dist/sdk/index.js.map +1 -1
- package/examples/nextjs-api/README.md +6 -6
- package/examples/nextjs-api/pages/api/intro-video.ts +1 -1
- package/examples/nextjs-api/pages/api/og-image.ts +2 -2
- package/package.json +2 -1
- package/test-templates/TESTS.md +1 -1
- package/test-templates/test-sdk.mjs +2 -2
- package/website/README.md +2 -2
- package/website/package-lock.json +186 -2480
- package/_dsgn/templates/banner-hero/banner-hero.tsx +0 -57
- package/_dsgn/templates/banner-hero/meta.json +0 -14
- package/_dsgn/templates/composite-card/meta.json +0 -16
- package/_dsgn/templates/composite-card/template.tsx +0 -44
- package/_dsgn/templates/image/meta.json +0 -13
- package/_dsgn/templates/image/template.tsx +0 -28
- package/_dsgn/templates/kitchen-sink/meta.json +0 -13
- package/_dsgn/templates/kitchen-sink/template.tsx +0 -72
- package/_dsgn/templates/qr-card/meta.json +0 -14
- package/_dsgn/templates/qr-card/template.tsx +0 -39
- package/_dsgn/templates/test-parent/child/meta.json +0 -11
- package/_dsgn/templates/test-parent/child/template.tsx +0 -27
- package/_dsgn/templates/test-parent/meta.json +0 -12
- package/_dsgn/templates/test-parent/template.tsx +0 -30
- package/_dsgn/templates/test-sibling/meta.json +0 -11
- package/_dsgn/templates/test-sibling/template.tsx +0 -20
- package/_dsgn/templates/video/.tmp/template-1763421345296.mjs +0 -43
- package/_dsgn/templates/video/.tmp/template-1763421362228.mjs +0 -43
- package/_dsgn/templates/video/.tmp/template-1763421377706.mjs +0 -43
- package/_dsgn/templates/video/meta.json +0 -17
- package/_dsgn/templates/video/template.tsx +0 -48
- package/dist/default-templates/image/meta.json +0 -13
- package/dist/default-templates/image-template/meta.json +0 -13
- package/dist/default-templates/kitchen-sink/meta.json +0 -13
- package/dist/default-templates/page/meta.json +0 -17
- package/dist/default-templates/video/meta.json +0 -17
- package/dist/default-templates/video-template/meta.json +0 -17
- package/dist/default-templates/website/meta.json +0 -16
- package/dist/default-templates/website-template/meta.json +0 -16
- package/test-templates/_dsgn/templates/absolute-spin/meta.json +0 -7
- package/test-templates/_dsgn/templates/absolute-spin/template.tsx +0 -16
- package/test-templates/_dsgn/templates/animated-intro/.tmp/template-1763468771640.mjs +0 -7
- package/test-templates/_dsgn/templates/animated-intro/meta.json +0 -10
- package/test-templates/_dsgn/templates/animated-intro/template.tsx +0 -23
- package/test-templates/_dsgn/templates/centered-spin/.tmp/template-1763468525386.mjs +0 -7
- package/test-templates/_dsgn/templates/centered-spin/meta.json +0 -7
- package/test-templates/_dsgn/templates/centered-spin/template.tsx +0 -11
- package/test-templates/_dsgn/templates/composite/.tmp/template-1763468815645.mjs +0 -7
- package/test-templates/_dsgn/templates/composite/meta.json +0 -9
- package/test-templates/_dsgn/templates/composite/template.tsx +0 -23
- package/test-templates/_dsgn/templates/easing-test/.tmp/template-1763468824501.mjs +0 -7
- package/test-templates/_dsgn/templates/easing-test/meta.json +0 -7
- package/test-templates/_dsgn/templates/easing-test/template.tsx +0 -47
- package/test-templates/_dsgn/templates/minimal-spin/.tmp/template-1763466364336.mjs +0 -10
- package/test-templates/_dsgn/templates/minimal-spin/.tmp/template-1763466584319.mjs +0 -10
- package/test-templates/_dsgn/templates/minimal-spin/.tmp/template-1763466667797.mjs +0 -10
- package/test-templates/_dsgn/templates/minimal-spin/.tmp/template-1763466746504.mjs +0 -10
- package/test-templates/_dsgn/templates/minimal-spin/.tmp/template-1763466930225.mjs +0 -10
- package/test-templates/_dsgn/templates/minimal-spin/.tmp/template-1763467004552.mjs +0 -10
- package/test-templates/_dsgn/templates/minimal-spin/.tmp/template-1763467060334.mjs +0 -10
- package/test-templates/_dsgn/templates/minimal-spin/.tmp/template-1763467124493.mjs +0 -10
- package/test-templates/_dsgn/templates/minimal-spin/.tmp/template-1763467174690.mjs +0 -10
- package/test-templates/_dsgn/templates/minimal-spin/.tmp/template-1763467359134.mjs +0 -10
- package/test-templates/_dsgn/templates/minimal-spin/.tmp/template-1763467451928.mjs +0 -10
- package/test-templates/_dsgn/templates/minimal-spin/.tmp/template-1763467758275.mjs +0 -10
- package/test-templates/_dsgn/templates/minimal-spin/.tmp/template-1763467985201.mjs +0 -10
- package/test-templates/_dsgn/templates/minimal-spin/.tmp/template-1763468020563.mjs +0 -10
- package/test-templates/_dsgn/templates/minimal-spin/.tmp/template-1763468090428.mjs +0 -10
- package/test-templates/_dsgn/templates/minimal-spin/.tmp/template-1763468211036.mjs +0 -10
- package/test-templates/_dsgn/templates/minimal-spin/.tmp/template-1763468394057.mjs +0 -10
- package/test-templates/_dsgn/templates/minimal-spin/meta.json +0 -7
- package/test-templates/_dsgn/templates/minimal-spin/template.tsx +0 -13
- package/test-templates/_dsgn/templates/no-origin-spin/meta.json +0 -7
- package/test-templates/_dsgn/templates/no-origin-spin/template.tsx +0 -10
- package/test-templates/_dsgn/templates/opacity-test/meta.json +0 -7
- package/test-templates/_dsgn/templates/opacity-test/template.tsx +0 -9
- package/test-templates/_dsgn/templates/qr-code/.tmp/template-1763468758954.mjs +0 -17
- package/test-templates/_dsgn/templates/qr-code/.tmp/template-1763468815672.mjs +0 -17
- package/test-templates/_dsgn/templates/qr-code/meta.json +0 -9
- package/test-templates/_dsgn/templates/qr-code/template.tsx +0 -20
- package/test-templates/_dsgn/templates/rotation-abs-test/meta.json +0 -7
- package/test-templates/_dsgn/templates/rotation-abs-test/template.tsx +0 -15
- package/test-templates/_dsgn/templates/rotation-corner/meta.json +0 -7
- package/test-templates/_dsgn/templates/rotation-corner/template.tsx +0 -12
- package/test-templates/_dsgn/templates/rotation-test/meta.json +0 -7
- package/test-templates/_dsgn/templates/rotation-test/template.tsx +0 -12
- package/test-templates/_dsgn/templates/shake-test/meta.json +0 -7
- package/test-templates/_dsgn/templates/shake-test/template.tsx +0 -12
- package/test-templates/_dsgn/templates/static-image/.tmp/template-1763468746271.mjs +0 -7
- package/test-templates/_dsgn/templates/static-image/meta.json +0 -9
- package/test-templates/_dsgn/templates/static-image/template.tsx +0 -19
- package/test-templates/_dsgn/templates/translate-test/meta.json +0 -7
- package/test-templates/_dsgn/templates/translate-test/template.tsx +0 -9
- package/test-templates/_dsgn/templates/video-loops/.tmp/template-1763468793192.mjs +0 -15
- package/test-templates/_dsgn/templates/video-loops/meta.json +0 -9
- package/test-templates/_dsgn/templates/video-loops/template.tsx +0 -39
- package/test-templates/_dsgn/templates/wrapped-spin/meta.json +0 -7
- package/test-templates/_dsgn/templates/wrapped-spin/template.tsx +0 -17
- package/test-templates/compare-svgs.mjs +0 -30
- package/test-templates/convert-frames.mjs +0 -15
- package/test-templates/debug-rotation.mjs +0 -25
package/SHADCN_INTEGRATION.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# shadcn/ui Design System Integration
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
loopwind uses **shadcn/ui's design system** by default, providing beautiful and consistent colors, typography, and components.
|
|
4
4
|
|
|
5
5
|
## Default Color Palette
|
|
6
6
|
|
|
@@ -139,7 +139,7 @@ export default function ShadcnCard({ title, description, status, tw }) {
|
|
|
139
139
|
{/* Subtle border */}
|
|
140
140
|
<div style={tw('border-t/50 mt-6 pt-6')}>
|
|
141
141
|
<p style={tw('text-muted-foreground/75 text-sm')}>
|
|
142
|
-
Powered by
|
|
142
|
+
Powered by loopwind + shadcn
|
|
143
143
|
</p>
|
|
144
144
|
</div>
|
|
145
145
|
</div>
|
|
@@ -150,7 +150,7 @@ export default function ShadcnCard({ title, description, status, tw }) {
|
|
|
150
150
|
|
|
151
151
|
## Customizing Colors
|
|
152
152
|
|
|
153
|
-
Users can override the default shadcn colors in their `
|
|
153
|
+
Users can override the default shadcn colors in their `loopwind.json`:
|
|
154
154
|
|
|
155
155
|
```json
|
|
156
156
|
{
|
|
@@ -164,11 +164,11 @@ Users can override the default shadcn colors in their `dsgn.json`:
|
|
|
164
164
|
}
|
|
165
165
|
```
|
|
166
166
|
|
|
167
|
-
Or use their existing `tailwind.config.js` colors -
|
|
167
|
+
Or use their existing `tailwind.config.js` colors - loopwind automatically detects and uses them!
|
|
168
168
|
|
|
169
169
|
## shadcn Themes
|
|
170
170
|
|
|
171
|
-
|
|
171
|
+
loopwind uses the **Zinc theme** by default. Users can easily switch to other shadcn themes:
|
|
172
172
|
|
|
173
173
|
### Slate Theme
|
|
174
174
|
```json
|
|
@@ -263,7 +263,7 @@ Much cleaner and themeable!
|
|
|
263
263
|
| **Foreground variants** | ✅ | `text-muted-foreground` |
|
|
264
264
|
| **Opacity modifiers** | ✅ | `bg-primary/50`, `text-muted/75` |
|
|
265
265
|
| **Border colors** | ✅ | `border`, `border-destructive/50` |
|
|
266
|
-
| **Dark mode** | ✅ | Override in
|
|
266
|
+
| **Dark mode** | ✅ | Override in loopwind.json |
|
|
267
267
|
| **Custom themes** | ✅ | Full shadcn palette customizable |
|
|
268
268
|
|
|
269
|
-
**
|
|
269
|
+
**loopwind templates automatically work with shadcn's design system!** 🎨
|
package/TAILWIND.md
CHANGED
|
@@ -108,20 +108,20 @@ tw('opacity-90') // opacity: 0.9
|
|
|
108
108
|
### Colors
|
|
109
109
|
|
|
110
110
|
- **Static Colors**: `text-white`, `text-black`, `bg-white`, `bg-black`
|
|
111
|
-
- **Config Colors**: `bg-primary`, `text-primary`, `bg-secondary`, etc. (from
|
|
111
|
+
- **Config Colors**: `bg-primary`, `text-primary`, `bg-secondary`, etc. (from loopwind.json)
|
|
112
112
|
|
|
113
113
|
Examples:
|
|
114
114
|
```tsx
|
|
115
115
|
// Using static colors
|
|
116
116
|
tw('bg-black text-white')
|
|
117
117
|
|
|
118
|
-
// Using config colors (from
|
|
118
|
+
// Using config colors (from loopwind.json)
|
|
119
119
|
tw('bg-primary text-secondary')
|
|
120
120
|
```
|
|
121
121
|
|
|
122
122
|
## Config Color Integration
|
|
123
123
|
|
|
124
|
-
The `tw()` function automatically uses colors from your `
|
|
124
|
+
The `tw()` function automatically uses colors from your `loopwind.json`:
|
|
125
125
|
|
|
126
126
|
```json
|
|
127
127
|
{
|
|
@@ -215,7 +215,7 @@ const TAILWIND_MAP = {
|
|
|
215
215
|
|
|
216
216
|
1. **Familiar Syntax**: Use the Tailwind classes you already know
|
|
217
217
|
2. **Cleaner Code**: Less verbose than inline styles
|
|
218
|
-
3. **Config Integration**: Automatic color mapping from
|
|
218
|
+
3. **Config Integration**: Automatic color mapping from loopwind.json
|
|
219
219
|
4. **Type Safe**: TypeScript support with CSSProperties
|
|
220
220
|
5. **Extensible**: Easy to add more utilities
|
|
221
221
|
|
package/TEMPLATE_SOURCES.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
## Overview
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
loopwind supports installing templates from multiple sources:
|
|
6
6
|
|
|
7
7
|
1. **Official Registry** (default)
|
|
8
8
|
2. **Direct URLs**
|
|
@@ -11,25 +11,25 @@ dsgn supports installing templates from multiple sources:
|
|
|
11
11
|
|
|
12
12
|
## 1. Official Registry (Default)
|
|
13
13
|
|
|
14
|
-
Install templates from the official
|
|
14
|
+
Install templates from the official loopwind registry at `https://loopwind.dev/r`
|
|
15
15
|
|
|
16
16
|
```bash
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
17
|
+
loopwind add banner-hero
|
|
18
|
+
loopwind add product-card
|
|
19
|
+
loopwind add social-og-image
|
|
20
20
|
```
|
|
21
21
|
|
|
22
22
|
**How it works:**
|
|
23
|
-
- Fetches from: `https://
|
|
23
|
+
- Fetches from: `https://loopwind.dev/r/banner-hero`
|
|
24
24
|
- Returns JSON with template files
|
|
25
|
-
- Installs to: `
|
|
25
|
+
- Installs to: `loopwind/templates/banner-hero/`
|
|
26
26
|
|
|
27
27
|
### Custom Registry
|
|
28
28
|
|
|
29
29
|
Use a different registry:
|
|
30
30
|
|
|
31
31
|
```bash
|
|
32
|
-
|
|
32
|
+
loopwind add banner-hero --registry https://my-registry.com/templates
|
|
33
33
|
```
|
|
34
34
|
|
|
35
35
|
## 2. Direct URLs
|
|
@@ -37,8 +37,8 @@ dsgn add banner-hero --registry https://my-registry.com/templates
|
|
|
37
37
|
Install a template from any publicly accessible URL:
|
|
38
38
|
|
|
39
39
|
```bash
|
|
40
|
-
|
|
41
|
-
|
|
40
|
+
loopwind add https://example.com/templates/my-template.json
|
|
41
|
+
loopwind add https://cdn.example.com/templates/awesome-banner.json
|
|
42
42
|
```
|
|
43
43
|
|
|
44
44
|
**Requirements:**
|
|
@@ -71,13 +71,13 @@ Install templates directly from GitHub repos:
|
|
|
71
71
|
|
|
72
72
|
```bash
|
|
73
73
|
# From a GitHub repo (looks for template.json in repo root)
|
|
74
|
-
|
|
74
|
+
loopwind add github:username/repo
|
|
75
75
|
|
|
76
76
|
# From a specific path in the repo
|
|
77
|
-
|
|
77
|
+
loopwind add github:username/repo/templates/banner-hero
|
|
78
78
|
|
|
79
79
|
# From an organization
|
|
80
|
-
|
|
80
|
+
loopwind add github:myorg/design-templates/social-media/og-image
|
|
81
81
|
```
|
|
82
82
|
|
|
83
83
|
**How it works:**
|
|
@@ -132,11 +132,11 @@ Install templates from your local filesystem:
|
|
|
132
132
|
|
|
133
133
|
```bash
|
|
134
134
|
# Relative path
|
|
135
|
-
|
|
136
|
-
|
|
135
|
+
loopwind add ./my-templates/banner-hero
|
|
136
|
+
loopwind add ../shared-templates/product-card
|
|
137
137
|
|
|
138
138
|
# Absolute path
|
|
139
|
-
|
|
139
|
+
loopwind add /Users/you/templates/social-card
|
|
140
140
|
```
|
|
141
141
|
|
|
142
142
|
**Requirements:**
|
|
@@ -181,9 +181,9 @@ interface RegistryTemplate {
|
|
|
181
181
|
|
|
182
182
|
```bash
|
|
183
183
|
# Install from company repo
|
|
184
|
-
|
|
184
|
+
loopwind add github:mycompany/design-templates/marketing/hero-banner
|
|
185
185
|
|
|
186
|
-
# Result: Installs to
|
|
186
|
+
# Result: Installs to loopwind/templates/hero-banner/
|
|
187
187
|
```
|
|
188
188
|
|
|
189
189
|
### Example 2: Local Development
|
|
@@ -198,30 +198,30 @@ cd my-template
|
|
|
198
198
|
|
|
199
199
|
# Install from local
|
|
200
200
|
cd ../my-project
|
|
201
|
-
|
|
201
|
+
loopwind add ../my-template
|
|
202
202
|
|
|
203
203
|
# Test it
|
|
204
|
-
|
|
204
|
+
loopwind render banner --props props.json
|
|
205
205
|
```
|
|
206
206
|
|
|
207
207
|
### Example 3: Direct URL
|
|
208
208
|
|
|
209
209
|
```bash
|
|
210
210
|
# Install from CDN
|
|
211
|
-
|
|
211
|
+
loopwind add https://cdn.mycompany.com/templates/v2/social-card.json
|
|
212
212
|
|
|
213
213
|
# Install from gist (if formatted correctly)
|
|
214
|
-
|
|
214
|
+
loopwind add https://gist.githubusercontent.com/user/id/raw/template.json
|
|
215
215
|
```
|
|
216
216
|
|
|
217
217
|
### Example 4: Custom Registry
|
|
218
218
|
|
|
219
219
|
```bash
|
|
220
220
|
# Team's private registry
|
|
221
|
-
|
|
221
|
+
loopwind add product-card --registry https://templates.mycompany.com/api
|
|
222
222
|
|
|
223
223
|
# Alternative registry
|
|
224
|
-
|
|
224
|
+
loopwind add banner --registry https://awesome-templates.dev/registry
|
|
225
225
|
```
|
|
226
226
|
|
|
227
227
|
## Creating Shareable Templates
|
|
@@ -247,7 +247,7 @@ my-templates/
|
|
|
247
247
|
2. Share installation command:
|
|
248
248
|
|
|
249
249
|
```bash
|
|
250
|
-
|
|
250
|
+
loopwind add github:username/my-templates/templates/banner-hero
|
|
251
251
|
```
|
|
252
252
|
|
|
253
253
|
### For Direct URL
|
|
@@ -257,7 +257,7 @@ dsgn add github:username/my-templates/templates/banner-hero
|
|
|
257
257
|
3. Share the URL:
|
|
258
258
|
|
|
259
259
|
```bash
|
|
260
|
-
|
|
260
|
+
loopwind add https://my-cdn.com/templates/banner.json
|
|
261
261
|
```
|
|
262
262
|
|
|
263
263
|
### For Local Sharing (Teams)
|
|
@@ -277,7 +277,7 @@ company-monorepo/
|
|
|
277
277
|
2. Team members install with relative paths:
|
|
278
278
|
|
|
279
279
|
```bash
|
|
280
|
-
|
|
280
|
+
loopwind add ../../design-templates/banner
|
|
281
281
|
```
|
|
282
282
|
|
|
283
283
|
## Security Considerations
|
|
@@ -327,8 +327,8 @@ dsgn add ../../design-templates/banner
|
|
|
327
327
|
Delete existing template and reinstall:
|
|
328
328
|
|
|
329
329
|
```bash
|
|
330
|
-
rm -rf
|
|
331
|
-
|
|
330
|
+
rm -rf loopwind/templates/banner-hero
|
|
331
|
+
loopwind add github:user/repo/banner-hero
|
|
332
332
|
```
|
|
333
333
|
|
|
334
334
|
## Advanced: Publishing Your Own Registry
|
|
@@ -353,7 +353,7 @@ Returns:
|
|
|
353
353
|
Users can install with:
|
|
354
354
|
|
|
355
355
|
```bash
|
|
356
|
-
|
|
356
|
+
loopwind add your-template --registry https://your-registry.com
|
|
357
357
|
```
|
|
358
358
|
|
|
359
359
|
See `ROADMAP.md` for future registry features (versioning, search, marketplace).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../src/commands/render.ts"],"names":[],"mappings":"AAYA,UAAU,aAAa;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../src/commands/render.ts"],"names":[],"mappings":"AAYA,UAAU,aAAa;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK,CAAC;IACjE,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,wBAAsB,aAAa,CACjC,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,IAAI,CAAC,CAwPf"}
|
package/dist/commands/render.js
CHANGED
|
@@ -4,7 +4,7 @@ import gradient from 'gradient-string';
|
|
|
4
4
|
import path from 'path';
|
|
5
5
|
import { isTemplateInstalled, parseProps, ensureOutputDir, loadTemplateMeta } from '../lib/utils.js';
|
|
6
6
|
import { render } from '../lib/renderer.js';
|
|
7
|
-
import { renderVideo, renderVideoFrames } from '../lib/video-renderer.js';
|
|
7
|
+
import { renderVideo, renderVideoFrames, renderVideoToGif } from '../lib/video-renderer.js';
|
|
8
8
|
import { validateTemplateForRendering, enhanceSatoriError } from '../lib/template-validator.js';
|
|
9
9
|
import { getResolvedPaths } from '../lib/config.js';
|
|
10
10
|
import { checkForUpdates } from '../lib/version-check.js';
|
|
@@ -76,17 +76,24 @@ export async function renderCommand(templateName, propsArg, options) {
|
|
|
76
76
|
const paths = await getResolvedPaths();
|
|
77
77
|
// Handle video templates
|
|
78
78
|
if (templateType === 'video') {
|
|
79
|
-
|
|
79
|
+
// Determine video format (mp4 or gif)
|
|
80
|
+
const videoFormat = options.format === 'gif' ? 'gif' : 'mp4';
|
|
81
|
+
const defaultFileName = `${templateName}-${Date.now()}.${videoFormat}`;
|
|
80
82
|
let outputPath = options.out
|
|
81
83
|
? options.out
|
|
82
84
|
: path.join(paths.outputs, defaultFileName);
|
|
83
85
|
// Auto-correct extension if user provided wrong format
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
86
|
+
const validVideoExts = ['.mp4', '.gif'];
|
|
87
|
+
const currentExt = path.extname(outputPath).toLowerCase();
|
|
88
|
+
if (options.out && !validVideoExts.includes(currentExt)) {
|
|
89
|
+
outputPath = outputPath.replace(/\.[^.]+$/, `.${videoFormat}`);
|
|
90
|
+
spinner.warn(chalk.yellow(`Video templates must output to .mp4 or .gif (changed ${currentExt} → .${videoFormat})`));
|
|
88
91
|
spinner.start();
|
|
89
92
|
}
|
|
93
|
+
else if (options.out && currentExt === '.gif') {
|
|
94
|
+
// If user specified .gif extension, use gif format
|
|
95
|
+
// videoFormat is already set based on options.format
|
|
96
|
+
}
|
|
90
97
|
// Frames-only mode
|
|
91
98
|
if (options.framesOnly) {
|
|
92
99
|
const framesDir = options.out || path.join(paths.outputs, `${templateName}-frames-${Date.now()}`);
|
|
@@ -121,46 +128,66 @@ export async function renderCommand(templateName, propsArg, options) {
|
|
|
121
128
|
return;
|
|
122
129
|
}
|
|
123
130
|
// Render video (no ffmpeg required - uses WASM encoder!)
|
|
124
|
-
spinner.text =
|
|
131
|
+
spinner.text = `Rendering ${videoFormat.toUpperCase()}...`;
|
|
125
132
|
let lastUpdate = Date.now();
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
133
|
+
if (videoFormat === 'gif') {
|
|
134
|
+
await renderVideoToGif(templateName, props, outputPath, {
|
|
135
|
+
onFrameProgress: (frame, total, phase) => {
|
|
136
|
+
if (Date.now() - lastUpdate > 100) {
|
|
137
|
+
if (phase === 'svg') {
|
|
138
|
+
spinner.text = `Generating SVGs: ${frame}/${total} (${Math.round((frame / total) * 100)}%)`;
|
|
139
|
+
}
|
|
140
|
+
else if (phase === 'encode') {
|
|
141
|
+
spinner.text = `Encoding GIF: ${frame}/${total} (${Math.round((frame / total) * 100)}%)`;
|
|
142
|
+
}
|
|
143
|
+
lastUpdate = Date.now();
|
|
132
144
|
}
|
|
133
|
-
|
|
134
|
-
|
|
145
|
+
},
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
else {
|
|
149
|
+
await renderVideo(templateName, props, outputPath, {
|
|
150
|
+
quality: options.crf ? parseInt(String(options.crf), 10) : undefined,
|
|
151
|
+
onFrameProgress: (frame, total, phase) => {
|
|
152
|
+
if (Date.now() - lastUpdate > 100) {
|
|
153
|
+
if (phase === 'svg') {
|
|
154
|
+
spinner.text = `Generating SVGs: ${frame}/${total} (${Math.round((frame / total) * 100)}%)`;
|
|
155
|
+
}
|
|
156
|
+
else if (phase === 'encode') {
|
|
157
|
+
spinner.text = `Encoding video: ${frame}/${total} (${Math.round((frame / total) * 100)}%)`;
|
|
158
|
+
}
|
|
159
|
+
lastUpdate = Date.now();
|
|
135
160
|
}
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
});
|
|
140
|
-
spinner.succeed(chalk.green(`Successfully rendered video to ${chalk.bold(outputPath)}`));
|
|
161
|
+
},
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
spinner.succeed(chalk.green(`Successfully rendered ${videoFormat.toUpperCase()} to ${chalk.bold(outputPath)}`));
|
|
141
165
|
console.log(chalk.dim(`\nTemplate: ${templateName}`));
|
|
142
|
-
console.log(chalk.dim(`Format:
|
|
166
|
+
console.log(chalk.dim(`Format: ${videoFormat.toUpperCase()}`));
|
|
143
167
|
console.log(chalk.dim(`Output: ${path.resolve(outputPath)}\n`));
|
|
144
168
|
await showUpdateNotification();
|
|
145
169
|
return;
|
|
146
170
|
}
|
|
147
171
|
// Handle image templates
|
|
148
|
-
|
|
149
|
-
const
|
|
172
|
+
// Filter out video formats for image templates
|
|
173
|
+
const imageFormat = (options.format === 'mp4' || options.format === 'gif')
|
|
174
|
+
? 'png'
|
|
175
|
+
: (options.format || 'png');
|
|
176
|
+
const defaultFileName = `${templateName}-${Date.now()}.${imageFormat}`;
|
|
150
177
|
const outputPath = options.out
|
|
151
178
|
? options.out
|
|
152
179
|
: path.join(paths.outputs, defaultFileName);
|
|
153
180
|
// Render
|
|
154
|
-
spinner.text = `Rendering to ${
|
|
181
|
+
spinner.text = `Rendering to ${imageFormat.toUpperCase()}...`;
|
|
155
182
|
await render({
|
|
156
183
|
templateName,
|
|
157
184
|
props,
|
|
158
185
|
outputPath,
|
|
159
|
-
format,
|
|
186
|
+
format: imageFormat,
|
|
160
187
|
});
|
|
161
188
|
spinner.succeed(chalk.green(`Successfully rendered to ${chalk.bold(outputPath)}`));
|
|
162
189
|
console.log(chalk.dim(`\nTemplate: ${templateName}`));
|
|
163
|
-
console.log(chalk.dim(`Format: ${
|
|
190
|
+
console.log(chalk.dim(`Format: ${imageFormat.toUpperCase()}`));
|
|
164
191
|
console.log(chalk.dim(`Output: ${path.resolve(outputPath)}\n`));
|
|
165
192
|
await showUpdateNotification();
|
|
166
193
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/commands/render.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/commands/render.ts"],"names":[],"mappings":"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"}
|
|
@@ -36,19 +36,24 @@ loopwind render banner-hero props.json --out output.png --format png
|
|
|
36
36
|
|
|
37
37
|
### 5. Render Videos
|
|
38
38
|
```bash
|
|
39
|
-
#
|
|
39
|
+
# Render to MP4 (default)
|
|
40
40
|
loopwind render my-video '{"title":"Video Title"}'
|
|
41
41
|
|
|
42
|
-
#
|
|
43
|
-
loopwind render my-video
|
|
42
|
+
# Render to GIF (great for emails, GitHub, Slack)
|
|
43
|
+
loopwind render my-video '{"title":"Video Title"}' --format gif
|
|
44
44
|
|
|
45
|
-
#
|
|
45
|
+
# With quality options
|
|
46
|
+
loopwind render my-video props.json --crf 23
|
|
47
|
+
|
|
48
|
+
# Export frames only
|
|
46
49
|
loopwind render my-video props.json --frames-only
|
|
47
50
|
|
|
48
51
|
# Keep frames after encoding
|
|
49
52
|
loopwind render my-video props.json --keep-frames
|
|
50
53
|
```
|
|
51
54
|
|
|
55
|
+
**Formats:** MP4 (default), GIF
|
|
56
|
+
|
|
52
57
|
### 6. Validate Templates
|
|
53
58
|
```bash
|
|
54
59
|
loopwind validate [template] # Validate one or all templates
|
|
@@ -68,18 +73,15 @@ project/
|
|
|
68
73
|
## Template Types
|
|
69
74
|
|
|
70
75
|
### Image Template
|
|
71
|
-
**meta.json:**
|
|
72
|
-
```json
|
|
73
|
-
{
|
|
74
|
-
"name": "my-template",
|
|
75
|
-
"type": "image",
|
|
76
|
-
"size": { "width": 1200, "height": 630 },
|
|
77
|
-
"props": { "title": "string" }
|
|
78
|
-
}
|
|
79
|
-
```
|
|
80
|
-
|
|
81
|
-
**template.tsx:**
|
|
82
76
|
```tsx
|
|
77
|
+
// template.tsx
|
|
78
|
+
export const meta = {
|
|
79
|
+
name: "my-template",
|
|
80
|
+
type: "image",
|
|
81
|
+
size: { width: 1200, height: 630 },
|
|
82
|
+
props: { title: "string" }
|
|
83
|
+
};
|
|
84
|
+
|
|
83
85
|
export default function Template({ title, tw }) {
|
|
84
86
|
return (
|
|
85
87
|
<div style={tw('flex items-center justify-center w-full h-full bg-primary')}>
|
|
@@ -90,19 +92,16 @@ export default function Template({ title, tw }) {
|
|
|
90
92
|
```
|
|
91
93
|
|
|
92
94
|
### Video Template
|
|
93
|
-
**meta.json:**
|
|
94
|
-
```json
|
|
95
|
-
{
|
|
96
|
-
"name": "my-video",
|
|
97
|
-
"type": "video",
|
|
98
|
-
"size": { "width": 1920, "height": 1080 },
|
|
99
|
-
"video": { "fps": 30, "duration": 3 },
|
|
100
|
-
"props": { "title": "string" }
|
|
101
|
-
}
|
|
102
|
-
```
|
|
103
|
-
|
|
104
|
-
**template.tsx:**
|
|
105
95
|
```tsx
|
|
96
|
+
// template.tsx
|
|
97
|
+
export const meta = {
|
|
98
|
+
name: "my-video",
|
|
99
|
+
type: "video",
|
|
100
|
+
size: { width: 1920, height: 1080 },
|
|
101
|
+
video: { fps: 30, duration: 3 },
|
|
102
|
+
props: { title: "string" }
|
|
103
|
+
};
|
|
104
|
+
|
|
106
105
|
export default function VideoTemplate({ title, tw, progress }) {
|
|
107
106
|
const opacity = progress < 0.2 ? progress / 0.2 : 1;
|
|
108
107
|
|
|
@@ -189,7 +188,8 @@ loopwind render banner-hero '{"title":"Hello","subtitle":"World"}'
|
|
|
189
188
|
### Generate Video
|
|
190
189
|
```bash
|
|
191
190
|
loopwind add my-video
|
|
192
|
-
loopwind render my-video '{"title":"Amazing Video"}' #
|
|
191
|
+
loopwind render my-video '{"title":"Amazing Video"}' # MP4 output
|
|
192
|
+
loopwind render my-video '{"title":"Amazing Video"}' --format gif # GIF output
|
|
193
193
|
```
|
|
194
194
|
|
|
195
195
|
### Use Custom Branding
|
|
@@ -216,7 +216,7 @@ loopwind render og-image '{"title":"My Page"}'
|
|
|
216
216
|
|
|
217
217
|
1. Always run `loopwind init` first in new projects
|
|
218
218
|
2. Check `loopwind list` to see available templates
|
|
219
|
-
3.
|
|
219
|
+
3. Videos can be rendered to MP4 or GIF (use `--format gif`)
|
|
220
220
|
4. Image props are auto-detected (any prop ending in .jpg, .png, etc.)
|
|
221
221
|
5. Video props are extracted at template FPS and cached
|
|
222
222
|
6. Use `tw()` for all styling - it uses project's Tailwind config
|
|
@@ -1,4 +1,19 @@
|
|
|
1
1
|
|
|
2
|
+
|
|
3
|
+
export const meta = {
|
|
4
|
+
"name": "image",
|
|
5
|
+
"description": "Simple image starter template",
|
|
6
|
+
"type": "image",
|
|
7
|
+
"size": {
|
|
8
|
+
"width": 1200,
|
|
9
|
+
"height": 630
|
|
10
|
+
},
|
|
11
|
+
"props": {
|
|
12
|
+
"title": "string",
|
|
13
|
+
"description": "string?"
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
|
|
2
17
|
// Template metadata is defined in meta.json
|
|
3
18
|
|
|
4
19
|
export default function Template({ title, description, tw }) {
|
|
@@ -1,4 +1,23 @@
|
|
|
1
1
|
|
|
2
|
+
|
|
3
|
+
export const meta = {
|
|
4
|
+
"name": "video",
|
|
5
|
+
"description": "Animated video starter template",
|
|
6
|
+
"type": "video",
|
|
7
|
+
"size": {
|
|
8
|
+
"width": 1200,
|
|
9
|
+
"height": 630
|
|
10
|
+
},
|
|
11
|
+
"props": {
|
|
12
|
+
"title": "string",
|
|
13
|
+
"description": "string?"
|
|
14
|
+
},
|
|
15
|
+
"video": {
|
|
16
|
+
"fps": 30,
|
|
17
|
+
"duration": 3
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
|
|
2
21
|
// Template metadata is defined in meta.json
|
|
3
22
|
|
|
4
23
|
export default function Template({ title, description, frame, progress, tw }) {
|
|
@@ -1,4 +1,22 @@
|
|
|
1
1
|
|
|
2
|
+
|
|
3
|
+
export const meta = {
|
|
4
|
+
"name": "website",
|
|
5
|
+
"description": "Generate websites",
|
|
6
|
+
"type": "website",
|
|
7
|
+
"size": {
|
|
8
|
+
"width": 1200
|
|
9
|
+
},
|
|
10
|
+
"props": {
|
|
11
|
+
"title": "string",
|
|
12
|
+
"description": "string?"
|
|
13
|
+
},
|
|
14
|
+
"url": {
|
|
15
|
+
"fps": 30,
|
|
16
|
+
"duration": 3
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
|
|
2
20
|
// Template metadata is defined in meta.json
|
|
3
21
|
|
|
4
22
|
export default function Template({ title, description}) {
|