@adaptive-ds/assets-optimizer 0.1.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/.gitattributes +4 -0
- package/.github/workflows/publish.yml +40 -0
- package/LICENSE +22 -0
- package/README.md +325 -0
- package/assets-optimizer.code-workspace +8 -0
- package/biome.json +52 -0
- package/bun.lock +110 -0
- package/bunfig.toml +2 -0
- package/cliff.toml +90 -0
- package/docs/arch/overview_v1.excalidraw.svg +2 -0
- package/docs/arch/process_image_v1.excalidraw.svg +2 -0
- package/docs/arch/process_video_v1.excalidraw.svg +2 -0
- package/package.json +56 -0
- package/tsconfig.json +76 -0
- package/tsconfig.lib.json +19 -0
package/.gitattributes
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
name: Publish Package
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
tags:
|
|
6
|
+
- "v*"
|
|
7
|
+
|
|
8
|
+
permissions:
|
|
9
|
+
id-token: write # Required for OIDC
|
|
10
|
+
contents: read
|
|
11
|
+
jobs:
|
|
12
|
+
publish:
|
|
13
|
+
runs-on: ubuntu-latest
|
|
14
|
+
steps:
|
|
15
|
+
# Checkout source code
|
|
16
|
+
- uses: actions/checkout@v4
|
|
17
|
+
with:
|
|
18
|
+
ref: ${{ github.ref }}
|
|
19
|
+
|
|
20
|
+
# Setup Bun for installation, building, and testing
|
|
21
|
+
- uses: oven-sh/setup-bun@v1
|
|
22
|
+
with:
|
|
23
|
+
bun-version: latest
|
|
24
|
+
|
|
25
|
+
# Setup Node.js only for npm publishing with OIDC until Bun adds support for it - https://github.com/oven-sh/bun/issues/15601
|
|
26
|
+
- uses: actions/setup-node@v4
|
|
27
|
+
with:
|
|
28
|
+
node-version: "20"
|
|
29
|
+
registry-url: "https://registry.npmjs.org"
|
|
30
|
+
|
|
31
|
+
# Use Bun for everything except publishing
|
|
32
|
+
- run: bun install
|
|
33
|
+
- run: bun run build
|
|
34
|
+
# - run: bun test
|
|
35
|
+
|
|
36
|
+
# Ensure npm 11.5.1 or later is installed
|
|
37
|
+
- name: Update npm
|
|
38
|
+
run: npm install -g npm@latest
|
|
39
|
+
# Use npm only for publishing with OIDC support
|
|
40
|
+
- run: npm publish --access public --provenance
|
package/LICENSE
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
|
|
2
|
+
MIT License
|
|
3
|
+
|
|
4
|
+
Copyright (c) 2025 David Siewert
|
|
5
|
+
|
|
6
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
7
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
8
|
+
in the Software without restriction, including without limitation the rights
|
|
9
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
10
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
11
|
+
furnished to do so, subject to the following conditions:
|
|
12
|
+
|
|
13
|
+
The above copyright notice and this permission notice shall be included in all
|
|
14
|
+
copies or substantial portions of the Software.
|
|
15
|
+
|
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
17
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
18
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
19
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
20
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
21
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
22
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,325 @@
|
|
|
1
|
+
# @adaptive-ds/assets-optimizer
|
|
2
|
+
|
|
3
|
+
Process, hash, sync, and clean image assets for web projects that keep originals outside git and use R2 as the canonical store, with a separate pass for web videos.
|
|
4
|
+
|
|
5
|
+
This package is built for a workflow with two local directories:
|
|
6
|
+
|
|
7
|
+
- `images`: original source images, never modified
|
|
8
|
+
- `public/images`: generated optimized images, flat output only
|
|
9
|
+
- `videos`: original source videos, optional
|
|
10
|
+
- `public/videos`: processed videos, optional
|
|
11
|
+
|
|
12
|
+
It is designed for projects where:
|
|
13
|
+
|
|
14
|
+
- originals live in R2 and are synced locally
|
|
15
|
+
- optimized outputs should be deterministic and aggressively cacheable
|
|
16
|
+
- output filenames should change when either the source file or the transform changes
|
|
17
|
+
- old optimized files should be removed locally and remotely
|
|
18
|
+
- generated `imageList.ts` and `videoList.ts` should stay in sync with processed assets
|
|
19
|
+
|
|
20
|
+
## Diagrams
|
|
21
|
+
|
|
22
|
+

|
|
23
|
+

|
|
24
|
+

|
|
25
|
+
|
|
26
|
+
## What It Does
|
|
27
|
+
|
|
28
|
+
`assetsOptimize()` performs the full asset pipeline:
|
|
29
|
+
|
|
30
|
+
1. Resolves the project name from `package.json.name`
|
|
31
|
+
2. Uses that as the bucket base path on your `rclone` remote
|
|
32
|
+
3. Syncs originals between R2 and `images`
|
|
33
|
+
4. Scans transform folders like `1920x1080_jpg`
|
|
34
|
+
5. Processes matching image source files with `sharp`
|
|
35
|
+
6. Writes flat optimized images into `public/images`
|
|
36
|
+
7. Names image files as `<basename>_<hash>.<ext>`
|
|
37
|
+
8. Skips already-generated images
|
|
38
|
+
9. Deletes stale optimized images locally
|
|
39
|
+
10. Uploads missing optimized images to R2 with cache headers
|
|
40
|
+
11. Deletes stale optimized images from R2
|
|
41
|
+
12. Runs a separate optional video pass from `videos` to `public/videos`
|
|
42
|
+
13. Generates a `.jpg` preview beside each processed video using the processed video dimensions
|
|
43
|
+
14. Keeps video filenames unchanged and skips any processed video or preview that already exists
|
|
44
|
+
15. Uploads missing processed videos and previews to R2 without deleting manual variants
|
|
45
|
+
16. Generates `src/app/assets/imageList.ts` and `src/app/assets/videoList.ts` by default
|
|
46
|
+
17. Prints a clear summary of what changed
|
|
47
|
+
|
|
48
|
+
The hash is derived from:
|
|
49
|
+
|
|
50
|
+
- source file bytes
|
|
51
|
+
- normalized transform spec
|
|
52
|
+
|
|
53
|
+
That means image cache keys change when the source image changes or when you change the folder rule, even if the output filename format stays short.
|
|
54
|
+
|
|
55
|
+
## Folder Convention
|
|
56
|
+
|
|
57
|
+
Original files belong in transform folders inside `images`.
|
|
58
|
+
|
|
59
|
+
Example:
|
|
60
|
+
|
|
61
|
+
```text
|
|
62
|
+
images/
|
|
63
|
+
1920x1080_jpg/
|
|
64
|
+
kitchen.jpg
|
|
65
|
+
living-room.png
|
|
66
|
+
1200x1200_webp/
|
|
67
|
+
kitchen.jpg
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
This produces flat optimized image output like:
|
|
71
|
+
|
|
72
|
+
```text
|
|
73
|
+
public/images/
|
|
74
|
+
kitchen_a1b2c3d4.jpg
|
|
75
|
+
living-room_9f8e7d6c.jpg
|
|
76
|
+
kitchen_7c6b5a4d.webp
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
Root-level files directly inside `images` are intentionally skipped and warned on every run.
|
|
80
|
+
|
|
81
|
+
Videos are handled separately and do not use transform folders:
|
|
82
|
+
|
|
83
|
+
```text
|
|
84
|
+
videos/
|
|
85
|
+
hero.mp4
|
|
86
|
+
intro.webm
|
|
87
|
+
|
|
88
|
+
public/videos/
|
|
89
|
+
hero.mp4
|
|
90
|
+
hero.jpg
|
|
91
|
+
intro.webm
|
|
92
|
+
intro.jpg
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
Video behavior:
|
|
96
|
+
|
|
97
|
+
- if both local `videos` and remote `video-originals` are missing, the video pass does nothing
|
|
98
|
+
- source videos sync through `video-originals`
|
|
99
|
+
- processed videos sync through `video-processed`
|
|
100
|
+
- missing processed videos are created with `ffmpeg`
|
|
101
|
+
- missing preview images are created as `.jpg` files beside processed videos
|
|
102
|
+
- existing processed videos are skipped and preserved as manual transformations
|
|
103
|
+
- existing preview images are skipped and preserved
|
|
104
|
+
- video filenames and relative paths are kept as-is
|
|
105
|
+
- stale processed videos are not deleted
|
|
106
|
+
|
|
107
|
+
## Transform Folder Format
|
|
108
|
+
|
|
109
|
+
Folder names must use:
|
|
110
|
+
|
|
111
|
+
```text
|
|
112
|
+
<width>x<height>_<format>
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
Supported image output formats:
|
|
116
|
+
|
|
117
|
+
- `jpg`
|
|
118
|
+
- `png`
|
|
119
|
+
- `webp`
|
|
120
|
+
- `avif`
|
|
121
|
+
Examples:
|
|
122
|
+
|
|
123
|
+
- `1920x1080_jpg`
|
|
124
|
+
- `1600x900_webp`
|
|
125
|
+
- `800x800_avif`
|
|
126
|
+
Image processing behavior:
|
|
127
|
+
|
|
128
|
+
- resize fit: `inside` / max-bounds scaling
|
|
129
|
+
- `withoutEnlargement: true`
|
|
130
|
+
- image auto-rotation is applied
|
|
131
|
+
- default quality is `80`
|
|
132
|
+
|
|
133
|
+
Supported video source extensions:
|
|
134
|
+
|
|
135
|
+
- `mp4`
|
|
136
|
+
- `mov`
|
|
137
|
+
- `m4v`
|
|
138
|
+
- `webm`
|
|
139
|
+
- `avi`
|
|
140
|
+
- `mkv`
|
|
141
|
+
|
|
142
|
+
## Defaults
|
|
143
|
+
|
|
144
|
+
If you call `assetsOptimize()` with no arguments, it uses:
|
|
145
|
+
|
|
146
|
+
- `cwd`: `process.cwd()`
|
|
147
|
+
- `projectName`: `package.json.name`
|
|
148
|
+
- `processImages`: `true`
|
|
149
|
+
- `imageOriginalsDir`: `./images`
|
|
150
|
+
- `imageOptimizedDir`: `./public/images`
|
|
151
|
+
- `allowRootImageFiles`: `false`
|
|
152
|
+
- `processVideos`: `true`
|
|
153
|
+
- `videosDir`: `./videos`
|
|
154
|
+
- `processedVideosDir`: `./public/videos`
|
|
155
|
+
- `imageListOutputPath`: `./src/app/assets/imageList.ts`
|
|
156
|
+
- `videoListOutputPath`: `./src/app/assets/videoList.ts`
|
|
157
|
+
- `generateImageList`: `true`
|
|
158
|
+
- `generateVideoList`: `true`
|
|
159
|
+
- `videoPreviewQuality`: `80`
|
|
160
|
+
- `rcloneRemote`: `leo`
|
|
161
|
+
- `remoteImageOriginalsDir`: `image-originals`
|
|
162
|
+
- `remoteImageOptimizedDir`: `image-processed`
|
|
163
|
+
- `remoteVideoOriginalsDir`: `video-originals`
|
|
164
|
+
- `remoteVideoProcessedDir`: `video-processed`
|
|
165
|
+
- `cacheControlHeader`: `public,max-age=31536000,immutable`
|
|
166
|
+
|
|
167
|
+
So for a project named `moramontage`, the remote paths become:
|
|
168
|
+
|
|
169
|
+
- `leo:moramontage/image-originals`
|
|
170
|
+
- `leo:moramontage/image-processed`
|
|
171
|
+
- `leo:moramontage/video-originals`
|
|
172
|
+
- `leo:moramontage/video-processed`
|
|
173
|
+
|
|
174
|
+
## Installation
|
|
175
|
+
|
|
176
|
+
```bash
|
|
177
|
+
bun add @adaptive-ds/assets-optimizer
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
## Basic Usage
|
|
181
|
+
|
|
182
|
+
Example project entrypoint:
|
|
183
|
+
|
|
184
|
+
```ts
|
|
185
|
+
import { assetsOptimize } from "@adaptive-ds/assets-optimizer"
|
|
186
|
+
|
|
187
|
+
await assetsOptimize()
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
This generates optimized images, processed videos, video preview JPGs, `imageList.ts`, and `videoList.ts` in one run. Existing image alt text and existing video preview alt text are preserved when the generated files already exist.
|
|
191
|
+
|
|
192
|
+
## API
|
|
193
|
+
|
|
194
|
+
```ts
|
|
195
|
+
import { assetsOptimize } from "@adaptive-ds/assets-optimizer"
|
|
196
|
+
|
|
197
|
+
const result = await assetsOptimize(options)
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
### `OptimizeImagesWebOptions`
|
|
201
|
+
|
|
202
|
+
```ts
|
|
203
|
+
interface OptimizeImagesWebOptions {
|
|
204
|
+
cwd?: string
|
|
205
|
+
projectName?: string
|
|
206
|
+
processImages?: boolean
|
|
207
|
+
imageOriginalsDir?: string
|
|
208
|
+
imageOptimizedDir?: string
|
|
209
|
+
allowRootImageFiles?: boolean
|
|
210
|
+
imageListOutputPath?: string
|
|
211
|
+
imageListImportPath?: string
|
|
212
|
+
generateImageList?: boolean
|
|
213
|
+
processVideos?: boolean
|
|
214
|
+
videosDir?: string
|
|
215
|
+
processedVideosDir?: string
|
|
216
|
+
videoListOutputPath?: string
|
|
217
|
+
videoListImportPath?: string
|
|
218
|
+
generateVideoList?: boolean
|
|
219
|
+
videoPreviewQuality?: number
|
|
220
|
+
rcloneRemote?: string
|
|
221
|
+
remoteImageOriginalsDir?: string
|
|
222
|
+
remoteImageOptimizedDir?: string
|
|
223
|
+
remoteVideoOriginalsDir?: string
|
|
224
|
+
remoteVideoProcessedDir?: string
|
|
225
|
+
cacheControlHeader?: string
|
|
226
|
+
}
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
### `OptimizeImagesWebResult`
|
|
230
|
+
|
|
231
|
+
```ts
|
|
232
|
+
interface OptimizeImagesWebResult {
|
|
233
|
+
processed: string[]
|
|
234
|
+
skippedExisting: string[]
|
|
235
|
+
skippedRootFiles: string[]
|
|
236
|
+
warnings: string[]
|
|
237
|
+
deletedLocal: string[]
|
|
238
|
+
uploadedRemote: string[]
|
|
239
|
+
deletedRemote: string[]
|
|
240
|
+
processedVideos: string[]
|
|
241
|
+
skippedExistingVideos: string[]
|
|
242
|
+
uploadedRemoteVideos: string[]
|
|
243
|
+
processedVideoPreviews: string[]
|
|
244
|
+
skippedExistingVideoPreviews: string[]
|
|
245
|
+
uploadedRemoteVideoPreviews: string[]
|
|
246
|
+
}
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
## Example With Custom Paths
|
|
250
|
+
|
|
251
|
+
```ts
|
|
252
|
+
import { assetsOptimize } from "@adaptive-ds/assets-optimizer"
|
|
253
|
+
|
|
254
|
+
await assetsOptimize({
|
|
255
|
+
processImages: true,
|
|
256
|
+
imageOriginalsDir: "./assets/originals",
|
|
257
|
+
imageOptimizedDir: "./assets/optimized",
|
|
258
|
+
allowRootImageFiles: false,
|
|
259
|
+
imageListOutputPath: "./src/app/assets/imageList.ts",
|
|
260
|
+
processVideos: true,
|
|
261
|
+
videoListOutputPath: "./src/app/assets/videoList.ts",
|
|
262
|
+
videoPreviewQuality: 80,
|
|
263
|
+
rcloneRemote: "leo",
|
|
264
|
+
remoteImageOriginalsDir: "image-originals",
|
|
265
|
+
remoteImageOptimizedDir: "image-processed",
|
|
266
|
+
cacheControlHeader: "public,max-age=31536000,immutable",
|
|
267
|
+
})
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
## Requirements
|
|
271
|
+
|
|
272
|
+
- `bun`
|
|
273
|
+
- `rclone`
|
|
274
|
+
- `ffmpeg`
|
|
275
|
+
- an existing `rclone` remote, defaulting to `leo`
|
|
276
|
+
- write access to the target bucket/path
|
|
277
|
+
- Node/Bun environment capable of running `sharp`
|
|
278
|
+
|
|
279
|
+
This package assumes the remote bucket/path already exists or can be created by `rclone mkdir`.
|
|
280
|
+
|
|
281
|
+
## Cleanup Behavior
|
|
282
|
+
|
|
283
|
+
The package does not use a manifest.
|
|
284
|
+
|
|
285
|
+
Instead it derives the expected output set from the current originals and current transform folders, then reconciles that against:
|
|
286
|
+
|
|
287
|
+
- local `public/images`
|
|
288
|
+
- remote `image-processed` objects
|
|
289
|
+
|
|
290
|
+
That means:
|
|
291
|
+
|
|
292
|
+
- files no longer produced by the current source set are deleted
|
|
293
|
+
- renaming or removing a source file cleans up stale optimized files
|
|
294
|
+
- changing a transform folder causes a different hash and a different output filename
|
|
295
|
+
|
|
296
|
+
## Recommended Workflow
|
|
297
|
+
|
|
298
|
+
1. Add or sync originals into `images/<transform-folder>/`
|
|
299
|
+
2. Run your local image pipeline entrypoint
|
|
300
|
+
3. Regenerate your typed image list
|
|
301
|
+
4. Reference the generated hashed filenames from app code or derived metadata
|
|
302
|
+
|
|
303
|
+
## Important Caveat
|
|
304
|
+
|
|
305
|
+
If your project currently stores source images directly at the root of `images`, this package will skip them by design.
|
|
306
|
+
|
|
307
|
+
Before adopting it fully, move originals into explicit transform folders such as:
|
|
308
|
+
|
|
309
|
+
```text
|
|
310
|
+
images/1920x1080_jpg/
|
|
311
|
+
```
|
|
312
|
+
|
|
313
|
+
That contract is what makes the output deterministic and safe to clean automatically.
|
|
314
|
+
|
|
315
|
+
## Publishing
|
|
316
|
+
|
|
317
|
+
This package is intended to be published from:
|
|
318
|
+
|
|
319
|
+
- npm package: `@adaptive-ds/assets-optimizer`
|
|
320
|
+
- homepage: `https://github.com/david1gp/assets-optimizer`
|
|
321
|
+
- generated asset lists import types from this package name by default unless you override `imageListImportPath` or `videoListImportPath`
|
|
322
|
+
|
|
323
|
+
## License
|
|
324
|
+
|
|
325
|
+
MIT
|
package/biome.json
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "./node_modules/@biomejs/biome/configuration_schema.json",
|
|
3
|
+
"assist": {
|
|
4
|
+
"actions": {
|
|
5
|
+
"source": {
|
|
6
|
+
"organizeImports": "on"
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
},
|
|
10
|
+
"formatter": {
|
|
11
|
+
"enabled": true,
|
|
12
|
+
"indentStyle": "space",
|
|
13
|
+
"lineWidth": 120
|
|
14
|
+
},
|
|
15
|
+
"javascript": {
|
|
16
|
+
"formatter": {
|
|
17
|
+
"semicolons": "asNeeded"
|
|
18
|
+
}
|
|
19
|
+
},
|
|
20
|
+
"linter": {
|
|
21
|
+
"enabled": true,
|
|
22
|
+
"rules": {
|
|
23
|
+
"recommended": true,
|
|
24
|
+
"suspicious": {
|
|
25
|
+
"noExplicitAny": "off",
|
|
26
|
+
"noTsIgnore": "off"
|
|
27
|
+
},
|
|
28
|
+
"correctness": {
|
|
29
|
+
"useExhaustiveDependencies": "info"
|
|
30
|
+
},
|
|
31
|
+
"style": {
|
|
32
|
+
"noNonNullAssertion": "off",
|
|
33
|
+
"noInferrableTypes": "off",
|
|
34
|
+
"useImportType": "off",
|
|
35
|
+
"noParameterAssign": "error",
|
|
36
|
+
"useAsConstAssertion": "error",
|
|
37
|
+
"useDefaultParameterLast": "error",
|
|
38
|
+
"useEnumInitializers": "error",
|
|
39
|
+
"useSelfClosingElements": "error",
|
|
40
|
+
"useSingleVarDeclarator": "error",
|
|
41
|
+
"noUnusedTemplateLiteral": "error",
|
|
42
|
+
"useNumberNamespace": "error",
|
|
43
|
+
"noUselessElse": "error"
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
"vcs": {
|
|
48
|
+
"enabled": true,
|
|
49
|
+
"clientKind": "git",
|
|
50
|
+
"useIgnoreFile": true
|
|
51
|
+
}
|
|
52
|
+
}
|
package/bun.lock
ADDED
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
{
|
|
2
|
+
"lockfileVersion": 1,
|
|
3
|
+
"configVersion": 1,
|
|
4
|
+
"workspaces": {
|
|
5
|
+
"": {
|
|
6
|
+
"name": "@adaptive-ds/optimize-images-web",
|
|
7
|
+
"dependencies": {
|
|
8
|
+
"image-size": "^2.0.2",
|
|
9
|
+
"sharp": "^0.34.5",
|
|
10
|
+
},
|
|
11
|
+
"devDependencies": {
|
|
12
|
+
"@biomejs/biome": "^2.4.11",
|
|
13
|
+
"@types/bun": "latest",
|
|
14
|
+
"@types/node": "^25.6.0",
|
|
15
|
+
"typescript": "^6.0.2",
|
|
16
|
+
},
|
|
17
|
+
},
|
|
18
|
+
},
|
|
19
|
+
"packages": {
|
|
20
|
+
"@biomejs/biome": ["@biomejs/biome@2.4.11", "", { "optionalDependencies": { "@biomejs/cli-darwin-arm64": "2.4.11", "@biomejs/cli-darwin-x64": "2.4.11", "@biomejs/cli-linux-arm64": "2.4.11", "@biomejs/cli-linux-arm64-musl": "2.4.11", "@biomejs/cli-linux-x64": "2.4.11", "@biomejs/cli-linux-x64-musl": "2.4.11", "@biomejs/cli-win32-arm64": "2.4.11", "@biomejs/cli-win32-x64": "2.4.11" }, "bin": { "biome": "bin/biome" } }, "sha512-nWxHX8tf3Opb/qRgZpBbsTOqOodkbrkJ7S+JxJAruxOReaDPPmPuLBAGQ8vigyUgo0QBB+oQltNEAvalLcjggA=="],
|
|
21
|
+
|
|
22
|
+
"@biomejs/cli-darwin-arm64": ["@biomejs/cli-darwin-arm64@2.4.11", "", { "os": "darwin", "cpu": "arm64" }, "sha512-wOt+ed+L2dgZanWyL6i29qlXMc088N11optzpo10peayObBaAshbTcxKUchzEMp9QSY8rh5h6VfAFE3WTS1rqg=="],
|
|
23
|
+
|
|
24
|
+
"@biomejs/cli-darwin-x64": ["@biomejs/cli-darwin-x64@2.4.11", "", { "os": "darwin", "cpu": "x64" }, "sha512-gZ6zR8XmZlExfi/Pz/PffmdpWOQ8Qhy7oBztgkR8/ylSRyLwfRPSadmiVCV8WQ8PoJ2MWUy2fgID9zmtgUUJmw=="],
|
|
25
|
+
|
|
26
|
+
"@biomejs/cli-linux-arm64": ["@biomejs/cli-linux-arm64@2.4.11", "", { "os": "linux", "cpu": "arm64" }, "sha512-avdJaEElXrKceK0va9FkJ4P5ci3N01TGkc6ni3P8l3BElqbOz42Wg2IyX3gbh0ZLEd4HVKEIrmuVu/AMuSeFFA=="],
|
|
27
|
+
|
|
28
|
+
"@biomejs/cli-linux-arm64-musl": ["@biomejs/cli-linux-arm64-musl@2.4.11", "", { "os": "linux", "cpu": "arm64" }, "sha512-+Sbo1OAmlegtdwqFE8iOxFIWLh1B3OEgsuZfBpyyN/kWuqZ8dx9ZEes6zVnDMo+zRHF2wLynRVhoQmV7ohxl2Q=="],
|
|
29
|
+
|
|
30
|
+
"@biomejs/cli-linux-x64": ["@biomejs/cli-linux-x64@2.4.11", "", { "os": "linux", "cpu": "x64" }, "sha512-TagWV0iomp5LnEnxWFg4nQO+e52Fow349vaX0Q/PIcX6Zhk4GGBgp3qqZ8PVkpC+cuehRctMf3+6+FgQ8jCEFQ=="],
|
|
31
|
+
|
|
32
|
+
"@biomejs/cli-linux-x64-musl": ["@biomejs/cli-linux-x64-musl@2.4.11", "", { "os": "linux", "cpu": "x64" }, "sha512-bexd2IklK7ZgPhrz6jXzpIL6dEAH9MlJU1xGTrypx+FICxrXUp4CqtwfiuoDKse+UlgAlWtzML3jrMqeEAHEhA=="],
|
|
33
|
+
|
|
34
|
+
"@biomejs/cli-win32-arm64": ["@biomejs/cli-win32-arm64@2.4.11", "", { "os": "win32", "cpu": "arm64" }, "sha512-RJhaTnY8byzxDt4bDVb7AFPHkPcjOPK3xBip4ZRTrN3TEfyhjLRm3r3mqknqydgVTB74XG8l4jMLwEACEeihVg=="],
|
|
35
|
+
|
|
36
|
+
"@biomejs/cli-win32-x64": ["@biomejs/cli-win32-x64@2.4.11", "", { "os": "win32", "cpu": "x64" }, "sha512-A8D3JM/00C2KQgUV3oj8Ba15EHEYwebAGCy5Sf9GAjr5Y3+kJIYOiESoqRDeuRZueuMdCsbLZIUqmPhpYXJE9A=="],
|
|
37
|
+
|
|
38
|
+
"@emnapi/runtime": ["@emnapi/runtime@1.9.2", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-3U4+MIWHImeyu1wnmVygh5WlgfYDtyf0k8AbLhMFxOipihf6nrWC4syIm/SwEeec0mNSafiiNnMJwbza/Is6Lw=="],
|
|
39
|
+
|
|
40
|
+
"@img/colour": ["@img/colour@1.1.0", "", {}, "sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ=="],
|
|
41
|
+
|
|
42
|
+
"@img/sharp-darwin-arm64": ["@img/sharp-darwin-arm64@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-darwin-arm64": "1.2.4" }, "os": "darwin", "cpu": "arm64" }, "sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w=="],
|
|
43
|
+
|
|
44
|
+
"@img/sharp-darwin-x64": ["@img/sharp-darwin-x64@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-darwin-x64": "1.2.4" }, "os": "darwin", "cpu": "x64" }, "sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw=="],
|
|
45
|
+
|
|
46
|
+
"@img/sharp-libvips-darwin-arm64": ["@img/sharp-libvips-darwin-arm64@1.2.4", "", { "os": "darwin", "cpu": "arm64" }, "sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g=="],
|
|
47
|
+
|
|
48
|
+
"@img/sharp-libvips-darwin-x64": ["@img/sharp-libvips-darwin-x64@1.2.4", "", { "os": "darwin", "cpu": "x64" }, "sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg=="],
|
|
49
|
+
|
|
50
|
+
"@img/sharp-libvips-linux-arm": ["@img/sharp-libvips-linux-arm@1.2.4", "", { "os": "linux", "cpu": "arm" }, "sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A=="],
|
|
51
|
+
|
|
52
|
+
"@img/sharp-libvips-linux-arm64": ["@img/sharp-libvips-linux-arm64@1.2.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw=="],
|
|
53
|
+
|
|
54
|
+
"@img/sharp-libvips-linux-ppc64": ["@img/sharp-libvips-linux-ppc64@1.2.4", "", { "os": "linux", "cpu": "ppc64" }, "sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA=="],
|
|
55
|
+
|
|
56
|
+
"@img/sharp-libvips-linux-riscv64": ["@img/sharp-libvips-linux-riscv64@1.2.4", "", { "os": "linux", "cpu": "none" }, "sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA=="],
|
|
57
|
+
|
|
58
|
+
"@img/sharp-libvips-linux-s390x": ["@img/sharp-libvips-linux-s390x@1.2.4", "", { "os": "linux", "cpu": "s390x" }, "sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ=="],
|
|
59
|
+
|
|
60
|
+
"@img/sharp-libvips-linux-x64": ["@img/sharp-libvips-linux-x64@1.2.4", "", { "os": "linux", "cpu": "x64" }, "sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw=="],
|
|
61
|
+
|
|
62
|
+
"@img/sharp-libvips-linuxmusl-arm64": ["@img/sharp-libvips-linuxmusl-arm64@1.2.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw=="],
|
|
63
|
+
|
|
64
|
+
"@img/sharp-libvips-linuxmusl-x64": ["@img/sharp-libvips-linuxmusl-x64@1.2.4", "", { "os": "linux", "cpu": "x64" }, "sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg=="],
|
|
65
|
+
|
|
66
|
+
"@img/sharp-linux-arm": ["@img/sharp-linux-arm@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-arm": "1.2.4" }, "os": "linux", "cpu": "arm" }, "sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw=="],
|
|
67
|
+
|
|
68
|
+
"@img/sharp-linux-arm64": ["@img/sharp-linux-arm64@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-arm64": "1.2.4" }, "os": "linux", "cpu": "arm64" }, "sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg=="],
|
|
69
|
+
|
|
70
|
+
"@img/sharp-linux-ppc64": ["@img/sharp-linux-ppc64@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-ppc64": "1.2.4" }, "os": "linux", "cpu": "ppc64" }, "sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA=="],
|
|
71
|
+
|
|
72
|
+
"@img/sharp-linux-riscv64": ["@img/sharp-linux-riscv64@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-riscv64": "1.2.4" }, "os": "linux", "cpu": "none" }, "sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw=="],
|
|
73
|
+
|
|
74
|
+
"@img/sharp-linux-s390x": ["@img/sharp-linux-s390x@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-s390x": "1.2.4" }, "os": "linux", "cpu": "s390x" }, "sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg=="],
|
|
75
|
+
|
|
76
|
+
"@img/sharp-linux-x64": ["@img/sharp-linux-x64@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-x64": "1.2.4" }, "os": "linux", "cpu": "x64" }, "sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ=="],
|
|
77
|
+
|
|
78
|
+
"@img/sharp-linuxmusl-arm64": ["@img/sharp-linuxmusl-arm64@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-linuxmusl-arm64": "1.2.4" }, "os": "linux", "cpu": "arm64" }, "sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg=="],
|
|
79
|
+
|
|
80
|
+
"@img/sharp-linuxmusl-x64": ["@img/sharp-linuxmusl-x64@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-linuxmusl-x64": "1.2.4" }, "os": "linux", "cpu": "x64" }, "sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q=="],
|
|
81
|
+
|
|
82
|
+
"@img/sharp-wasm32": ["@img/sharp-wasm32@0.34.5", "", { "dependencies": { "@emnapi/runtime": "^1.7.0" }, "cpu": "none" }, "sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw=="],
|
|
83
|
+
|
|
84
|
+
"@img/sharp-win32-arm64": ["@img/sharp-win32-arm64@0.34.5", "", { "os": "win32", "cpu": "arm64" }, "sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g=="],
|
|
85
|
+
|
|
86
|
+
"@img/sharp-win32-ia32": ["@img/sharp-win32-ia32@0.34.5", "", { "os": "win32", "cpu": "ia32" }, "sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg=="],
|
|
87
|
+
|
|
88
|
+
"@img/sharp-win32-x64": ["@img/sharp-win32-x64@0.34.5", "", { "os": "win32", "cpu": "x64" }, "sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw=="],
|
|
89
|
+
|
|
90
|
+
"@types/bun": ["@types/bun@1.3.12", "", { "dependencies": { "bun-types": "1.3.12" } }, "sha512-DBv81elK+/VSwXHDlnH3Qduw+KxkTIWi7TXkAeh24zpi5l0B2kUg9Ga3tb4nJaPcOFswflgi/yAvMVBPrxMB+A=="],
|
|
91
|
+
|
|
92
|
+
"@types/node": ["@types/node@25.6.0", "", { "dependencies": { "undici-types": "~7.19.0" } }, "sha512-+qIYRKdNYJwY3vRCZMdJbPLJAtGjQBudzZzdzwQYkEPQd+PJGixUL5QfvCLDaULoLv+RhT3LDkwEfKaAkgSmNQ=="],
|
|
93
|
+
|
|
94
|
+
"bun-types": ["bun-types@1.3.12", "", { "dependencies": { "@types/node": "*" } }, "sha512-HqOLj5PoFajAQciOMRiIZGNoKxDJSr6qigAttOX40vJuSp6DN/CxWp9s3C1Xwm4oH7ybueITwiaOcWXoYVoRkA=="],
|
|
95
|
+
|
|
96
|
+
"detect-libc": ["detect-libc@2.1.2", "", {}, "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ=="],
|
|
97
|
+
|
|
98
|
+
"image-size": ["image-size@2.0.2", "", { "bin": { "image-size": "bin/image-size.js" } }, "sha512-IRqXKlaXwgSMAMtpNzZa1ZAe8m+Sa1770Dhk8VkSsP9LS+iHD62Zd8FQKs8fbPiagBE7BzoFX23cxFnwshpV6w=="],
|
|
99
|
+
|
|
100
|
+
"semver": ["semver@7.7.4", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA=="],
|
|
101
|
+
|
|
102
|
+
"sharp": ["sharp@0.34.5", "", { "dependencies": { "@img/colour": "^1.0.0", "detect-libc": "^2.1.2", "semver": "^7.7.3" }, "optionalDependencies": { "@img/sharp-darwin-arm64": "0.34.5", "@img/sharp-darwin-x64": "0.34.5", "@img/sharp-libvips-darwin-arm64": "1.2.4", "@img/sharp-libvips-darwin-x64": "1.2.4", "@img/sharp-libvips-linux-arm": "1.2.4", "@img/sharp-libvips-linux-arm64": "1.2.4", "@img/sharp-libvips-linux-ppc64": "1.2.4", "@img/sharp-libvips-linux-riscv64": "1.2.4", "@img/sharp-libvips-linux-s390x": "1.2.4", "@img/sharp-libvips-linux-x64": "1.2.4", "@img/sharp-libvips-linuxmusl-arm64": "1.2.4", "@img/sharp-libvips-linuxmusl-x64": "1.2.4", "@img/sharp-linux-arm": "0.34.5", "@img/sharp-linux-arm64": "0.34.5", "@img/sharp-linux-ppc64": "0.34.5", "@img/sharp-linux-riscv64": "0.34.5", "@img/sharp-linux-s390x": "0.34.5", "@img/sharp-linux-x64": "0.34.5", "@img/sharp-linuxmusl-arm64": "0.34.5", "@img/sharp-linuxmusl-x64": "0.34.5", "@img/sharp-wasm32": "0.34.5", "@img/sharp-win32-arm64": "0.34.5", "@img/sharp-win32-ia32": "0.34.5", "@img/sharp-win32-x64": "0.34.5" } }, "sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg=="],
|
|
103
|
+
|
|
104
|
+
"tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="],
|
|
105
|
+
|
|
106
|
+
"typescript": ["typescript@6.0.2", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ=="],
|
|
107
|
+
|
|
108
|
+
"undici-types": ["undici-types@7.19.2", "", {}, "sha512-qYVnV5OEm2AW8cJMCpdV20CDyaN3g0AjDlOGf1OW4iaDEx8MwdtChUp4zu4H0VP3nDRF/8RKWH+IPp9uW0YGZg=="],
|
|
109
|
+
}
|
|
110
|
+
}
|
package/bunfig.toml
ADDED
package/cliff.toml
ADDED
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
# git-cliff ~ configuration file
|
|
2
|
+
# https://git-cliff.org/docs/configuration
|
|
3
|
+
|
|
4
|
+
[git]
|
|
5
|
+
conventional_commits = true
|
|
6
|
+
require_conventional = false
|
|
7
|
+
filter_unconventional = false
|
|
8
|
+
tag_pattern = "v[0-9].*"
|
|
9
|
+
# Split commits on newlines, treating each line as an individual commit.
|
|
10
|
+
split_commits = false
|
|
11
|
+
# An array of regex based parsers to modify commit messages prior to further processing.
|
|
12
|
+
commit_preprocessors = [
|
|
13
|
+
# Replace issue numbers with link templates to be updated in `changelog.postprocessors`.
|
|
14
|
+
#{ pattern = '\((\w+\s)?#([0-9]+)\)', replace = "([#${2}](<REPO>/issues/${2}))"},
|
|
15
|
+
# Check spelling of the commit message using https://github.com/crate-ci/typos.
|
|
16
|
+
# If the spelling is incorrect, it will be fixed automatically.
|
|
17
|
+
#{ pattern = '.*', replace_command = 'typos --write-changes -' },
|
|
18
|
+
]
|
|
19
|
+
# Prevent commits that are breaking from being excluded by commit parsers.
|
|
20
|
+
protect_breaking_commits = false
|
|
21
|
+
# An array of regex based parsers for extracting data from the commit message.
|
|
22
|
+
# Assigns commits to groups.
|
|
23
|
+
# Optionally sets the commit's scope and can decide to exclude commits from further processing.
|
|
24
|
+
commit_parsers = [
|
|
25
|
+
{ message = "^feat", group = "<!-- 0 -->🚀 Features" },
|
|
26
|
+
{ message = "^fix", group = "<!-- 1 -->🐛 Bug Fixes" },
|
|
27
|
+
{ message = "^doc", group = "<!-- 3 -->📚 Documentation" },
|
|
28
|
+
{ message = "^perf", group = "<!-- 4 -->⚡ Performance" },
|
|
29
|
+
{ message = "^refactor", group = "<!-- 2 -->🚜 Refactor" },
|
|
30
|
+
{ message = "^style", group = "<!-- 5 -->🎨 Styling" },
|
|
31
|
+
{ message = "^test", group = "<!-- 6 -->🧪 Testing" },
|
|
32
|
+
{ message = "^ci", group = "<!-- 12 -->🤖 CI" },
|
|
33
|
+
{ message = "^ops", group = "<!-- 11 -->🏭 Operations" },
|
|
34
|
+
{ message = "^chore\\(release\\): prepare for", skip = true },
|
|
35
|
+
{ message = "^chore\\(deps.*\\)", skip = true },
|
|
36
|
+
{ message = "^chore\\(pr\\)", skip = true },
|
|
37
|
+
{ message = "^chore\\(pull\\)", skip = true },
|
|
38
|
+
{ message = "^chore", group = "<!-- 7 -->⚙️ Miscellaneous Tasks" },
|
|
39
|
+
{ body = ".*security", group = "<!-- 8 -->🛡️ Security" },
|
|
40
|
+
{ message = "^revert", group = "<!-- 9 -->◀️ Revert" },
|
|
41
|
+
{ message = ".*", group = "<!-- 10 -->💼 Other" },
|
|
42
|
+
]
|
|
43
|
+
# Exclude commits that are not matched by any commit parser.
|
|
44
|
+
filter_commits = false
|
|
45
|
+
# An array of link parsers for extracting external references, and turning them into URLs, using regex.
|
|
46
|
+
link_parsers = []
|
|
47
|
+
# Include only the tags that belong to the current branch.
|
|
48
|
+
use_branch_tags = false
|
|
49
|
+
# Order releases topologically instead of chronologically.
|
|
50
|
+
topo_order = false
|
|
51
|
+
# Order releases topologically instead of chronologically.
|
|
52
|
+
topo_order_commits = true
|
|
53
|
+
# Order of commits in each group/release within the changelog.
|
|
54
|
+
# Allowed values: newest, oldest
|
|
55
|
+
sort_commits = "oldest"
|
|
56
|
+
# Process submodules commits
|
|
57
|
+
recurse_submodules = false
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
[changelog]
|
|
61
|
+
# A Tera template to be rendered for each release in the changelog.
|
|
62
|
+
# See https://keats.github.io/tera/docs/#introduction
|
|
63
|
+
body = """
|
|
64
|
+
{% if version %}\
|
|
65
|
+
## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }}
|
|
66
|
+
{% else %}\
|
|
67
|
+
## [unreleased]
|
|
68
|
+
{% endif %}\
|
|
69
|
+
{% for group, commits in commits | group_by(attribute="group") %}
|
|
70
|
+
### {{ group | striptags | trim | upper_first }}
|
|
71
|
+
{% for commit in commits %}
|
|
72
|
+
- {% if commit.scope %}*({{ commit.scope }})* {% endif %}\
|
|
73
|
+
{% if commit.breaking %}[**breaking**] {% endif %}\
|
|
74
|
+
{{ commit.message | upper_first }}\
|
|
75
|
+
{% endfor %}
|
|
76
|
+
{% endfor %}
|
|
77
|
+
"""
|
|
78
|
+
# Remove leading and trailing whitespaces from the changelog's body.
|
|
79
|
+
trim = true
|
|
80
|
+
# Render body even when there are no releases to process.
|
|
81
|
+
render_always = true
|
|
82
|
+
# An array of regex based postprocessors to modify the changelog.
|
|
83
|
+
postprocessors = [
|
|
84
|
+
# Replace the placeholder <REPO> with a URL.
|
|
85
|
+
#{ pattern = '<REPO>', replace = "https://github.com/orhun/git-cliff" },
|
|
86
|
+
]
|
|
87
|
+
# render body even when there are no releases to process
|
|
88
|
+
# render_always = true
|
|
89
|
+
# output file path
|
|
90
|
+
# output = "test.md"
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1029.714111328125 744.0092926025391" width="1029.714111328125" height="744.0092926025391"><!-- svg-source:excalidraw --><metadata><!-- payload-type:application/vnd.excalidraw+json --><!-- payload-version:2 --><!-- payload-start -->eyJ2ZXJzaW9uIjoiMSIsImVuY29kaW5nIjoiYnN0cmluZyIsImNvbXByZXNzZWQiOnRydWUsImVuY29kZWQiOiJ4nO1daXPiSFx1MDAxMv0+v8Lh/TrUVNZdXHUwMDEzsbHh225cdTAwMWJf4KsnJlx1MDAxY1x1MDAxOGSs5lx1MDAxMFx1MDAwNuFrY/77ZmFcdTAwMWJcdTAwMDGSQGBwuzdwx3i6hYA68uV7mZVV+u9vKyur4XPLW/1zZdV7KpfqfqVdelxc/d1df/DaXHUwMDFkP2jiS6z3707QbZd7d96FYavz51x1MDAxZn80Su2aXHUwMDE3tuqlskdcdTAwMWX8TrdU74Tdilx1MDAxZpBy0PjDXHUwMDBmvUbnP+73Yanh/btcdTAwMTU0KmGbRF+S8yp+XHUwMDE4tF+/y6t7XHKvXHUwMDE5dvDT/8J/r6z8t/dcdTAwMWJf8SvuXHUwMDFiv2/ozfv8j/bl7s2tKe35V9Xtb53eW3s3vXeh7ZXDUrNa96KXnvA6Z4JQbUBQJo02lqr+y8/4co5xTbSSjEltqLHK9F9+9CvhnftcdTAwMDRcdTAwMGVcdTAwMDQkXHUwMDE1XGZAuLv6N9x5fvUuxDtcdTAwMTRcdTAwMDVcIrVS+OGaXHUwMDFipm3/ltdcdTAwMDb9uUL7VzphO6h5XHUwMDFiQVx1MDAxZLuPrf5cdTAwMTd47k/U5ptSuVZtXHUwMDA33Walf0/YLjU7rVJcdTAwMWJcdTAwMDcpuu/Wr9dcdTAwMGLhc+/TcXpwXFxXR77j4q39MHI97V34pdW7ptfpXGa9J2iVyn7ohlxuaNRcdTAwMGLXwtZepTdnf0dtauNs77lJa3br9f5lv1nx3FSslvJD39asvH3b+4RHs8nfrvxcdTAwMTO13fPcXHUwMDA3XHUwMDBiLjTTXHUwMDEwTUJkqVx1MDAwMKBHL1x1MDAxZlx1MDAwNs2e2TJKtbVW8OiNfmdcdTAwMTMtL+x96i1ar1x1MDAxN02Ba9rWgFVGPey2KqXXt4DWinElKJWa9V+v+83aaPfrQblcdTAwMTZ9y29cdTAwMDPdXHUwMDFhMfQj7/txLVfbuz+zXHKjNtdcdTAwMGXyu7vZXHI95yydKc6pVNgsxeSwoXOwRFx1MDAxYokmzikwZSWPWbpQilx1MDAxOKlcdTAwMDGHXHUwMDE4lFx1MDAxZcRC39S1g1x1MDAxM7XMMoWA4lx1MDAxNpamnmzqh1x1MDAxZjZ1XHUwMDEwYFx1MDAwNPqcXHUwMDAxj1x1MDAxNVx1MDAxObtiLM3WXHUwMDAxp1GAZfCVbf3bMzsvyoeLl5eL79VCsVJaV3Qnu62DpUSgR1ZcdTAwMTaMXHUwMDE1klx1MDAwM1x1MDAxYjZ2kIZcdTAwMTilqJRGWjo4XHUwMDE077bONCWIXHUwMDE0g/6fU6GMTrB1IDjMRnHt0Fx1MDAwMkwsbT3Z1o8+bOtcbriSYJPcuuWxq31Lx1x1MDAxOVZKUzaLofdcdTAwMWJcdTAwMTc1c8DwQu8pmpVcdTAwMDG7rT029yvVYv6OXHUwMDA3jedu82nft/Wr1f59//ye/LGvby5cdTAwMWaJ64fb01x1MDAwM77xWFx1MDAwZlx1MDAxZTb904vOzvXwt7x/f6ndXHUwMDBlXHUwMDFls35ut3rWeG5dnctDtu+Hldv87tqBzPa5b3/7JNQnj15cZvVDg/9cbnijiLTcUT+AXHUwMDAxJfhcYt65JFJcbmyv1SjS1IBcdTAwMTJ4XHUwMDA3vGKES2u5lVx1MDAxYS1ccvFcdTAwMWNcdTAwMDf8XHUwMDAwZS5cdTAwMTE+hPDjZIRcdTAwMGbd/U5bXHUwMDE0UDygyEjAslx1MDAxNqlYlkJasOjTXHUwMDE3QFp2XHUwMDFh842s0Vkhdt5vlKregFx1MDAwZbtccpphwX95lZVDV7dLXHK/7kZcXFx1MDAwZX3IWt2vNnv4x/Z67dXBIVxifYyJ+jc0/EplkOvK+KElv+m197KQZtD2q36zVC+mNLzUXHKDU6/z2vSw3fVcdTAwMDZHxdt9R1x1MDAwMVx1MDAxMCbHYDhcXGf1gO9Xg+PAY8WdnUbxx4WegrlccuJQMCrQTuSoSFx1MDAwNUFcXFx1MDAwMGW4XHUwMDE2XHUwMDE0ozWMqeK8LTQyOzI6Q5CD0Vwigbhcclx1MDAxMINcIlxiXGbGdVxccL2EdVxurE8+TtxcdTAwMDK9sZY0pkZ7XHLUqVx1MDAwMZnCKVx1MDAxNFx1MDAxMj6TurdrL0/li/x1bqNcXKjpR2/7vFLf/7+j2OReZqJYi1x1MDAxNEudXHUwMDEztkikxlx1MDAwZUtqwVx0KEBcdTAwMGV2ikui5l5cdTAwMTLsPJF4Olx1MDAwNcG6TFx1MDAxM1qOXHUwMDE2XHSYXHUwMDFinLZRtWyllehbXHUwMDE3klx1MDAwM7F8XG7z/cJcdTAwMTQ7gd0+h2KfTmpcdTAwMWSdzyvz/Th//SCKJ2x/aytcdTAwMTOGmURcdTAwMDZcdTAwMTVcdTAwMDY5XHUwMDE0Q1tE48BcXL9mO61cItaARVrUXHUwMDE41lx1MDAwZWQq+9lOZohmwFx1MDAwMe9QQ1x1MDAwNN1HMV+iOFx1MDAwNcWFKVDsUnHMXHUwMDFhnaSTQfHRq+8oNtRyJmBcdTAwMDD8Pym5XHUwMDEzXHUwMDAz8UGAOFu5XHLqXHUwMDE1r73iN1eCltcsXHUwMDA3XHUwMDE1L1x1MDAxOdZm6OokWNe923BcZqjDoJWG6KFcdTAwMWWMwndyk+dcdTAwMDPo/eZ93lx1MDAxZa2t313kitJvXFytXHUwMDFm73e+ZdbMzFx1MDAxOFx1MDAwMlx1MDAxY6nZXHUwMDAyXHUwMDAznH5cdTAwMWTL7Fx1MDAxYUJcdTAwMTnTXGJ+lMwssu0+pq0mXHUwMDFjQFMlXHUwMDA1elx1MDAwMJOU13XZYSmMNVRcdTAwMDOSf2R/S4hcdTAwMGZBvDiHvK7RbiWKJeV1tY2xerSGgdOPUDXR+75eXndn73Dn26E4p61bflI5uV6v7vjrWahcdTAwMGJlXHRiiGp0blx1MDAxONyNmjiz3EV9rvNcdTAwMWFAmXhcXMhcdTAwMTkym9RcdTAwMWO741x1MDAxNulgSVxc01j1WXbiciYjkYWS1CdcdTAwMWaT35FcdTAwMTiwW1xm+n628cZ469RrXHUwMDA0obdSXGKDNoq5lfUu3lx1MDAxZH5h0prQ3vkwVjFYL3XpXHUwMDE1XHUwMDE1nJ2H1r8zN1pcdTAwMDaZcCxcdTAwMTRhWqF+RFx1MDAxMGpuRlx1MDAxMrVcZiShXHUwMDFjvZxCPjJAXHUwMDEzkMyMXCJUa3STQ6mbJYonovh8qiwtV5SCSErc8Hg6p1x1MDAxZkRKo5XR8PNJKIbjR++m44dertVcdTAwMGV+oJDKNXG0vjCMxzd3PijOnVxc7V5cdTAwMWWZJ3NvuSi8bPwo3duD7KUzmqGuVFSh8ujlWkdIXHUwMDE5JFIuRpMuzkS4JpTOYKBCrKZcdTAwMDapu7fIqlwi71x1MDAxZlx1MDAxNc9Igs5cdTAwMDApmyvrXHUwMDE2uyNcdTAwMWJYontcYt1cdTAwMTdcdTAwMWZWnpxqYVx1MDAwMJJcIk6bztxgrWXUsoFcdTAwMTWdhedqb3ZNO3+7/nifb1x1MDAxNbv3dLvlybL/XHTLrG9/+ySxnNzLXGYkK1x1MDAxOCeaoi/mb8iKLYcqopVGLtZcdTAwMTLVsIona1x1MDAwMeU26jGDYpnZlJhwma1Ng+LlNHlcdTAwMWWgTFx1MDAxYpkkl5mRqaBzgVx1MDAxZeWLKeKxclxu+43xbC/nmXunsy+RtZ3Ac4lZ26RcdTAwMWXMh3W/35U21588b3s9/LH90Lk+5XtXPPtcbinikVApMJKVXHUwMDAyXHJcdTAwMDdZdkRCc0tcZkPkolx1MDAxMJNguYrXOriEj8RcdTAwMTeRml2RXHUwMDFleqxcdTAwMDTeXHUwMDA1SoBcdTAwMDOqbdXLKi2LVlPAfvVh3lx1MDAwNWG15JImOlx1MDAwMeTjVOrFQFtcdTAwMGLKZ1sl/ayanuC6ZP21l7MweCpcdTAwMWWdXWzkWa2ShcTQkFx1MDAwNWFGW4MsJVFBwoidgyZcbs1cdTAwMWY0XHUwMDFhO/pCXHUwMDFhZ7FlqDirUX+fgsFQ/Fx0zUEl5SuZSV3iXHUwMDA3aZlAU/v5dajLUHEyad1cdTAwMWRcdTAwMTXZ/qVcdTAwMDc7z+H+9l1BdVT3x172UFFcdFwiOUcsM7cyzUXk6dxwMaVcYkexqTFY1FJRXHUwMDE2rz1fhopzRHfp45Tl5oFJm1xieqA6VbgqyVx1MDAwNVx1MDAxZtqhsfBg8aW7q3KPXHUwMDA3h0Vdbpbl/dXxzk2nkDVY3GhcdTAwMWVvnsN57fHksdC9v71t313Uq18xWEzuZZZgXHUwMDExXHUwMDE0McLipFCnJthwrOgoVLntXHUwMDFjmjNcdTAwMDZ8UKNEsaImXHUwMDFj4Ys0/LpcdTAwMDKZXHUwMDAwzWWsmIbFmymYXHUwMDE2qNKaqaScrFx1MDAxOLPhQ2ohjDFyplx1MDAwNM2kWFFPYb4xon3wK17wtWLFXHREN8q9qT2YXHUwMDBm7bKCf9s4y/ntk/xhWZSO1moln02RoaVcYm2qXGazxiF0hHbRnlxiRpGupo9q/C2WXHUwMDE52oVCvfxx2mWGXHUwMDFhJFCTXFxPq9LraXHu3daHz2NdY4vX8rTq14thRVx1MDAxNNpcdTAwMDH98czDrKxbXHUwMDBiT89vlb5qhe3D+6NcdTAwMGKwXHUwMDFie+H6V2Td5F5mYl1BXHUwMDA0unJQwCR65+FqWiRaXCKtNFx1MDAwNtlcdTAwMTRcXKV6nHRdJZ9bXbGv1bhcdTAwMDO7XHUwMDAwl6Q7XHUwMDExiZUpSFczXHUwMDAwq2ziSqiAVNaVWlx1MDAxYk0pX0RBw8BGuJlJXHUwMDE3g8Uy9tqrfFx1MDAwNdKdQHPJpJvQg/mQ7rN/9VL02OZx80Hahnmq0kOTUKSUvvlUXHUwMDExV1x1MDAxOFx1MDAwMT1YjmxhYVx1MDAxYV/E+Fei4FZGm4RId7nzdG449+bAuKA5hrkmKdA1OrVcdTAwMGWXK025XHUwMDE2cib4z8a4bON74eZi+7pQOTw+qGhcdTAwMWRcbutDVsbNe+WNwkn4XHUwMDEy7rWP91x1MDAwMt64uVxmXHUwMDFiKlx1MDAxYuOO/dxfJn5OXHUwMDFlvVxmTJ6z4PaWakSj5W6z+Uhuy1rChTQuNHZcdTAwMWJT4yX1XG6IO32C9ZLcw/W7SyqfXGLx2+xUjiNLJWibVOCgbCqU3bxh1C1cdTAwMTaRqFZcdTAwMDNcdTAwMDMwK5V/ibB5XHUwMDAyZyYy+Nyj5cuTnbtvt/XnVq1xdXhcdTAwMWFuXHUwMDE2y42D8lx1MDAxNMStXHJRWuhod8uwKFx1MDAwN0aki5dx3jDgZVx0ZVx1MDAxM8vdp3NEdvXj5C0pTpWB5HXVuKJ/R7xFXVx1MDAwNqDlJyapi7d+9/Jsb+N0PX9y1eQv7Y2j0+Bnk/cvXHUwMDEzhiePXlx1MDAxNvI2kjDDpUFBLtDJy+FccnEgKLHS1TByTjXeXHUwMDE0l+tL9u5dnVx1MDAxMeN3U1x1MDAwNOJcXFx1MDAxYqncXHUwMDFlpVx1MDAwNDRblbovxlJcdTAwMTDSZc1cdTAwMTbB3jCF/X5h9p5AnJ/D3uO92IinXHUwMDE5RrE0xHJcdTAwMTCWMvyfpHyYuF1ELcfG3EjJxq08S4lcdTAwMTF1cshNXbFcdOdKKevOzor8xFx1MDAxMtFDiPanQDTTUief6iRV+lxuslx1MDAxNtZlPj8xl10sbT/lrzZcdTAwMTlcdTAwMWNcdTAwMWWtXHUwMDE1nq+3qtxsbS6W7PqXW4E/2va/XHUwMDA2WkhcdTAwMDebS/t///v3xLvT7Nz95GImXHUwMDFlfVqsg52w1Fx1MDAwZddx1v1mdViTvVx1MDAxZNeZJSrAu1x1MDAxYm437Z/Ow9z4g0OPtv/kVY5d34e6jn0kKOrg96FO0eFcdTAwMWaWNFxm6EfLXTeO74NcdTAwMTSpRa9ZmdyV8S5yTl1JnMAxLe9Nw5pziHdeKVx1MDAwNkrs1+Bro57Tq99cdTAwMDSPXHRcdTAwMTbXXGJcdTAwMWW8vP/a4s6FXHUwMDFm3r1cdTAwMDEodmO91Fx0N4JGw1x1MDAwZsOog65cdTAwMDXjlFpcIpSyKDVcdTAwMDDkXHUwMDBmZqVUKNQ4XHUwMDFkWHju+XjGiCtg6G2DtqB5Qp1cdTAwMDJVRGhrjLGgeqdcdTAwMGItlVp2v/5jXG6/3ltwNslx15jj+pCfXHUwMDA1Y3y2nOkkpfahXHUwMDAzSFx1MDAxOFlcdFqh33BcbudcdTAwMGLItVx0SmlUriW2fj6abXx6d5xm40pcdTAwMTKOUTZcIlx1MDAxOVxyZTCyclx1MDAwM8cpJ4Irt1x1MDAxMVx1MDAxZdy5y1x1MDAxMVSj2l5JXGbG6Fxm5f0rnONodlvGNUeeXHUwMDEzgjOml6mWNHDXplx1MDAwMLelOFx1MDAxZiBcdTAwMTJcdTAwMGYmXHUwMDE5PNt6XHUwMDE03dxcdTAwMWHZS5t9om5cdTAwMGIr+fVvQX1rf+vb/Vx1MDAxZb0vfNed419Rt+XSrd39xOz848ptfFx1MDAxOdSA3PGbXHUwMDFkf+BElPF6h2JoZiU6ekfTXHUwMDE03X1E0683oDQ17qxcdTAwMTKquMvW60UouVx1MDAwNYjSuFx1MDAwNFx1MDAxZOlcdTAwMTbqvP9/aZeItlxm0s6d1sxccnNYXHUwMDFiOXn8dVx1MDAwMU1cdTAwMTKX9dFcZu9jksZPXHUwMDA0UKKXglx1MDAxM/hLmqEqt6Wum+j669ldv8JcdTAwMTlQisUrTXviLdXxU1x1MDAwNuBOXllA+ami0VxczyDrgKx0npvlryDpJlxiqVFJXHUwMDE3a/l85Nz4rdHj5ZxcInLcYVx1MDAwMO7pXHUwMDAzXFxbVHSKuUrR+K5EZoD0XHUwMDBltNcoLjTlPCGTXHUwMDBlxFx1MDAxZFx1MDAxZWwlXHUwMDEznErJXHUwMDA2XHUwMDBmOVxc4npcYteNaUrctERxkbyDi7OY0IskXHUwMDFkTpSb0U/c+V/3L8Pntcdv9U16eUXlfrHW5bVfVNKlmbv7iVx1MDAxYvrHNd34bdAzXHSf4T7PonMySbbxJ1svJdvKjJItXHUwMDE5TZkkXHUwMDFiJ9pQ3juqToA2I5vQ3Vx0XHUwMDEzIFx1MDAwNWCAL1xciJ+QjluqtpXZvXszu3dnXHUwMDE0h1ejXHUwMDA0S1x1MDAwZdjTnLtcdTAwMGLV3VraXHUwMDAyXHUwMDBlclL0Q1x1MDAwN0x8IdU2QS99kmpcdTAwMWJfpjFOtWlBXFzWQFlh3LmKali0geSEaUupoIxyiEOYWbdkxFx1MDAxOXD0llYnPVx1MDAxMMpcdTAwMTKLWtA99MxcYlR/NLK3JaKHXHUwMDEwXHUwMDFkTKHXmHu2XHUwMDE2T9l8q9PLmnBcdTAwMDasXHUwMDE0nynX7vKP3U4tbJQ3q/fVm4NdXHUwMDAwj2//inIt1dTdTy5m5Vx1MDAxZlx1MDAxN2tcdTAwMGJYb1xcgOTJpN7G7+74Sbrz11x1MDAxM2vJWMpcIta0XCLMPStcdTAwMGUoY1ZcZjyU73WvmXRcdTAwMGb+Y+B2o2EwXHUwMDAy8bJWo4lwj26gXHUwMDAyRopfllJtomNvTeHYJUVcdTAwMWE2XHTna7pcdTAwMTGG0Yvvfl1zyzlO7EKk2of2d3Oy0m3Vg9KX2GQ2QSaNirWEts9HrsmHbdZ5Wt/NXHUwMDE1fNg629+h14enU1Sp9/aHuUORjDTGKGVHQi+pXHRcdTAwMDKdakZccnXHSrE4nvFcIqHCUlx1MDAwMJa2xYy5XHUwMDEzWzQ3r1x1MDAwN4SpJbzT4H3/4Sp1SzW4qUqKz3h6gMbcVns1uN3+61x1MDAxZP7Vejm73FxytjxRaLb5eVtcXF9eXSY82CDlSSXISO4occ5cdTAwMThTsVPuLGHKur1cdTAwMTZgXHK4h83GrFx1MDAxY0BcdTAwMTONisyCVSOHXHUwMDBlLWlrol23p6At4O7Ad56cYZDpXHUwMDA3k7hHYmu6kI1VXHUwMDFmPFx1MDAwMazVvan75bdHf8yDvFx1MDAxNnT0V0o750NU41x1MDAxZmo2viBbXHUwMDEy97xWw9FLgbR6eE9kzlx1MDAwMNGCg0WOQj1KZcJOKsJRiUpAeuP4Z1DcRLlcdTAwMDVFNJf4XCJcdTAwMDcwWqnlWlBcbpY72bGMjpJyKVx1MDAxM4uyXHUwMDEx52lQllJcdTAwMDBcIn02MupT5VSphULr25l3dVx1MDAxZfCd2uWPx7Z/cGNK9ldMLeTSbd39xKw8+rxYXHUwMDE3M+ZcdTAwMTZcdTAwMTawnPKzyrLHP5BtZcY6JYzDXHUwMDE4aOq2/kvOo6dcdL++SinHSJq6zdxoSFRoUFN27ddLPiSjLYuSXHUwMDAzaol7LCS6XHUwMDE1obiwI1QgJDFaSop8gH6HJVx1MDAxY/24rNvuXZ3R94dT6DjGLf7HXHUwMDEzj7qB9INcXDFcZmGGsdm2y07IP8CHloq+WN32XHUwMDA0QbWYuu3f3pzSaqnVKoQ4wn1viiblV0ZG4vVa6LWiUehdyqNcdTAwMWLdapZu6qOjvfrge4/rcVx1MDAwNP3rtvfjXGK551FcdTAwMWN6vF5k/M9v//xcdTAwMGYpSLXLIn0=<!-- payload-end --></metadata><defs><style class="style-fonts">
|
|
2
|
+
@font-face { font-family: Excalifont; src: url(data:font/woff2;base64,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); }</style></defs><rect x="0" y="0" width="1029.714111328125" height="744.0092926025391" fill="#ffffff"></rect><g stroke-linecap="round" transform="translate(658.3414459228516 92.02067052037273) rotate(0 165.575210571289 300.78834533691395)"><path d="M32 0 C93.4 -2.37, 156.34 -3.39, 299.15 0 M32 0 C101.82 -0.78, 171.75 -1.06, 299.15 0 M299.15 0 C320.27 -0.58, 330.1 10.55, 331.15 32 M299.15 0 C321.12 -2.23, 329.56 8.75, 331.15 32 M331.15 32 C332.1 153.7, 332.59 275.12, 331.15 569.58 M331.15 32 C332.44 145.3, 332.79 258.17, 331.15 569.58 M331.15 569.58 C331.41 589.61, 320.04 599.86, 299.15 601.58 M331.15 569.58 C332.52 591.56, 319.1 599.3, 299.15 601.58 M299.15 601.58 C206.57 598.75, 110.9 600.01, 32 601.58 M299.15 601.58 C201.41 603.6, 103.9 603.82, 32 601.58 M32 601.58 C10.62 601.27, 0.2 591.03, 0 569.58 M32 601.58 C8.42 600.94, -1.58 591.26, 0 569.58 M0 569.58 C-2.55 362.05, -2.18 153.7, 0 32 M0 569.58 C-1.69 421.89, -2.2 273.24, 0 32 M0 32 C0.97 9.88, 11.94 -1.87, 32 0 M0 32 C0.5 9.15, 9.49 -0.2, 32 0" stroke="#1e1e1e" stroke-width="1" fill="none"></path></g><g stroke-linecap="round" transform="translate(10 10) rotate(0 233.4285736083984 362.00464630126953)"><path d="M32 0 C188.97 -0.41, 347.52 0.55, 434.86 0 M32 0 C179.32 -1.44, 325.67 -1.82, 434.86 0 M434.86 0 C455.14 -0.11, 467.41 8.72, 466.86 32 M434.86 0 C454.6 -1.91, 465.17 11.57, 466.86 32 M466.86 32 C467.78 229.21, 466.47 427.71, 466.86 692.01 M466.86 32 C467.29 242.79, 466.98 453.2, 466.86 692.01 M466.86 692.01 C466.42 711.62, 457.38 724.58, 434.86 724.01 M466.86 692.01 C465.47 711.07, 457.37 725.31, 434.86 724.01 M434.86 724.01 C344.56 722.31, 255.94 722.73, 32 724.01 M434.86 724.01 C277.01 724.51, 119.2 724.19, 32 724.01 M32 724.01 C10.87 724.13, -1.95 712.79, 0 692.01 M32 724.01 C9.09 724.36, 2 715.34, 0 692.01 M0 692.01 C1.93 470.12, 2.03 248.43, 0 32 M0 692.01 C-1.59 525.77, -1.07 359.91, 0 32 M0 32 C1.28 8.79, 11.1 -1.32, 32 0 M0 32 C-1.18 10.46, 10.34 -0.85, 32 0" stroke="#1e1e1e" stroke-width="1" fill="none"></path></g><g stroke-linecap="round" transform="translate(143.82113647460938 170.91984044224773) rotate(0 135.02841186523435 35.81143188476562)"><path d="M17.91 0 C81.09 1.71, 146.7 2.37, 252.15 0 M17.91 0 C105.22 -1.01, 192.27 -0.81, 252.15 0 M252.15 0 C264.64 -1.94, 268.67 4.31, 270.06 17.91 M252.15 0 C262.4 0.91, 270.04 6.26, 270.06 17.91 M270.06 17.91 C268.53 29.55, 270.71 38.88, 270.06 53.72 M270.06 17.91 C270.51 30.16, 270.16 42.85, 270.06 53.72 M270.06 53.72 C271.25 66.22, 262.88 69.65, 252.15 71.62 M270.06 53.72 C271.23 66.96, 262.32 73.39, 252.15 71.62 M252.15 71.62 C200.93 72.38, 149.06 71.43, 17.91 71.62 M252.15 71.62 C179.05 72.28, 106.07 72.46, 17.91 71.62 M17.91 71.62 C4.02 71.07, -1.37 65.96, 0 53.72 M17.91 71.62 C7.97 73.62, 0.84 63.71, 0 53.72 M0 53.72 C-0.36 42.31, -0.83 28.36, 0 17.91 M0 53.72 C0.77 39.5, 0.93 25.12, 0 17.91 M0 17.91 C0.44 4.65, 4.95 -0.18, 17.91 0 M0 17.91 C-0.33 5.11, 4.39 0.7, 17.91 0" stroke="#1e1e1e" stroke-width="1" fill="none"></path></g><g transform="translate(247.66957855224607 194.23127232701336) rotate(0 31.179969787597656 12.5)"><text x="31.179969787597656" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">images</text></g><g stroke-linecap="round" transform="translate(151.9212646484375 344.5241800418571) rotate(0 123.93109130859374 40.923309326171875)"><path d="M20.46 0 C82.5 0.84, 142.63 -0.79, 227.4 0 M20.46 0 C76.79 -0.76, 132.01 -0.64, 227.4 0 M227.4 0 C239.57 0.79, 247.85 7.07, 247.86 20.46 M227.4 0 C240.86 1.69, 246.68 4.76, 247.86 20.46 M247.86 20.46 C249.15 36.98, 248.21 50.13, 247.86 61.38 M247.86 20.46 C248.37 30.36, 247.17 38.7, 247.86 61.38 M247.86 61.38 C248.88 76.16, 239.5 83.39, 227.4 81.85 M247.86 61.38 C246.1 74.06, 241.12 83.35, 227.4 81.85 M227.4 81.85 C157.06 81.49, 87.01 81.51, 20.46 81.85 M227.4 81.85 C167.66 81.71, 109.05 82.09, 20.46 81.85 M20.46 81.85 C8.56 83.59, 0.73 73.34, 0 61.38 M20.46 81.85 C8.37 80.96, 0.71 74.46, 0 61.38 M0 61.38 C1.92 43.92, -1.13 30.64, 0 20.46 M0 61.38 C-0.04 50.05, -0.77 39.95, 0 20.46 M0 20.46 C-0.28 6.08, 5.45 0.6, 20.46 0 M0 20.46 C-0.32 7.41, 9.03 -0.27, 20.46 0" stroke="#1e1e1e" stroke-width="1" fill="none"></path></g><g transform="translate(244.6723861694336 372.947489368029) rotate(0 31.179969787597656 12.5)"><text x="31.179969787597656" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">images</text></g><g transform="translate(79.51492309570312 32.80397282750164) rotate(0 164.36065673828125 17.5)"><text x="0" y="24.668" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="28px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Local folder in opencode</text></g><g stroke-linecap="round" transform="translate(622.4024047851562 11.763170825548514) rotate(0 198.65585327148438 359.87744903564464)"><path d="M32 0 C128.4 1.57, 223.64 0.25, 365.31 0 M32 0 C104.28 -0.81, 176.51 -0.39, 365.31 0 M365.31 0 C385.62 -1.79, 398.5 11.05, 397.31 32 M365.31 0 C386.71 1.39, 399.4 10.97, 397.31 32 M397.31 32 C394.92 237.7, 395.83 441.97, 397.31 687.75 M397.31 32 C398.34 164.24, 398.35 295.69, 397.31 687.75 M397.31 687.75 C397.38 710.4, 387.46 721.59, 365.31 719.75 M397.31 687.75 C396.95 709.36, 386.56 720.67, 365.31 719.75 M365.31 719.75 C266.25 718.66, 166.65 719.05, 32 719.75 M365.31 719.75 C260.43 721.15, 155.51 721.46, 32 719.75 M32 719.75 C11.29 719.26, 1.75 708.12, 0 687.75 M32 719.75 C11.77 721.74, -1.85 707.56, 0 687.75 M0 687.75 C0.28 459.52, 0.5 230.53, 0 32 M0 687.75 C0.1 496.98, 0.32 306.06, 0 32 M0 32 C1.92 10.43, 12.59 -1.55, 32 0 M0 32 C1.28 9.55, 11.09 1.75, 32 0" stroke="#1e1e1e" stroke-width="1" fill="none"></path></g><g transform="translate(672.5140380859375 35.923657630100934) rotate(0 163.47866821289062 17.5)"><text x="0" y="24.668" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="28px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Remote Storage Bucket</text></g><g transform="translate(680.5396194458008 114.74795018345867) rotate(0 143.03857421875 17.5)"><text x="0" y="24.668" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="28px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">website-project-name</text></g><g stroke-linecap="round" transform="translate(706.2893676757812 172.78776036412273) rotate(0 120.98544311523432 32.73078918457031)"><path d="M16.37 0 C65.36 1.35, 113.18 1.22, 225.61 0 M16.37 0 C95.03 1.83, 172.67 2.19, 225.61 0 M225.61 0 C238.33 0.27, 242.23 4.15, 241.97 16.37 M225.61 0 C236.01 -1.98, 243.34 6.11, 241.97 16.37 M241.97 16.37 C242.78 22.67, 243.19 30.52, 241.97 49.1 M241.97 16.37 C242.39 25.73, 241.83 33.37, 241.97 49.1 M241.97 49.1 C241.9 60.8, 236.46 65.15, 225.61 65.46 M241.97 49.1 C242.2 60.14, 234.27 64.83, 225.61 65.46 M225.61 65.46 C178.75 67.72, 127.32 68.26, 16.37 65.46 M225.61 65.46 C171.63 64.58, 116.53 65.77, 16.37 65.46 M16.37 65.46 C3.84 64.13, 0.97 59.22, 0 49.1 M16.37 65.46 C6.92 63.31, 0.5 58.49, 0 49.1 M0 49.1 C-0.71 39.58, 0.63 32.53, 0 16.37 M0 49.1 C0.65 37.67, 0.24 27.31, 0 16.37 M0 16.37 C0.37 6.98, 4.47 -1.43, 16.37 0 M0 16.37 C1.9 3.86, 6.63 1.13, 16.37 0" stroke="#1e1e1e" stroke-width="1" fill="none"></path></g><g transform="translate(757.9648895263672 193.01854954869304) rotate(0 69.30992126464847 12.5)"><text x="69.30992126464844" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">image-originals</text></g><g stroke-linecap="round" transform="translate(42.20896911621094 89.95746861607586) rotate(0 198.79255676269528 305.06564331054693)"><path d="M32 0 C132.88 -0.52, 230.55 0.98, 365.59 0 M32 0 C139.13 -1.27, 245.11 -1.8, 365.59 0 M365.59 0 C386.48 -1.72, 398.78 11.23, 397.59 32 M365.59 0 C385.53 -2.27, 398.76 11.97, 397.59 32 M397.59 32 C398.93 153.8, 399.79 275.87, 397.59 578.13 M397.59 32 C397.23 246.11, 397.23 459.84, 397.59 578.13 M397.59 578.13 C397.79 599.58, 384.97 609.58, 365.59 610.13 M397.59 578.13 C396 599.82, 388.92 612.13, 365.59 610.13 M365.59 610.13 C252.79 612.07, 140.7 612.84, 32 610.13 M365.59 610.13 C281.15 611.63, 198.14 611.81, 32 610.13 M32 610.13 C11.94 608.26, 0.44 598.15, 0 578.13 M32 610.13 C9.49 609.93, -0.33 598.61, 0 578.13 M0 578.13 C-0.46 452.54, -0.75 326.19, 0 32 M0 578.13 C-1.14 456.97, -1.41 334.91, 0 32 M0 32 C1.65 9.28, 11.69 0.98, 32 0 M0 32 C1.07 9.56, 9.6 -0.8, 32 0" stroke="#1e1e1e" stroke-width="1" fill="none"></path></g><g transform="translate(99.9753189086914 112.13437901646648) rotate(0 143.03857421875 17.5)"><text x="0" y="24.668" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="28px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">website-project-name</text></g><g stroke-linecap="round" transform="translate(698.7971038818359 596.1843744388298) rotate(0 120.98544311523432 32.73078918457031)"><path d="M16.37 0 C68.76 -1.05, 121.54 0.51, 225.61 0 M16.37 0 C81.74 0.44, 148.04 1.46, 225.61 0 M225.61 0 C235.31 -1.98, 242.99 6.59, 241.97 16.37 M225.61 0 C234.74 1.77, 240.21 4.49, 241.97 16.37 M241.97 16.37 C244.02 25.98, 242.42 36.15, 241.97 49.1 M241.97 16.37 C242.06 27.55, 240.99 38.34, 241.97 49.1 M241.97 49.1 C240.6 60.31, 238.26 67.2, 225.61 65.46 M241.97 49.1 C242.81 58.06, 238.06 64.58, 225.61 65.46 M225.61 65.46 C155.48 67.93, 88.59 65.65, 16.37 65.46 M225.61 65.46 C177.33 63.91, 128.12 64.15, 16.37 65.46 M16.37 65.46 C4.43 65.28, -0.28 59.26, 0 49.1 M16.37 65.46 C3.88 66.16, -0.32 60.59, 0 49.1 M0 49.1 C-1.51 37.25, -0.93 23.55, 0 16.37 M0 49.1 C0.99 36.09, 0.67 24.97, 0 16.37 M0 16.37 C0.93 4.49, 4.53 -0.7, 16.37 0 M0 16.37 C2.23 6.1, 5.09 1.17, 16.37 0" stroke="#1e1e1e" stroke-width="1" fill="none"></path></g><g transform="translate(751.1126327514648 616.4151636234001) rotate(0 68.6699142456055 12.5)"><text x="68.66991424560547" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">video-originals</text></g><g stroke-linecap="round" transform="translate(705.1039886474609 440.150988208361) rotate(0 120.98544311523432 32.73078918457031)"><path d="M16.37 0 C79.93 -1.45, 141.87 -2.07, 225.61 0 M16.37 0 C60.6 -1.4, 106.36 -0.02, 225.61 0 M225.61 0 C234.98 1.54, 240.44 4.61, 241.97 16.37 M225.61 0 C236.59 1.5, 242.91 7.57, 241.97 16.37 M241.97 16.37 C242.81 25.62, 241.7 35.18, 241.97 49.1 M241.97 16.37 C240.96 26.53, 242.52 37.27, 241.97 49.1 M241.97 49.1 C242.7 58.32, 237.86 64.69, 225.61 65.46 M241.97 49.1 C242.68 59.44, 238.53 64.35, 225.61 65.46 M225.61 65.46 C151.64 64.82, 79.34 65.1, 16.37 65.46 M225.61 65.46 C181.97 64.16, 139.12 63.91, 16.37 65.46 M16.37 65.46 C4.08 66.07, -0.28 60.52, 0 49.1 M16.37 65.46 C7.66 65.19, 2.21 58.22, 0 49.1 M0 49.1 C1.68 36.48, -1.27 27.48, 0 16.37 M0 49.1 C0.3 41.07, -0.63 33.66, 0 16.37 M0 16.37 C1.94 6.02, 5.13 1.02, 16.37 0 M0 16.37 C1.11 7.05, 5.34 0.04, 16.37 0" stroke="#1e1e1e" stroke-width="1" fill="none"></path></g><g transform="translate(748.6895217895508 460.3817773929313) rotate(0 77.39990997314456 12.5)"><text x="77.39990997314453" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">video-processed</text></g><g stroke-linecap="round" transform="translate(138.2200927734375 605.8203556281478) rotate(0 135.02841186523435 35.811431884765625)"><path d="M17.91 0 C89.76 1.44, 165 -0.58, 252.15 0 M17.91 0 C64.38 -0.47, 111.51 -1.47, 252.15 0 M252.15 0 C264.16 1.31, 270.88 7.8, 270.06 17.91 M252.15 0 C263.73 0.28, 269.97 6.89, 270.06 17.91 M270.06 17.91 C270.12 26.61, 269.45 37.84, 270.06 53.72 M270.06 17.91 C270.73 28.36, 271.04 40.11, 270.06 53.72 M270.06 53.72 C270.68 65.16, 265.84 70.65, 252.15 71.62 M270.06 53.72 C271.16 67.64, 262.24 70.09, 252.15 71.62 M252.15 71.62 C168.98 73.25, 87.86 72.02, 17.91 71.62 M252.15 71.62 C183.38 71.14, 115.65 71.1, 17.91 71.62 M17.91 71.62 C7.89 71.39, 1.93 64.1, 0 53.72 M17.91 71.62 C7.24 70.51, 0.42 67.4, 0 53.72 M0 53.72 C-1.13 45.76, 1.24 36.68, 0 17.91 M0 53.72 C1.14 44.98, 0 36.18, 0 17.91 M0 17.91 C0.97 7.35, 5.87 0.04, 17.91 0 M0 17.91 C-1.31 6.12, 5.25 0.82, 17.91 0" stroke="#1e1e1e" stroke-width="1" fill="none"></path></g><g transform="translate(242.70854187011716 629.1317875129134) rotate(0 30.539962768554688 12.5)"><text x="30.539962768554688" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">videos</text></g><g stroke-linecap="round" transform="translate(155.58859252929688 442.3224003058822) rotate(0 123.93109130859374 40.923309326171875)"><path d="M20.46 0 C93.15 2.02, 170.35 -0.26, 227.4 0 M20.46 0 C98.51 1.35, 176.87 1.59, 227.4 0 M227.4 0 C240.73 0.24, 247.79 7.62, 247.86 20.46 M227.4 0 C240.98 -0.36, 248.1 6.96, 247.86 20.46 M247.86 20.46 C248.06 30.48, 249.49 37.76, 247.86 61.38 M247.86 20.46 C248.45 29.03, 249.01 37.61, 247.86 61.38 M247.86 61.38 C248.82 76.75, 239.43 80.51, 227.4 81.85 M247.86 61.38 C248.97 74.13, 242.51 79.69, 227.4 81.85 M227.4 81.85 C160.65 80.65, 93.56 79.69, 20.46 81.85 M227.4 81.85 C159.91 82.21, 91.57 81.63, 20.46 81.85 M20.46 81.85 C7.93 80.88, 0.37 76.55, 0 61.38 M20.46 81.85 C5.69 80.2, 1.9 73.43, 0 61.38 M0 61.38 C-1.16 46.09, -0.9 34.58, 0 20.46 M0 61.38 C0.55 48.65, 0.02 34.54, 0 20.46 M0 20.46 C-1.14 6.95, 6.2 0.71, 20.46 0 M0 20.46 C1.18 6.68, 7.16 2.12, 20.46 0" stroke="#1e1e1e" stroke-width="1" fill="none"></path></g><g transform="translate(248.97972106933594 470.74570963205406) rotate(0 30.539962768554688 12.5)"><text x="30.539962768554688" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">videos</text></g><g mask="url(#mask-MecCSQtztIrPIo3mbXtm6)" stroke-linecap="round"><g transform="translate(275.3318153709122 600.3203556281478) rotate(0 0.941878278848435 -35.32566833496094)"><path d="M0 0 C1.8 -26.32, 0.08 -49.53, 1.88 -70.65 M0 0 C0.24 -25.71, 1.05 -51.25, 1.88 -70.65" stroke="#1e1e1e" stroke-width="1" fill="none"></path></g><g transform="translate(275.3318153709122 600.3203556281478) rotate(0 0.941878278848435 -35.32566833496094)"><path d="M9.53 -46.85 C8.25 -56.8, 3.18 -63.55, 1.88 -70.65 M9.53 -46.85 C6.48 -55.36, 3.81 -63.77, 1.88 -70.65" stroke="#1e1e1e" stroke-width="1" fill="none"></path></g><g transform="translate(275.3318153709122 600.3203556281478) rotate(0 0.941878278848435 -35.32566833496094)"><path d="M-7.56 -47.5 C-2.84 -57.09, -1.9 -63.62, 1.88 -70.65 M-7.56 -47.5 C-4.36 -55.93, -0.79 -64.11, 1.88 -70.65" stroke="#1e1e1e" stroke-width="1" fill="none"></path></g></g><mask id="mask-MecCSQtztIrPIo3mbXtm6"><rect x="0" y="0" fill="#fff" width="377.21557192860905" height="770.9716922980697"></rect><rect x="223.0337491917528" y="552.4946872931869" fill="#000" width="106.47988891601562" height="25" opacity="1"></rect></mask><g transform="translate(223.0337491917528 552.4946872931869) rotate(0 53.23994445800781 12.5)"><text x="53.23994445800781" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">2. optimize</text></g><g mask="url(#mask-CnPDV1VkwQwSuqffrhWlg)" stroke-linecap="round"><g transform="translate(699.5944366455078 633.2226841193587) rotate(0 -142.90876007080078 4.128684372161388)"><path d="M0 0 C-62.88 2.54, -126.32 3.53, -285.82 8.26 M0 0 C-89.2 3.32, -178.27 6.06, -285.82 8.26" stroke="#1e1e1e" stroke-width="1" fill="none"></path></g><g transform="translate(699.5944366455078 633.2226841193587) rotate(0 -142.90876007080078 4.128684372161388)"><path d="M-262.53 -0.83 C-266.46 2.03, -271.14 2.92, -285.82 8.26 M-262.53 -0.83 C-269.82 1.94, -276.96 4.99, -285.82 8.26" stroke="#1e1e1e" stroke-width="1" fill="none"></path></g><g transform="translate(699.5944366455078 633.2226841193587) rotate(0 -142.90876007080078 4.128684372161388)"><path d="M-262.13 16.27 C-266.08 15.3, -270.85 12.38, -285.82 8.26 M-262.13 16.27 C-269.55 13.71, -276.81 11.42, -285.82 8.26" stroke="#1e1e1e" stroke-width="1" fill="none"></path></g></g><mask id="mask-CnPDV1VkwQwSuqffrhWlg"><rect x="0" y="0" fill="#fff" width="1085.4119567871094" height="741.4800528636815"></rect><rect x="524.6457061767578" y="624.8513684915201" fill="#000" width="64.07994079589844" height="25" opacity="1"></rect></mask><g transform="translate(524.6457061767578 624.8513684915201) rotate(0 32.03997039794922 12.5)"><text x="32.03997039794922" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">1. sync</text></g><g mask="url(#mask-cO4_vfRL3CwlovDiRWsG_)" stroke-linecap="round"><g transform="translate(700.7893676757812 205.54791753843256) rotate(0 -140.70570373535168 0.5838476215276387)"><path d="M0 0 C-95.75 0, -191.26 0.42, -281.41 1.17 M0 0 C-80.8 0.25, -160.64 0.91, -281.41 1.17" stroke="#1e1e1e" stroke-width="1" fill="none"></path></g><g transform="translate(700.7893676757812 205.54791753843256) rotate(0 -140.70570373535168 0.5838476215276387)"><path d="M-257.95 -7.46 C-265.63 -4.63, -273.07 -1.66, -281.41 1.17 M-257.95 -7.46 C-265.59 -5.27, -271.98 -2.38, -281.41 1.17" stroke="#1e1e1e" stroke-width="1" fill="none"></path></g><g transform="translate(700.7893676757812 205.54791753843256) rotate(0 -140.70570373535168 0.5838476215276387)"><path d="M-257.89 9.64 C-265.75 6.64, -273.21 3.78, -281.41 1.17 M-257.89 9.64 C-265.57 6.97, -271.97 4.99, -281.41 1.17" stroke="#1e1e1e" stroke-width="1" fill="none"></path></g></g><mask id="mask-cO4_vfRL3CwlovDiRWsG_"><rect x="0" y="0" fill="#fff" width="1082.2007751464846" height="306.71561278148783"></rect><rect x="528.0436935424804" y="193.6317651599602" fill="#000" width="64.07994079589844" height="25" opacity="1"></rect></mask><g transform="translate(528.0436935424804 193.6317651599602) rotate(0 32.03997039794922 12.5)"><text x="32.03997039794922" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">1. sync</text></g><g mask="url(#mask-ktRVf67YptrNqOW19CItB)" stroke-linecap="round"><g transform="translate(408.95077514648415 483.06490032158354) rotate(0 145.3266067504884 -4.9937913992398535)"><path d="M0 0 C85.86 -2.75, 172.3 -7.32, 290.65 -9.99 M0 0 C79.87 -2.4, 158.65 -6.41, 290.65 -9.99" stroke="#1e1e1e" stroke-width="1" fill="none"></path></g><g transform="translate(408.95077514648415 483.06490032158354) rotate(0 145.3266067504884 -4.9937913992398535)"><path d="M267.44 -0.71 C273.97 -3.25, 281.28 -8.16, 290.65 -9.99 M267.44 -0.71 C274.69 -2.41, 280.51 -6.65, 290.65 -9.99" stroke="#1e1e1e" stroke-width="1" fill="none"></path></g><g transform="translate(408.95077514648415 483.06490032158354) rotate(0 145.3266067504884 -4.9937913992398535)"><path d="M266.91 -17.81 C273.66 -15.28, 281.13 -15.12, 290.65 -9.99 M266.91 -17.81 C274.19 -14.84, 280.15 -14.43, 290.65 -9.99" stroke="#1e1e1e" stroke-width="1" fill="none"></path></g></g><mask id="mask-ktRVf67YptrNqOW19CItB"><rect x="0" y="0" fill="#fff" width="799.6039886474609" height="593.0524831200632"></rect><rect x="510.5474166870116" y="465.5711089223437" fill="#000" width="87.45993041992188" height="25" opacity="1"></rect></mask><g transform="translate(510.5474166870116 465.5711089223437) rotate(0 43.72996520996094 12.5)"><text x="43.72996520996094" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">3. upload</text></g><g stroke-linecap="round" transform="translate(64.16462707519554 272.675824220516) rotate(0 176.02450561523435 132.28692626953125)"><path d="M32 0 C120.93 1.08, 210.92 3.43, 320.05 0 M32 0 C143.98 1.55, 255.19 1.65, 320.05 0 M320.05 0 C343.13 -0.97, 353.01 12.39, 352.05 32 M320.05 0 C339.53 -1.53, 353.16 9.77, 352.05 32 M352.05 32 C349.18 104.04, 350.2 177.67, 352.05 232.57 M352.05 32 C350.69 84.95, 351.67 137.34, 352.05 232.57 M352.05 232.57 C353.98 252.36, 342.49 263.61, 320.05 264.57 M352.05 232.57 C352.47 255.66, 340.25 262.93, 320.05 264.57 M320.05 264.57 C210.61 266.39, 98.97 264.99, 32 264.57 M320.05 264.57 C243.56 265.57, 167.67 265.71, 32 264.57 M32 264.57 C10.57 264.61, -1.14 254.04, 0 232.57 M32 264.57 C9.95 265.4, 1.18 253.76, 0 232.57 M0 232.57 C-1.55 168.89, -1.08 105.05, 0 32 M0 232.57 C-0.16 163.32, -0.01 95.7, 0 32 M0 32 C0.45 12.25, 10.69 -0.06, 32 0 M0 32 C1.03 10.32, 9.26 -1.75, 32 0" stroke="#1e1e1e" stroke-width="1" fill="none"></path></g><g transform="translate(80.13694763183594 300.5160341814535) rotate(0 58.88994598388672 12.5)"><text x="0" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">public folder</text></g><g mask="url(#mask-ugUmypYV5N2KitdfMHAL5)" stroke-linecap="round"><g transform="translate(278.74342242390276 248.04270421177898) rotate(0 -1.1707758481818473 48.36768465593832)"><path d="M0 0 C1.35 23.13, -2.62 46.11, -2.34 96.74 M0 0 C0.56 24.82, -0.45 51.48, -2.34 96.74" stroke="#1e1e1e" stroke-width="1" fill="none"></path></g><g transform="translate(278.74342242390276 248.04270421177898) rotate(0 -1.1707758481818473 48.36768465593832)"><path d="M-9.95 72.92 C-6.41 79.09, -8.08 85.22, -2.34 96.74 M-9.95 72.92 C-7.01 78.68, -5.41 86.26, -2.34 96.74" stroke="#1e1e1e" stroke-width="1" fill="none"></path></g><g transform="translate(278.74342242390276 248.04270421177898) rotate(0 -1.1707758481818473 48.36768465593832)"><path d="M7.14 73.6 C6.72 79.77, 1.1 85.73, -2.34 96.74 M7.14 73.6 C5.61 79.15, 2.73 86.55, -2.34 96.74" stroke="#1e1e1e" stroke-width="1" fill="none"></path></g></g><mask id="mask-ugUmypYV5N2KitdfMHAL5"><rect x="0" y="0" fill="#fff" width="381.08497412026645" height="444.7780735236556"></rect><rect x="224.3327021177131" y="283.9103888677173" fill="#000" width="106.47988891601562" height="25" opacity="1"></rect></mask><g transform="translate(224.3327021177131 283.9103888677173) rotate(0 53.37261078818949 12.5)"><text x="53.23994445800781" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">2. optimize</text></g></svg>
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 791.6916503906249 494.36415364919594" width="791.6916503906249" height="494.36415364919594"><!-- svg-source:excalidraw --><metadata><!-- payload-type:application/vnd.excalidraw+json --><!-- payload-version:2 --><!-- payload-start -->eyJ2ZXJzaW9uIjoiMSIsImVuY29kaW5nIjoiYnN0cmluZyIsImNvbXByZXNzZWQiOnRydWUsImVuY29kZWQiOiJ4nO1ba1PbSFx1MDAxNv2eX0ExXHUwMDFmN1a6b7+namtcdTAwMGJcYlx1MDAxMJLAsoFcdMlsTVGyJYyCLDmSzGsq/31vXHUwMDBisCxLsmUweWxZVFHQLbX6ce8959xu/f1ibW09u1x1MDAxOfrrv6+t+9c9N1xmvMS9Wn9pyy/9JFxy4lxiqyD/P41HSS+/8zzLhunvr15cctzkws+GodvzncsgXHUwMDFkuWGajbwgdnrx4FWQ+YP0X/b3gTvw/zmMXHUwMDA3XpY4xUs6vlx1MDAxN2RxcvcuP/RcdTAwMDd+lKXY+n/x/7W1v/PfWFx1MDAxM3j2jZu7TN6qvb2tP3XsfaD8jVx1MDAxOZI/80fzm1x1MDAxZYaQ+ddZUXqNRVJcdTAwMTNHaS2ENsJcdTAwMThJx5U3WKmYw5VcdTAwMTKcXG7BiFZcdTAwMTTGtVeBl53jXHUwMDFk1HBHXG6ppFZGa9BcdTAwMTO3nPtB/zzDe5hcdTAwMTiXuVE/tFx1MDAxZCHjkjRL4lx1MDAwYn8rXHUwMDBlcaTYwd+ob3+KPnbd3kU/iUeRN74nS9woXHUwMDFkulx0zkdx31lcdTAwMTCGR9lN3jquXHUwMDA0TuH61DtOXHUwMDFlujxV3vRcdTAwMTS+tH9cdTAwMWX5aVp6Jlx1MDAxZbq9ILOTQ0kxXG7bw+Gely/PX0WfXHUwMDEyXFzYPbs+0ShcZsfFQeT5durXXVp6W+Tdv610d+r7tlx1MDAwNUmFXHUwMDAxSUGNK1xu82OSTZdcdTAwMWXEUW6KXHUwMDFjjOGGXHUwMDEyU7w9fY3GlOWNnqFB+sVU2y5sT1x1MDAxOFoxktHQc+9cdTAwMWWhSklgkjBcXO1iXcMgupjueFx1MDAxOPcuat6SmyBcdTAwMGV+b+D2/bVhXHUwMDEy9+ygizmLo+wouLV9XHUwMDA3XSrdcVx1MDAwN0FoJ16U2tpcYoO+nYT10D+bsFx1MDAwN5yHLEBXXHUwMDFhV2fxsKjtYXtuXHUwMDEw+Ul1deIk6Fx1MDAwN5FcdTAwMWJcdTAwMWXP7qc7yuJcdTAwMGZ+etfTLFx1MDAxOfmTc+G/ebB96oDIK769rHPb5JjdvFx1MDAxYuzsvr1cdTAwMWGKjcFccvU/XHUwMDFjXHUwMDFkxlW3Tfxeduc6Jd9Fd82dXHUwMDBmXHUwMDE4XHUwMDAx4JJcdTAwMTTzZaeJUepwbrhmgGtcdTAwMDVEyKr3cnBcdTAwMTh6rWKCXHQqJNR4r8RcdTAwMThgOEiQRjCKr+Erb673Zqj35oclL9aT3Zd8m3ZyKlx1MDAxOSE42VDxZ1tJWaObU0lcZv5wXoSHXHUwMDA1/HzcwaKrTZgxYbuf1N4g8n35xXN7e5tsJ4tHbzfXx/d9e1nf7N3D/Ouh7p59XHUwMDBlR597XXpLLuWt6Xwsv+Xh/W6SxFdt2yWyv9ntvf5887WbnPT3Lnb6wf5uu3bv/2pcbnpUIUgqwvWko89cdHozPL9+9lpcdTAwMDA2JUBcdTAwMWPJKVx1MDAwNS04IcyUnZ5hpZGScsmERliu+Dxwh1NO5ET0XHUwMDFl+zqskLrBt9lcdTAwMDJIXHJaUoPRssaHXHUwMDExi1x1MDAxYl2YUE1cdONsqVB9b7WaLmC1XHUwMDE1qE6TXj1Ak1LpPIDuYWf9ZFx1MDAwNkRcdTAwMGZcdTAwMDLPm8S4MkrPXHUwMDAzy2ngLvV6OXB9XHUwMDA122+32KXUXHUwMDA3n69O986YXHUwMDFlRIO91nCN/NpcdTAwMDGM8Fx1MDAxY7FcdTAwMTRhVFx1MDAxN9HcTlx1MDAxYeK3gyxcdTAwMWN5tlFoXHS8qH3wXFxGjGMs9cqhWlx1MDAxMFJcdTAwMDD62IO1ckAzppGj4Xu0Wjl0g0Pzp4O1MYyg19ZScoqu3Fxm1oZcdTAwMTngoIqhPTtYb31ccrbkbu8w3PD/+HR+SFx1MDAwZXbebVx1MDAxY/xosP6D7vf3vTfQOz05Pn5PyO3b6OT4Z1x1MDAwNOv62WtcdTAwMDHWklx1MDAxOUdcdTAwMTKgQqF6U4pNubyhjlwieFx1MDAwMYpr7KyquDxcdTAwMDCGXGahUFav0HpcdTAwMDHnXHUwMDE27dFcdTAwMWHNhGtcdTAwMWIua9FaN/mwRu9FzTRcdTAwMTHDl1xi1rCA1VbA2lx1MDAwYtJs7dXaeTZcYtf+sdZLU/xcdTAwMWRYXHLbILK/L4bPQdBpXGZvM5jlQPvsXHUwMDE4N1x1MDAxNYdKPm5cdTAwMTDWXHUwMDExuDlcdTAwMTdcdTAwMDI00YU8zvm4JijCmeLCaFx1MDAxNNmM1Ihwylx1MDAxY0q5MVxuhVx1MDAxZnL2wqTGnq64g4xcdTAwMWVB/y7HVsSJld+X/F62XHUwMDA1dWhcdTAwMDR1QaRS1OjaeEArUD/GdFxcOkMphvlnXGJcYlx1MDAwYsHYuHhcdTAwMThcdTAwMDfTlKH4a60wmfyf8d9/vay9u9Nopfaats+itVxuTqeZm2SbuGRB1C8vzX2Ku1xy18e7XHUwMDA3sZdcdTAwMWJZnHSDScaDhnvte4d27KWh41x1MDAxOFE1cyYptatcdTAwMGJcYrqlXHRwXHUwMDA0KOCEMimRf1x1MDAwM6V1M4IhsjeyU0oq9uNH3vxRzY5+j1x1MDAxY1x1MDAxNZfIXHUwMDBmcO65soK/SJraizqE3iXvNWFcdTAwMTJ1XHUwMDA1W3BY+XJt2KB37rtcdTAwMTXPw0FP1k1HRz/sxlc1ljmIL/394G446UmQnd/7QuXG0E2zrXgwXGKyrFx1MDAxOL3twYxAvusnyXX2Jbr5cLIpXmt6SqPtqLVGY1x1MDAxMlx1MDAxY6FAoLxcdTAwMDLOKS+gOFx1MDAwZlFcXFlcdTAwMDXGXHUwMDA1gFx1MDAwNjSl6n5cYsZcdTAwMGVHXHUwMDFhKlx1MDAwNWGmPsdcIrmjtTGoz1xmujabaGNcdTAwMTXMS8FcXD1ZoVx0LqxHm6KDXHUwMDEzXHUwMDAyjWgyXTxcdTAwMGXmhlNcdTAwMDaIXHUwMDAzj1xu5uP+LSTQTi6j/iVcXFx1MDAxY3S+qvDg3fnRXHUwMDFiPdzfbSuk2H78XHUwMDFlds8uT+KL4LqXXHUwMDFkXHUwMDFlXHUwMDFivX20XHUwMDE0IZVv9UjCXHUwMDE3oaQznLN+lC2EXHUwMDE0p8ZhXFxjqFx1MDAxM1x1MDAxYem6Klx1MDAwYikqXHUwMDE1Olx1MDAxNcVV01xm1Vx1MDAxNkykPVx1MDAxZVx1MDAxY1Ncbu2gKTCOXHUwMDBiSzFcdTAwMTDqqmeu9FSTK+r2eopKbqHG8FpcdTAwMDI1sXk07XOMgyGCT2xcdTAwMTYva6dyQfOtKKrEXHUwMDFmxJmPMuTK76ZB5neGSfxcdTAwMDXho1x1MDAxM+G0YXEuSDpcdTAwMGbSJcVcdTAwMTJqgFxc21xic4qPTGw7/jjdNVx1MDAwN1x1MDAxNad11/KGvFx1MDAxY3U2O8DNUmdcdTAwMTK5qWFAhSZKXHUwMDEwNeHjdrZcdTAwMDFZreTYa9DIaymvbpdQ0Fx1MDAwZVZJg3FFalRcdTAwMDbVuGGkQ4BpgVx1MDAwNswoUqxcdTAwMTWiN4RcdTAwMTGzXHUwMDA0eVx1MDAwNkxcdCFZPaTLxnyNwXVBXHL+PVx1MDAxMf3qw9mx+/H29JTvXHUwMDFlyZNURbdp2nle5H0u7dfkXHUwMDAz9qpYf9FcXGWELcXf7GA1qVdcdTAwMWNU67mqUyBcdTAwMDV2rnBva6Xu0DJyxyh5t1+Sp1p1xbZaSbfu0c6tvP7a+XRL9lx1MDAwN5dvPu9+2X/r1fWpg52yXHUwMDAyUnCF8yWAKG4qnaKVTvx6QqvevttwOSZcdTAwMWOkYVx1MDAwNjVcdTAwMTRKbm3Kx1bQwbFWXHUwMDEwQZAtMFFlclRcdTAwMTJcdTAwMDeshmdMcTQ9XnCKXHUwMDE1lZtcdTAwMWKDN9pTOdSo2nBTu79VLSwyYUpIatRy97GBXHSD0VtcdTAwMTVr/VxiXCJcdTAwMTdcdTAwMGazYIBMJP2JXHUwMDEy4nOYzTQxa1x1MDAxZcJyiNbsMDc/e8IsUCCXolxcINsqjCTPhdv9a8IooVgnuajZ7kIwodiIXHUwMDAwcZc+qdnhVjhcdTAwMDKCrSiWXHUwMDFmN1x1MDAxNavjaFxynr7Zlm3N2uHGXHRGZK07ykJJ9YTLOFx1MDAwNqCaI5JS8ajtscfRrWPv+OT66+DK69+ciP3Td65cdTAwMTl2u99hJ3pmu09IzMxs95c55la/Km1IXHUwMDAy55ZHKVx1MDAwM1x1MDAxMllcdTAwMTRcdTAwMDJRWbgh+DtcdTAwMThcdTAwMDVsJVx1MDAwN1wiXHUwMDEwb6o8wdJcZlx1MDAxY01+WGZFXHUwMDEx2lx1MDAwN46t9lx1MDAxNFx1MDAwMThcdTAwMTFKqfpkXHUwMDBmbUywXG6a77HBc+yemydcdTAwMWR1XHUwMDFijrph0HvIcPxcdTAwMTRcZmFcdTAwMGUkTzOExlx1MDAxMSyHIMyOlLMyMYJKRyCnJ8JcYuBMT5FcdTAwMDMtXHUwMDFkXHUwMDE0vJxqw1Cp65pPTSg4ymiKRFx1MDAxMFUm3lV3WF07XFygpMDQoJmYXHUwMDA0rpWPl3z89dNTMUjJKUC9PFCyeXNFolxuXHUwMDE3XHUwMDE411x1MDAxZnX6bVx1MDAxZWyZSaP+IdmSZjO1V8VAi+YqwNwyWzI3M/GYTWXGMaxcdTAwMGJcZtJcblU64aVcdTAwMTlwpFx1MDAwMEDY1Vx1MDAwNOxJVVwi6qbkp9wql4xryjm1+1x1MDAxMyDo5Kiog3yWXHUwMDFizlxyXHUwMDEzRFx1MDAwYi3+/3fKNy7fg1x1MDAwYlx1MDAwNztcdTAwMWb9hHbizrvDq/DdaVx1MDAxYm6mqP2GXHUwMDAw7Vx1MDAwM1x1MDAwM4D9KqhcdTAwMTTIcXZcdTAwMWRcdTAwMGXIz4zmTFx0wqtcdTAwMTlcdTAwMWPOXHUwMDFj1HdGgpLotVxc1uTUV+ysKXJvL7BcdTAwMTenwSCFhurngbaSN8o3oFxc4sI98oDys4ToXHUwMDA3ftZcdTAwMWRcdTAwMDWht1xmVvZMX1x1MDAwYk71bzmca7bam7n7JYXDXHUwMDEwa0FKzXHyy8dZkGc5XFxcIkpJjcGPTGzOXHUwMDE2XHRcdTAwMTniWH5vJGNcblGrJlx1MDAxZlx1MDAwM1x1MDAwZaC3XHUwMDEzXHUwMDAzmlx1MDAxMYWIRlae2+C5O+09l5P8rIOu/bTANHIroFRKKlx1MDAxNfuOn1x1MDAwMV5s71x1MDAxY/7n4HhcdTAwMTBcdTAwMWbuZW9BXHUwMDFjvtlcZuDfi+dcdTAwMWJ+PHFrtHV7dapm/lMyt1x1MDAxMqchjiDkWVx1MDAwZTI+x/HMJ/f812Ng9b7ThoGBxMhNUSlcdTAwMDPYXGbXdHKMOlpIqVx1MDAwMGOBsVx1MDAxY6sqplGI4POw+rJksVx1MDAxOL67XHUwMDAw+1L22ElD9lx1MDAxY1x1MDAxYclcdTAwMTdcdTAwMTJiIVFcdTAwMWY+KoTPy409afus7yNcdTAwMDXCRu8yS2thkGbLYGJPzY/NYUfTXGZt5ihcdTAwMTbmay/ug9O6O1x1MDAxY1x1MDAxZWXY7DhoooVcdTAwMDXe1IzclWX+sJiNvGhcdTAwMWaj5XbkdsPp2V+/XGb8q82qQ/12ll9cdTAwMTZm88hincnPXHUwMDEzON9efPtcdTAwMWb/y21tIn0=<!-- payload-end --></metadata><defs><style class="style-fonts">
|
|
2
|
+
@font-face { font-family: Excalifont; src: url(data:font/woff2;base64,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); }</style></defs><rect x="0" y="0" width="791.6916503906249" height="494.36415364919594" fill="#ffffff"></rect><g transform="translate(328.2160339355469 10) rotate(0 97.32838439941406 17.5)"><text x="0" y="24.668" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="28px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Image process</text></g><g stroke-linecap="round" transform="translate(609.0841979980466 247.97194173513344) rotate(0 71.19143676757807 31.74713134765622)"><path d="M15.87 0 C43.11 1.96, 65.96 -0.28, 126.51 0 M15.87 0 C53.52 1.08, 91.12 0.96, 126.51 0 M126.51 0 C138.62 -0.28, 141.39 7, 142.38 15.87 M126.51 0 C135.94 -1.78, 143.26 5.64, 142.38 15.87 M142.38 15.87 C141.36 22.69, 143.83 27.62, 142.38 47.62 M142.38 15.87 C141.71 27.05, 143.49 37.22, 142.38 47.62 M142.38 47.62 C144.25 58.93, 135.28 64.61, 126.51 63.49 M142.38 47.62 C142.51 57.53, 138.22 65.79, 126.51 63.49 M126.51 63.49 C82.47 66, 38.18 65.37, 15.87 63.49 M126.51 63.49 C91.75 63.17, 56.91 63.21, 15.87 63.49 M15.87 63.49 C5.56 63.91, 0.57 57.14, 0 47.62 M15.87 63.49 C3.78 62.86, -1.78 56.93, 0 47.62 M0 47.62 C-0.69 38.75, 2.08 33.62, 0 15.87 M0 47.62 C-1 39.38, 0.13 29.07, 0 15.87 M0 15.87 C-1.4 6.55, 3.61 -1.3, 15.87 0 M0 15.87 C-0.04 6.81, 5.69 1.38, 15.87 0" stroke="#1e1e1e" stroke-width="1" fill="none"></path></g><g transform="translate(668.0686035156248 267.2190730827897) rotate(0 12.207031250000057 12.5)"><text x="12.20703125" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">src</text></g><g stroke-linecap="round" transform="translate(246.69052124023415 397.0807674187272) rotate(0 154.96801757812506 43.641693115234375)"><path d="M21.82 0 C115.88 0.1, 207.88 1.28, 288.12 0 M21.82 0 C116.55 -0.99, 209.69 -0.21, 288.12 0 M288.12 0 C301.66 -1.55, 310.7 7.57, 309.94 21.82 M288.12 0 C300.43 1.62, 308.87 5.84, 309.94 21.82 M309.94 21.82 C310.88 37.41, 311.2 47.78, 309.94 65.46 M309.94 21.82 C311.24 37.8, 309.4 53.61, 309.94 65.46 M309.94 65.46 C310.05 79.43, 303.64 89.28, 288.12 87.28 M309.94 65.46 C312.17 78.52, 304.85 87.16, 288.12 87.28 M288.12 87.28 C189.04 87.98, 89.85 87.86, 21.82 87.28 M288.12 87.28 C222.12 86.43, 156.14 85.85, 21.82 87.28 M21.82 87.28 C5.96 86.73, -1.54 78.91, 0 65.46 M21.82 87.28 C5.98 86.57, 2.29 79.1, 0 65.46 M0 65.46 C-0.8 55.55, 1.08 42.46, 0 21.82 M0 65.46 C-0.81 49.9, -0.95 32.44, 0 21.82 M0 21.82 C-0.04 8.59, 7.62 1.2, 21.82 0 M0 21.82 C0.85 6.42, 8.15 -1.94, 21.82 0" stroke="#1e1e1e" stroke-width="1" fill="none"></path></g><g transform="translate(287.02963256835915 428.22246053396157) rotate(0 114.62890625 12.5)"><text x="114.62890625" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">dist / html + css + images</text></g><g stroke-linecap="round"><g transform="translate(646.9859205036698 316.96620443044594) rotate(0 -56.55749871129365 37.30728149414085)"><path d="M-0.01 0.64 C-18.72 13.26, -94.49 62.82, -113.19 75.12 M-1.47 -0.07 C-20.27 12.24, -95.67 60.64, -114.18 73.26" stroke="#1e1e1e" stroke-width="1" fill="none"></path></g><g transform="translate(646.9859205036698 316.96620443044594) rotate(0 -56.55749871129365 37.30728149414085)"><path d="M-99.27 53.19 C-101.65 57.58, -105.23 63.74, -114.18 73.26 M-99.27 53.19 C-104.13 58.28, -107.51 64.95, -114.18 73.26" stroke="#1e1e1e" stroke-width="1" fill="none"></path></g><g transform="translate(646.9859205036698 316.96620443044594) rotate(0 -56.55749871129365 37.30728149414085)"><path d="M-89.86 67.47 C-94.28 68.65, -99.98 71.6, -114.18 73.26 M-89.86 67.47 C-97.34 68.56, -103.42 71.14, -114.18 73.26" stroke="#1e1e1e" stroke-width="1" fill="none"></path></g></g><mask></mask><g stroke-linecap="round" transform="translate(10 84.45891072927407) rotate(0 385.84582519531244 32.44496154785156)"><path d="M16.22 0 C237.97 0.79, 458.94 -0.21, 755.47 0 M16.22 0 C301.32 2.35, 585.72 2.58, 755.47 0 M755.47 0 C765.35 -1.25, 772.07 6.63, 771.69 16.22 M755.47 0 C764.98 0.78, 773.62 6.55, 771.69 16.22 M771.69 16.22 C772.16 24.78, 772.61 27.8, 771.69 48.67 M771.69 16.22 C772.2 28.77, 772.68 38.66, 771.69 48.67 M771.69 48.67 C773.59 59.38, 767.74 64.43, 755.47 64.89 M771.69 48.67 C772.64 59.77, 766.04 65.3, 755.47 64.89 M755.47 64.89 C546.89 63.65, 339.24 63.78, 16.22 64.89 M755.47 64.89 C572.65 63.86, 390.22 63.95, 16.22 64.89 M16.22 64.89 C7.4 64.1, -1.14 61.46, 0 48.67 M16.22 64.89 C7.11 64.47, 0.81 61.22, 0 48.67 M0 48.67 C-1.54 40.4, 1.02 33.26, 0 16.22 M0 48.67 C0.18 41.64, 0.38 33.05, 0 16.22 M0 16.22 C0.77 3.72, 3.78 -1.83, 16.22 0 M0 16.22 C-0.26 6.15, 4.65 0.74, 16.22 0" stroke="#1e1e1e" stroke-width="1" fill="none"></path></g><g transform="translate(66.77615356445312 104.40387227712563) rotate(0 329.0696716308593 12.5)"><text x="329.0696716308594" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">remote / website-project-name / image-originals / 1920x1080_webp</text></g><g mask="url(#mask-3MoL2GfvWokixctPT98ES)" stroke-linecap="round"><g transform="translate(322.3596330506583 150.1632613211277) rotate(0 -64.37134510843595 48.01192714655916)"><path d="M-0.6 1.03 C-22.31 16.9, -108.06 79.23, -129.34 95.09 M1.29 0.52 C-20.1 16.53, -105.26 79.96, -126.95 96.14" stroke="#1e1e1e" stroke-width="1" fill="none"></path></g><g transform="translate(322.3596330506583 150.1632613211277) rotate(0 -64.37134510843595 48.01192714655916)"><path d="M-113.22 75.24 C-116.71 82.04, -125.13 91.67, -126.95 96.14 M-113.22 75.24 C-118.21 81.3, -121.88 89.12, -126.95 96.14" stroke="#1e1e1e" stroke-width="1" fill="none"></path></g><g transform="translate(322.3596330506583 150.1632613211277) rotate(0 -64.37134510843595 48.01192714655916)"><path d="M-103 88.96 C-110.31 90.54, -122.59 95.01, -126.95 96.14 M-103 88.96 C-111.08 90.76, -117.97 94.26, -126.95 96.14" stroke="#1e1e1e" stroke-width="1" fill="none"></path></g></g><mask id="mask-3MoL2GfvWokixctPT98ES"><rect x="0" y="0" fill="#fff" width="551.1023232675302" height="346.187115614246"></rect><rect x="177.8783712552107" y="185.6751884676868" fill="#000" width="160.21983337402344" height="25" opacity="1"></rect></mask><g transform="translate(177.8783712552107 185.67518846768684) rotate(0 80.45443541456007 12.817787592560052)"><text x="80.10991668701172" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">optimizes images</text></g><g stroke-linecap="round" transform="translate(11.170349121093523 246.4255599975586) rotate(0 148.0681762695313 35.60015869140628)"><path d="M17.8 0 C83.16 -2.35, 149.17 -1.54, 278.34 0 M17.8 0 C79.28 -1.01, 142.33 -0.88, 278.34 0 M278.34 0 C288.33 1.16, 297.82 6.22, 296.14 17.8 M278.34 0 C292.35 0.84, 294.05 7.22, 296.14 17.8 M296.14 17.8 C298.03 30.62, 294.73 41.46, 296.14 53.4 M296.14 17.8 C296.81 28.42, 296.29 38.97, 296.14 53.4 M296.14 53.4 C295.77 64.23, 289.3 70.23, 278.34 71.2 M296.14 53.4 C296.44 65.75, 290.86 69.98, 278.34 71.2 M278.34 71.2 C216.44 68.69, 155.82 71.19, 17.8 71.2 M278.34 71.2 C211.09 73.12, 142.94 73.87, 17.8 71.2 M17.8 71.2 C4.16 72.62, 0.48 63.96, 0 53.4 M17.8 71.2 C4.32 72.64, -1.94 63.77, 0 53.4 M0 53.4 C0.96 43.53, -0.98 32.94, 0 17.8 M0 53.4 C0.18 46.04, -0.04 38.36, 0 17.8 M0 17.8 C1.61 5.18, 7.09 -1.28, 17.8 0 M0 17.8 C0.64 5.53, 4.03 -0.09, 17.8 0" stroke="#1e1e1e" stroke-width="1" fill="none"></path></g><g transform="translate(91.49926757812477 269.52571868896484) rotate(0 67.7392578125 12.5)"><text x="67.7392578125" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">public / images</text></g><g stroke-linecap="round"><g transform="translate(164.02388092802448 323.1258773803711) rotate(0 56.39907999164666 34.227445019178276)"><path d="M-0.56 -0.75 C18.47 10.64, 94.25 57.59, 113.02 69.19 M1.35 1.47 C20.35 12.45, 93.92 56.58, 112.2 67.45" stroke="#1e1e1e" stroke-width="1" fill="none"></path></g><g transform="translate(164.02388092802448 323.1258773803711) rotate(0 56.39907999164666 34.227445019178276)"><path d="M87.64 62.75 C91.41 64.19, 98.86 63.64, 112.2 67.45 M87.64 62.75 C94.95 64.77, 104.93 65.91, 112.2 67.45" stroke="#1e1e1e" stroke-width="1" fill="none"></path></g><g transform="translate(164.02388092802448 323.1258773803711) rotate(0 56.39907999164666 34.227445019178276)"><path d="M96.41 48.07 C98.51 52.45, 104.18 54.87, 112.2 67.45 M96.41 48.07 C100.91 55.04, 107.96 61.08, 112.2 67.45" stroke="#1e1e1e" stroke-width="1" fill="none"></path></g></g><mask></mask><g transform="translate(361.84523010253884 349.94579829066333) rotate(0 21.769981384277344 12.5)"><text x="0" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">build</text></g><g mask="url(#mask-06gBbcDYyqbrWgIkFgiMG)" stroke-linecap="round"><g transform="translate(312.806701660156 281.99078525641926) rotate(0 145.3887481689453 -1.1116546415378252)"><path d="M0 0 C93.22 1.78, 186.19 -1.58, 290.78 -2.22 M0 0 C104.71 -0.83, 207.36 -1.48, 290.78 -2.22" stroke="#1e1e1e" stroke-width="1" fill="none"></path></g><g transform="translate(312.806701660156 281.99078525641926) rotate(0 145.3887481689453 -1.1116546415378252)"><path d="M267.36 6.52 C275.45 5.54, 283.24 -0.8, 290.78 -2.22 M267.36 6.52 C276.59 3.72, 283.13 0.79, 290.78 -2.22" stroke="#1e1e1e" stroke-width="1" fill="none"></path></g><g transform="translate(312.806701660156 281.99078525641926) rotate(0 145.3887481689453 -1.1116546415378252)"><path d="M267.22 -10.58 C275.46 -6.11, 283.29 -6.99, 290.78 -2.22 M267.22 -10.58 C276.65 -7.26, 283.24 -4.08, 290.78 -2.22" stroke="#1e1e1e" stroke-width="1" fill="none"></path></g></g><mask id="mask-06gBbcDYyqbrWgIkFgiMG"><rect x="0" y="0" fill="#fff" width="703.5841979980466" height="384.2140945394949"></rect><rect x="373.8888092041012" y="268.37913061488143" fill="#000" width="168.61328125" height="25" opacity="1"></rect></mask><g transform="translate(373.8888092041012 268.37913061488143) rotate(0 84.306640625 12.75657094838769)"><text x="84.306640625" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">generate image list</text></g></svg>
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 868.292816162109 516.9149348991959" width="868.292816162109" height="516.9149348991959"><!-- svg-source:excalidraw --><metadata><!-- payload-type:application/vnd.excalidraw+json --><!-- payload-version:2 --><!-- payload-start -->eyJ2ZXJzaW9uIjoiMSIsImVuY29kaW5nIjoiYnN0cmluZyIsImNvbXByZXNzZWQiOnRydWUsImVuY29kZWQiOiJ4nO1baW/bSFx1MDAxMv2eXyF4Pk7E9H1cZrBY2I7PxF5v7ImT2Vx1MDAxZFx1MDAxOJTYllx1MDAxOVMkQ1K+XHUwMDA2+e9bTdukxEOXlZnMQjJg2GSr2Ue9V6+qmn+86nQ2svvYbPzS2TB3fTfwvcS93Xhtr9+YJPWjXHUwMDEwbpH8/zRcdTAwMWEl/bzlVZbF6S9v3lxm3eTaZHHg9o1z46cjN0izkedHTj9cdTAwMWG+8TMzTP9pf1x1MDAxZrtD8484XHUwMDFhelnilFx1MDAwZulcdTAwMWHPz6Lk8VkmMENcdTAwMTNmKfT+XHUwMDFm+L/T+SP/XHJ3fM8+cWuPilx1MDAwN3lwsP2birxcdTAwMGaY7etcdTAwMTj9ln81b/Q8hczcZeXVO7gkJHa0QIxSzbVcdTAwMTa4uHlcdTAwMGY3OXI0XHUwMDExUiBcbj9KYlLcvfW97FxuWmAlXHUwMDFjionEVFx1MDAxMIqYUKpocmX8wVVcdTAwMDZtKC+uueEgsFx1MDAwM0HFlTRLomuzXHUwMDFkXHUwMDA1MFNcdTAwMTjgT9jYn3KMPbd/PUiiUehcdTAwMTVtssRcctPYTWA9ynaXflx1MDAxMJxm93nvsFx1MDAxM7CEXHUwMDFilWecP1x1MDAwZrlyve1b8NDBVWjSdOI7Uez2/cwuXHUwMDBlRuUs7Fxi41x1MDAwMy/fnt/LMSWwsVx1MDAwN3Z/wlFcdTAwMTBcdTAwMTSX/dAzduk3XFw88bTQe3raROvUXHUwMDE424PAXHUwMDFjtlx1MDAwMla6uFGaXHUwMDFmXHUwMDE1vHr1OFxuc1PESGlJXHUwMDE1XHUwMDEy5db56Vuwpizv9Vx1MDAxMizSlGttx7AzZmnlVEax5z5+XHUwMDA1S1x0W821XHUwMDEwlJebXHUwMDFk+OF1deRB1L9ueEpugzD7j75nok6cRH0763LRojA79Vx1MDAxZuzgiZq4uutcdTAwMGX9IDfLib42XHUwMDAzf2BXYSMwl2NcdTAwMDZcdTAwMDFcdTAwMGKR+YCl4nZcdTAwMTbF5d0+9Of6oUnq21x1MDAxMyX+wFx1MDAwZt3gbPo43VFcdTAwMTZ9MOnjSLNkZMbXwuw/XHUwMDFiP3ZcYs9vfHvdhNvkjN6/XHUwMDFi7u5cdTAwMWTexnxzeI/Nh9OTqI7bxPSzR+xMgFx1MDAxN/DqXGIuJECPXHUwMDEwJlC5XnaZKMZcdTAwMGVjmilKlFwiXHUwMDA0cVGDL1x1MDAwMYRTqTR0oTjmXHUwMDAylWZSwFdQXHUwMDA3OiGCXGLNXHUwMDAx6kywNZyb4Uya4fy85eV+0qcr36oox4JcIlx1MDAwNItNaFx1MDAwM8wx5qR6ucC5pJQjjXVpXHUwMDAyXHUwMDBi4LxcdTAwMThgOdQ2pzFmu5/kwTA0Rnzx3P7BXHUwMDE23c2i0eHWRtHu2+vmblx1MDAxZr/Mvp6o3uXnYPS538NcdTAwMGboRjzo7sfJpzw/302S6HbefpFcdTAwMThs9fpvP99/7SXng4Pr3YF/tDdfv09/tZNcdTAwMWWjREtJx4E+g/SmIL959ebw2FpLXHUwMDA3PDXRXHUwMDA0Y0a4XHUwMDE0k6CnyFx1MDAxMUDOmFl+lkLVMFx1MDAwZnOBXHUwMDE2Wlx1MDAxMY1cdTAwMTFAnvA65MnaY7dAnC7gsYlcdTAwMTJYXHUwMDAzaTZAWSvRhmRJMKOcIbFcZpBXabs1h50m/c6bjlx1MDAxYsfw+8Y6xVx1MDAxNq+NJq7O8tp9XHUwMDE4u0mm+O2h73njjm/Sdc/yoFVvPm1cdTAwMTKrcem3ZOdwm95cYnX8+fbi4JKqYTg8mNulg1xid4iwUppcYnC1qtwxu4bg41x1MDAxZM5cdTAwMTW1qlx1MDAwZSswlFx1MDAxYbop0o6moNh5jm00ZkdcdTAwMDW8lXSIolQ9SXa5RntcdTAwMGLa2ctcdTAwMWS61lx1MDAxNFx1MDAwMc826naMUc3PXHUwMDE3XHUwMDBlXWiqXHSDyOrPc+jbX/1tsdc/XHQ2za+frk7Q8e67zeO/2qH/io9cdTAwMDZH3j7pX5yfnb1H6OEwPD9biUPHUnEuXHUwMDExWySKmYL75tWbw6FcdTAwMGKqXHUwMDFkUN6YS1xi8YCjK5DX2JFcYj5cdTAwMDRcInBcdTAwMTisrEGeXHUwMDEwoFxmLlx1MDAxNV678kXAzed35WAmTFm6bHLlY/ZTwbBcdTAwMDL0clBhdFx1MDAxOVxiz7BaRVx1MDAxNrDamiv3/DRcdTAwMDNcdTAwMDd4lVxyg87PnX6awm9/6Fx1MDAwZcxcdTAwMGbh0md40KpLn2cyq3Ht0zmuwkNcdTAwMTXRrq3jZoxzopAqQ+hcXLMrXHUwMDA0gTqVjGtFOSj4eqCOMXVA7oP2h+BcdTAwMTB0fWlSXHUwMDA10iVzQPWD09dcdTAwMTDtK1xc8sRcdTAwMWH3XHUwMDEzuFx1MDAxN/PjXHUwMDFlcySkhKC6XHUwMDEx+LTm00tccs9cdTAwMTlnkpbbvKKkXHUwMDFi03Ism7pcdTAwMDDw48ivSoPyr05pXHUwMDFh+T/F37+/bmzdbbVG+6naYdlbzVx1MDAxZqeZm2RbsDV+OJjUVU/57nkkPrRcdTAwMWVGXm5MUdLzx5Vcclx1MDAxOOid8U7s3CemXHUwMDBlc3RcdTAwMDQgTmBsN5egMu/1eJNcdTAwMTNJXHUwMDE4wlRcYtDZXHUwMDEwZzetXGJQYX+UjuPK2qRcdTAwMWI/7UhNXHUwMDExmtCbPdXp1LfkVJlcdTAwMDBxXHUwMDAwXHUwMDFiwqTNXGKUWVX7wVx1MDAwZcKYc4goXHUwMDE0olx1MDAwMoJcbjp9rnWha/dw0zLelXFrsINJj9+rUqNcdHrRbYO5XHUwMDBlo1x1MDAxYnPkP04nPfezqyeA1Fx1MDAxYVx1MDAwNm6abUfDoZ9l5eyL5W9m8T2TJHfZl/D+w/lcdTAwMTZ/q/BcdTAwMDVcdTAwMGV3wrlcdTAwMDM0JpGjpZKSI8JcdTAwMThmpVx1MDAxZs75idi7WCDFKbH2pWtUzlx1MDAwNVx1MDAwMEQghlx1MDAxMNVcYjalbFGmXFyZo5TWXHUwMDEwnmlw9XSs7rLm8lx0LpcvXHUwMDBl0CxRXHUwMDAz0HU5wIn4rFXbYWBjrFx1MDAxMV6usFKMb6H47PwmXHUwMDFj3JDr4+5XXHUwMDE5XHUwMDFjv7s63Vfx0d68cVx1MDAxND2K3pO9y5vz6Nq/62cnZ1rtnK4oMcq1XHUwMDA0S11RXHUwMDFj1TzLOeIoTojDbFqUMUDn+Jbm1sZcdTAwMDCZWFx1MDAwMJ6QgmCLjGU9npHJXHUwMDA0hFpcXHPoQYFcdTAwMWNbR1NcdTAwMGIgUS2gqlx1MDAwNLO+RrPGXCJcdTAwMDdCrFx1MDAxZHOSIVx0XHUwMDFhXHUwMDFhLYO5VZpvLaBKzDDKXGZEIbeml/qZ6cZJ9Fx1MDAwNVx1MDAxY0g3hHV7TjV2nyOXXHUwMDFmXCLKmuFcdTAwMDarUdbSM1xcTeg1nb6mhV5cdTAwMTC6O0JcdTAwMTGGldQg5tVkvcRcdTAwMWVg4Fx1MDAxODGI1W1sXHK6r0ZcdTAwMGLgolx1MDAxZEVcdTAwMDTmhIL5UapcdTAwMWLOOGBcdTAwMDKKmDMsXHUwMDE58Fx1MDAwZbbp1zVRNFx1MDAxM4VeJPxcIsDCXFzQXHUwMDE259xKXHUwMDE0XHUwMDA0UVx1MDAwNtqJLsVcdTAwMTPL+ebbXHUwMDBml2fux4eLXHUwMDBitncqzlNcdTAwMTk+pGl3cVx1MDAxZqrHwfHXXHUwMDA0d+3mbj91Qy87rM1xzvhuOlx1MDAxM41FXHUwMDFmXeRgqUGvKVx0XHUwMDExJsVcXI41elxmvTjEM/k5hedxLVx1MDAxOID1TndcdTAwMWbE3dfup1x1MDAwN3Q0vNn/vPfl6NBrXHUwMDE5XHUwMDBi6HeCiLalXHUwMDE2an9qg8G1Mfz9oqVmw55DjjGwXHUwMDE0SmxcdTAwMWRLYKQ1xZPES4hcdTAwMDRa5ogjLVx1MDAxOOV1NWbr1Fx1MDAxYaxcdTAwMGZcIiWgbVBkJdxcdTAwMGLaXHUwMDFkU1x1MDAwMmuanaDZzflpXHUwMDE24kylmW4sUdUzX89cdTAwMWNLNSNcdTAwMWMzvHItXHUwMDA2hkKWynE9a7EozvwhyI30qcDb+fm/4cCA7oFcdTAwMDd14sTc+Ob2R1x1MDAxMGAzJE1VgNWn1Wmf1WpE13QynJUpoYI6klx1MDAxMSVcdTAwMTmQNVx1MDAwN1x1MDAxME/gPy9UI2rPoHAkXHUwMDE4b6hraeFg6IRcdTAwMTOeZ0p4QylbwlxmXHUwMDEw9Fwiqc01XHUwMDEyvj6b1sJcdTAwMDdbzXywWClcdTAwMWJcdTAwMTaYXGLedKBcdTAwMDVcdTAwMTi+/VxmKlx1MDAwNiEhMOZL1cGWk2Nn3tn53dfhrTe4P+dHXHUwMDE371xcXHUwMDFk93p/Qsl5ar8vSMFM7ff7nXlbcYm8eVfm0Vx1MDAxMlxmOyDqMFxie1x1MDAwNIqLqOqhN+pcdTAwMDBcdTAwMGJcdTAwMTCBXGIjiGNdJ1x1MDAxM5v+4VxcK2hCrLNrOOi6Tu60kcf2/GKCMMSllI25XHUwMDFkjVsrZlx1MDAxOFGI0TmiS51fnXbsXHLbXHUwMDAw8iVyXCJcdTAwMWX1XHUwMDAyv/9DnXmb4ZeryqF1XHUwMDA2q1FcdNPpclpqhmPhcJD/yCZdXHUwMDE5VVx1MDAxNYWghFx1MDAwM1x1MDAwMSbDSlPKuGp4+1x1MDAwNFx1MDAxM0dqhbm2VTxo1XR8XTmMM6WBXHUwMDFmXHUwMDE05ePea1xy8lx0kL9dIDFcdTAwMDM6XHUwMDFkXHUwMDAzjzaGXGZS1NI1XHUwMDA1yrmC4F2yXHUwMDE1n23lmokl87crTZ20m6P91Fxmseyu5oXnTJzMTFYsUy2mXGb4m0twokSRMsf2eFNwQsDHKkTs+VPEm5ZkSrH4r6uBXHUwMDBiylx1MDAxNFx1MDAwNlx1MDAxOWHrXHUwMDBlXHUwMDEwt47PXG47IF6ZZkxTjlx1MDAxNFf8/79cdTAwMDS+efOeuOR496NJcDfqvju5XHLeXcwjxCRmXHUwMDBlXHUwMDAz1HHAv31cdTAwMWZogrBhdVx1MDAxZEaoTVx1MDAxOdryXHUwMDE5YlxyJTZcbjrOvr0gXHUwMDA1KEuA7VqGzc/QO1x1MDAwYjC0XCJaYklEY42NtcZqXHUwMDA0M1x1MDAwMVx1MDAxYrfkseNZYcRS2e1nXHUwMDFk1lx1MDAxYvmBt1xu9fWd3lx1MDAxM6yMbzXaanpoN01bXHTBXHUwMDFkKiHQXHUwMDExQjFY/MlzKqCnXHUwMDFjJsBLXHRcdTAwMDXkh8be6SuzL8ixQl5cdTAwMGJq31x1MDAxMGx6j4A4XHUwMDA00I4gXHUwMDFjo0iCR0Nr5LYgd3d+5DKItoVUqklakbFsa63khVx1MDAxMIdcdTAwMTBZLKWtXG4vt1CS5Xpn9+Tfx2fD6OQgOyT8ZH/LJ//6vi/UfVx1MDAxZuHWauv2062b+Vx1MDAwZqncJjRccnI4QjOOLS6nzr7HYcxFRz52bcqBy7+fLGtcdTAwMDbUPLKMIFx1MDAwN0mFJMRcdTAwMWWgwFSF7Cl2XHUwMDE0XHUwMDE3Qlx1MDAxMiyktsKrxvYg5q23UEhwbIVZyT5rXTaT3fdcdTAwMTbQZZJcdTAwMTLclkSvn3Mo3iSB6Fx1MDAwNTZu1YEzo6BcdTAwMTPZi7JjRVx0Ks8tdVx1MDAwMj/NVqHRXpohm6Gbqtpt6ixcdTAwMTZWcq+eaGvDjePTXGa6LehcdTAwMTQszPcqK/J4LTNxuVx1MDAxYfmlI+DRndDtXHUwMDA11dXfsKW+rTqgfrrMP9ZcdTAwMDHn9GLBZPJcIs+3V9/+XHUwMDA3mZd91iJ9<!-- payload-end --></metadata><defs><style class="style-fonts">
|
|
2
|
+
@font-face { font-family: Excalifont; src: url(data:font/woff2;base64,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); }</style></defs><rect x="0" y="0" width="868.292816162109" height="516.9149348991959" fill="#ffffff"></rect><g transform="translate(318.21755981445335 10) rotate(0 93.15635681152344 17.5)"><text x="0" y="24.668" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="28px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Video process</text></g><g stroke-linecap="round" transform="translate(607.9138488769531 270.52272298513344) rotate(0 125.18948364257795 31.74713134765622)"><path d="M15.87 0 C67.8 2.5, 115.93 0.56, 234.51 0 M15.87 0 C90.28 1.4, 164.63 1.3, 234.51 0 M234.51 0 C246.61 -0.28, 249.38 7, 250.38 15.87 M234.51 0 C243.94 -1.78, 251.26 5.64, 250.38 15.87 M250.38 15.87 C249.36 22.69, 251.83 27.62, 250.38 47.62 M250.38 15.87 C249.71 27.05, 251.49 37.22, 250.38 47.62 M250.38 47.62 C252.24 58.93, 243.27 64.61, 234.51 63.49 M250.38 47.62 C250.51 57.53, 246.22 65.79, 234.51 63.49 M234.51 63.49 C147.59 66.57, 60.46 66.02, 15.87 63.49 M234.51 63.49 C166.03 63.38, 97.48 63.41, 15.87 63.49 M15.87 63.49 C5.56 63.91, 0.57 57.14, 0 47.62 M15.87 63.49 C3.78 62.86, -1.78 56.93, 0 47.62 M0 47.62 C-0.69 38.75, 2.08 33.62, 0 15.87 M0 47.62 C-1 39.38, 0.13 29.07, 0 15.87 M0 15.87 C-1.4 6.55, 3.61 -1.3, 15.87 0 M0 15.87 C-0.04 6.81, 5.69 1.38, 15.87 0" stroke="#1e1e1e" stroke-width="1" fill="none"></path></g><g transform="translate(644.2534179687499 289.7698543327897) rotate(0 88.84991455078125 12.5)"><text x="88.84991455078125" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">src / app / videos</text></g><g stroke-linecap="round" transform="translate(245.52017211914062 419.6315486687272) rotate(0 154.96801757812506 43.641693115234375)"><path d="M21.82 0 C115.88 0.1, 207.88 1.28, 288.12 0 M21.82 0 C116.55 -0.99, 209.69 -0.21, 288.12 0 M288.12 0 C301.66 -1.55, 310.7 7.57, 309.94 21.82 M288.12 0 C300.43 1.62, 308.87 5.84, 309.94 21.82 M309.94 21.82 C310.88 37.41, 311.2 47.78, 309.94 65.46 M309.94 21.82 C311.24 37.8, 309.4 53.61, 309.94 65.46 M309.94 65.46 C310.05 79.43, 303.64 89.28, 288.12 87.28 M309.94 65.46 C312.17 78.52, 304.85 87.16, 288.12 87.28 M288.12 87.28 C189.04 87.98, 89.85 87.86, 21.82 87.28 M288.12 87.28 C222.12 86.43, 156.14 85.85, 21.82 87.28 M21.82 87.28 C5.96 86.73, -1.54 78.91, 0 65.46 M21.82 87.28 C5.98 86.57, 2.29 79.1, 0 65.46 M0 65.46 C-0.8 55.55, 1.08 42.46, 0 21.82 M0 65.46 C-0.81 49.9, -0.95 32.44, 0 21.82 M0 21.82 C-0.04 8.59, 7.62 1.2, 21.82 0 M0 21.82 C0.85 6.42, 8.15 -1.94, 21.82 0" stroke="#1e1e1e" stroke-width="1" fill="none"></path></g><g transform="translate(285.8592834472656 450.77324178396157) rotate(0 114.62890625 12.5)"><text x="114.62890625" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">dist / html + css + images</text></g><g stroke-linecap="round"><g transform="translate(645.8155713825763 339.51698568044594) rotate(0 -56.55749871129365 37.30728149414085)"><path d="M0 0 C-24.73 16.65, -50.39 35.07, -113.11 74.61 M0 0 C-33.23 21.53, -64.7 43.8, -113.11 74.61" stroke="#1e1e1e" stroke-width="1" fill="none"></path></g><g transform="translate(645.8155713825763 339.51698568044594) rotate(0 -56.55749871129365 37.30728149414085)"><path d="M-98.06 54.65 C-100.48 59.02, -104.09 65.16, -113.11 74.61 M-98.06 54.65 C-102.97 59.72, -106.39 66.35, -113.11 74.61" stroke="#1e1e1e" stroke-width="1" fill="none"></path></g><g transform="translate(645.8155713825763 339.51698568044594) rotate(0 -56.55749871129365 37.30728149414085)"><path d="M-88.75 69 C-93.19 70.14, -98.9 73.05, -113.11 74.61 M-88.75 69 C-96.25 70.04, -102.34 72.57, -113.11 74.61" stroke="#1e1e1e" stroke-width="1" fill="none"></path></g></g><mask></mask><g stroke-linecap="round" transform="translate(117.23590087890648 80.04484822927407) rotate(0 282.33020019531244 32.44496154785156)"><path d="M16.22 0 C175.96 0.74, 334.92 -0.27, 548.44 0 M16.22 0 C221.52 1.71, 426.12 1.93, 548.44 0 M548.44 0 C558.32 -1.25, 565.04 6.63, 564.66 16.22 M548.44 0 C557.95 0.78, 566.59 6.55, 564.66 16.22 M564.66 16.22 C565.13 24.78, 565.58 27.8, 564.66 48.67 M564.66 16.22 C565.17 28.77, 565.65 38.66, 564.66 48.67 M564.66 48.67 C566.56 59.38, 560.71 64.43, 548.44 64.89 M564.66 48.67 C565.6 59.77, 559.01 65.3, 548.44 64.89 M548.44 64.89 C398.16 64.03, 248.83 64.15, 16.22 64.89 M548.44 64.89 C416.73 64.08, 285.42 64.18, 16.22 64.89 M16.22 64.89 C7.4 64.1, -1.14 61.46, 0 48.67 M16.22 64.89 C7.11 64.47, 0.81 61.22, 0 48.67 M0 48.67 C-1.54 40.4, 1.02 33.26, 0 16.22 M0 48.67 C0.18 41.64, 0.38 33.05, 0 16.22 M0 16.22 C0.77 3.72, 3.78 -1.83, 16.22 0 M0 16.22 C-0.26 6.15, 4.65 0.74, 16.22 0" stroke="#1e1e1e" stroke-width="1" fill="none"></path></g><g transform="translate(168.68634033203136 99.98980977712563) rotate(0 230.8797607421875 12.5)"><text x="230.8797607421875" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">remote / website-project-name / video-originals</text></g><g mask="url(#mask-3MoL2GfvWokixctPT98ES)" stroke-linecap="round"><g transform="translate(394.9395446522109 145.5837224730856) rotate(0 -124.91307617036699 61.57708719558018)"><path d="M0 0 C-92.83 44.62, -189.35 92.32, -249.83 123.15 M0 0 C-79.98 39.67, -158.18 79.42, -249.83 123.15" stroke="#1e1e1e" stroke-width="1" fill="none"></path></g><g transform="translate(394.9395446522109 145.5837224730856) rotate(0 -124.91307617036699 61.57708719558018)"><path d="M-232.41 105.22 C-237.28 110.88, -247.09 119.39, -249.83 123.15 M-232.41 105.22 C-238.54 110.37, -243.37 117.25, -249.83 123.15" stroke="#1e1e1e" stroke-width="1" fill="none"></path></g><g transform="translate(394.9395446522109 145.5837224730856) rotate(0 -124.91307617036699 61.57708719558018)"><path d="M-224.96 120.61 C-232.61 120.44, -245.23 123.17, -249.83 123.15 M-224.96 120.61 C-233.28 120.96, -240.46 123, -249.83 123.15" stroke="#1e1e1e" stroke-width="1" fill="none"></path></g></g><mask id="mask-3MoL2GfvWokixctPT98ES"><rect x="0" y="0" fill="#fff" width="744.7656969929449" height="368.73789686424595"></rect><rect x="181.05656644326962" y="182.1608096686658" fill="#000" width="177.93980407714844" height="50" opacity="1"></rect></mask><g transform="translate(181.05656644326962 182.16080966866576) rotate(0 88.96990203857428 25.000000000000014)"><text x="88.96990203857422" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">optimizes videos +</text><text x="88.96990203857422" y="42.62" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">generate preview</text></g><g stroke-linecap="round" transform="translate(10 268.9763412475586) rotate(0 148.0681762695313 35.60015869140628)"><path d="M17.8 0 C83.16 -2.35, 149.17 -1.54, 278.34 0 M17.8 0 C79.28 -1.01, 142.33 -0.88, 278.34 0 M278.34 0 C288.33 1.16, 297.82 6.22, 296.14 17.8 M278.34 0 C292.35 0.84, 294.05 7.22, 296.14 17.8 M296.14 17.8 C298.03 30.62, 294.73 41.46, 296.14 53.4 M296.14 17.8 C296.81 28.42, 296.29 38.97, 296.14 53.4 M296.14 53.4 C295.77 64.23, 289.3 70.23, 278.34 71.2 M296.14 53.4 C296.44 65.75, 290.86 69.98, 278.34 71.2 M278.34 71.2 C216.44 68.69, 155.82 71.19, 17.8 71.2 M278.34 71.2 C211.09 73.12, 142.94 73.87, 17.8 71.2 M17.8 71.2 C4.16 72.62, 0.48 63.96, 0 53.4 M17.8 71.2 C4.32 72.64, -1.94 63.77, 0 53.4 M0 53.4 C0.96 43.53, -0.98 32.94, 0 17.8 M0 53.4 C0.18 46.04, -0.04 38.36, 0 17.8 M0 17.8 C1.61 5.18, 7.09 -1.28, 17.8 0 M0 17.8 C0.64 5.53, 4.03 -0.09, 17.8 0" stroke="#1e1e1e" stroke-width="1" fill="none"></path></g><g transform="translate(87.78824615478516 292.07649993896484) rotate(0 70.2799301147461 12.5)"><text x="70.2799301147461" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">public / videos</text></g><g stroke-linecap="round"><g transform="translate(162.85353180693096 345.6766586303711) rotate(0 56.39907999164666 34.227445019178276)"><path d="M0 0 C22.11 14.79, 47.46 27.16, 112.8 68.45 M0 0 C37.31 22.88, 76.76 45.3, 112.8 68.45" stroke="#1e1e1e" stroke-width="1" fill="none"></path></g><g transform="translate(162.85353180693096 345.6766586303711) rotate(0 56.39907999164666 34.227445019178276)"><path d="M88.34 63.3 C92.09 64.84, 99.52 64.37, 112.8 68.45 M88.34 63.3 C95.61 65.48, 105.56 66.76, 112.8 68.45" stroke="#1e1e1e" stroke-width="1" fill="none"></path></g><g transform="translate(162.85353180693096 345.6766586303711) rotate(0 56.39907999164666 34.227445019178276)"><path d="M97.37 48.78 C99.39 53.22, 105 55.7, 112.8 68.45 M97.37 48.78 C101.75 55.85, 108.68 61.99, 112.8 68.45" stroke="#1e1e1e" stroke-width="1" fill="none"></path></g></g><mask></mask><g transform="translate(360.6748809814453 372.49657954066333) rotate(0 21.769981384277344 12.5)"><text x="0" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">build</text></g><g mask="url(#mask-06gBbcDYyqbrWgIkFgiMG)" stroke-linecap="round"><g transform="translate(311.6363525390625 304.54156650641926) rotate(0 145.3887481689453 -1.1116546415378252)"><path d="M0 0 C93.22 1.78, 186.19 -1.58, 290.78 -2.22 M0 0 C104.71 -0.83, 207.36 -1.48, 290.78 -2.22" stroke="#1e1e1e" stroke-width="1" fill="none"></path></g><g transform="translate(311.6363525390625 304.54156650641926) rotate(0 145.3887481689453 -1.1116546415378252)"><path d="M267.36 6.52 C275.45 5.54, 283.24 -0.8, 290.78 -2.22 M267.36 6.52 C276.59 3.72, 283.13 0.79, 290.78 -2.22" stroke="#1e1e1e" stroke-width="1" fill="none"></path></g><g transform="translate(311.6363525390625 304.54156650641926) rotate(0 145.3887481689453 -1.1116546415378252)"><path d="M267.22 -10.58 C275.46 -6.11, 283.29 -6.99, 290.78 -2.22 M267.22 -10.58 C276.65 -7.26, 283.24 -4.08, 290.78 -2.22" stroke="#1e1e1e" stroke-width="1" fill="none"></path></g></g><mask id="mask-06gBbcDYyqbrWgIkFgiMG"><rect x="0" y="0" fill="#fff" width="702.4138488769531" height="406.7648757894949"></rect><rect x="366.3351974487306" y="290.92991186488143" fill="#000" width="181.3798065185547" height="25" opacity="1"></rect></mask><g transform="translate(366.3351974487306 290.92991186488143) rotate(0 90.68990325927734 12.75657094838769)"><text x="90.68990325927734" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">generate video list</text></g></svg>
|
package/package.json
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@adaptive-ds/assets-optimizer",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"main": "./dist/index.js",
|
|
5
|
+
"dependencies": {
|
|
6
|
+
"image-size": "^2.0.2",
|
|
7
|
+
"sharp": "^0.34.5"
|
|
8
|
+
},
|
|
9
|
+
"devDependencies": {
|
|
10
|
+
"@biomejs/biome": "^2.4.11",
|
|
11
|
+
"@types/bun": "latest",
|
|
12
|
+
"@types/node": "^25.6.0",
|
|
13
|
+
"typescript": "^6.0.2"
|
|
14
|
+
},
|
|
15
|
+
"exports": {
|
|
16
|
+
".": {
|
|
17
|
+
"import": "./dist/index.js",
|
|
18
|
+
"types": "./dist/index.d.ts"
|
|
19
|
+
},
|
|
20
|
+
"./*.js": {
|
|
21
|
+
"types": "./dist/*.d.ts",
|
|
22
|
+
"import": "./dist/*.js"
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
"description": "Process and sync web project images and videos between local folders and R2",
|
|
26
|
+
"homepage": "https://github.com/david1gp/assets-optimizer",
|
|
27
|
+
"keywords": [
|
|
28
|
+
"images",
|
|
29
|
+
"image-optimization",
|
|
30
|
+
"video",
|
|
31
|
+
"video-optimization",
|
|
32
|
+
"sharp",
|
|
33
|
+
"ffmpeg",
|
|
34
|
+
"r2",
|
|
35
|
+
"rclone",
|
|
36
|
+
"web-assets"
|
|
37
|
+
],
|
|
38
|
+
"license": "MIT",
|
|
39
|
+
"prettier": {
|
|
40
|
+
"semi": false,
|
|
41
|
+
"printWidth": 120,
|
|
42
|
+
"trailingComma": "all"
|
|
43
|
+
},
|
|
44
|
+
"private": false,
|
|
45
|
+
"repository": {
|
|
46
|
+
"type": "git",
|
|
47
|
+
"url": "git+https://github.com/david1gp/assets-optimizer.git"
|
|
48
|
+
},
|
|
49
|
+
"scripts": {
|
|
50
|
+
"build": "rm -rf ./dist && bun tsc -p ./tsconfig.lib.json",
|
|
51
|
+
"format": "bunx biome check --write src",
|
|
52
|
+
"release": "bash ops/release.sh"
|
|
53
|
+
},
|
|
54
|
+
"type": "module",
|
|
55
|
+
"types": "./dist/index.d.ts"
|
|
56
|
+
}
|
package/tsconfig.json
ADDED
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"target": "esnext",
|
|
4
|
+
"module": "nodenext",
|
|
5
|
+
"moduleResolution": "nodenext",
|
|
6
|
+
"allowImportingTsExtensions": false,
|
|
7
|
+
"resolveJsonModule": true,
|
|
8
|
+
"noEmit": true,
|
|
9
|
+
//
|
|
10
|
+
// dom
|
|
11
|
+
//
|
|
12
|
+
"lib": [
|
|
13
|
+
"esnext"
|
|
14
|
+
],
|
|
15
|
+
"types": ["bun"],
|
|
16
|
+
//
|
|
17
|
+
// performance
|
|
18
|
+
//
|
|
19
|
+
"isolatedModules": true,
|
|
20
|
+
"skipLibCheck": true,
|
|
21
|
+
"incremental": true,
|
|
22
|
+
"tsBuildInfoFile": "./build/tsconfig.tsbuildinfo",
|
|
23
|
+
//
|
|
24
|
+
// my configs
|
|
25
|
+
//
|
|
26
|
+
"allowJs": true,
|
|
27
|
+
"esModuleInterop": true,
|
|
28
|
+
"allowSyntheticDefaultImports": true,
|
|
29
|
+
"useDefineForClassFields": true,
|
|
30
|
+
"noUncheckedSideEffectImports": true,
|
|
31
|
+
//
|
|
32
|
+
// type imports - https://www.typescriptlang.org/tsconfig#verbatimModuleSyntax
|
|
33
|
+
//
|
|
34
|
+
"verbatimModuleSyntax": true,
|
|
35
|
+
//
|
|
36
|
+
// https://devblogs.microsoft.com/typescript/announcing-typescript-5-8/#the---erasablesyntaxonly-option
|
|
37
|
+
//
|
|
38
|
+
"erasableSyntaxOnly": true,
|
|
39
|
+
//
|
|
40
|
+
// code quality settings
|
|
41
|
+
//
|
|
42
|
+
"strict": true,
|
|
43
|
+
"noUncheckedIndexedAccess": true,
|
|
44
|
+
"noUnusedLocals": false,
|
|
45
|
+
"noUnusedParameters": false,
|
|
46
|
+
"noImplicitAny": true,
|
|
47
|
+
"noImplicitReturns": true,
|
|
48
|
+
"noFallthroughCasesInSwitch": true,
|
|
49
|
+
"forceConsistentCasingInFileNames": true
|
|
50
|
+
},
|
|
51
|
+
"include": [
|
|
52
|
+
"client",
|
|
53
|
+
"src",
|
|
54
|
+
"test"
|
|
55
|
+
],
|
|
56
|
+
"exclude": [
|
|
57
|
+
".github",
|
|
58
|
+
".roo",
|
|
59
|
+
".idea",
|
|
60
|
+
".vscode",
|
|
61
|
+
".wrangler",
|
|
62
|
+
"changelogs",
|
|
63
|
+
"build",
|
|
64
|
+
"dist",
|
|
65
|
+
"out",
|
|
66
|
+
"data",
|
|
67
|
+
"docs",
|
|
68
|
+
"node_modules",
|
|
69
|
+
"ops",
|
|
70
|
+
"public",
|
|
71
|
+
"images",
|
|
72
|
+
"public/images",
|
|
73
|
+
"videos",
|
|
74
|
+
"public/videos"
|
|
75
|
+
],
|
|
76
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"extends": "./tsconfig.json",
|
|
3
|
+
"compilerOptions": {
|
|
4
|
+
"rootDir": "./src",
|
|
5
|
+
"outDir": "./dist",
|
|
6
|
+
"declaration": true,
|
|
7
|
+
"declarationMap": true,
|
|
8
|
+
"noEmit": false,
|
|
9
|
+
"incremental": false,
|
|
10
|
+
},
|
|
11
|
+
"include": [
|
|
12
|
+
"./src/**/*"
|
|
13
|
+
],
|
|
14
|
+
"exclude": [
|
|
15
|
+
"node_modules",
|
|
16
|
+
"dist",
|
|
17
|
+
"test"
|
|
18
|
+
],
|
|
19
|
+
}
|