@pixerate/editor 0.222.1 → 0.222.3

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.
Files changed (30) hide show
  1. package/package.json +1 -1
  2. package/skills/README.md +8 -1
  3. package/skills/pixerate-paint-editor/SKILL.md +20 -59
  4. package/skills/pixerate-paint-editor/references/oils.md +19 -0
  5. package/skills/pixerate-paint-editor/references/wet-media.md +35 -0
  6. package/skills/pixerate-paint-oil-impasto/SKILL.md +103 -0
  7. package/skills/pixerate-paint-oil-impasto/evals/impasto-highlights.json +24 -0
  8. package/skills/pixerate-paint-oil-impasto/evals/lean-to-thick.json +17 -0
  9. package/skills/pixerate-paint-oil-impasto/evals/mix-green.json +15 -0
  10. package/skills/pixerate-paint-sketch-to-finish/SKILL.md +97 -0
  11. package/skills/pixerate-paint-sketch-to-finish/evals/clipped-shading.json +26 -0
  12. package/skills/pixerate-paint-sketch-to-finish/evals/flats-under-ink.json +27 -0
  13. package/skills/pixerate-paint-sketch-to-finish/evals/sketch-ink-hide.json +20 -0
  14. package/skills/pixerate-paint-watercolour/SKILL.md +106 -0
  15. package/skills/pixerate-paint-watercolour/evals/glaze-over-dry.json +24 -0
  16. package/skills/pixerate-paint-watercolour/evals/paper-and-brush-for-detail.json +16 -0
  17. package/skills/pixerate-paint-watercolour/evals/sky-wash.json +19 -0
  18. package/skills/pixerate-video-colour-grade/SKILL.md +105 -0
  19. package/skills/pixerate-video-colour-grade/evals/look-in-one-place.json +16 -0
  20. package/skills/pixerate-video-colour-grade/evals/lut-keep-skin.json +132 -0
  21. package/skills/pixerate-video-colour-grade/evals/match-exposure.json +14 -0
  22. package/skills/pixerate-video-editor/SKILL.md +3 -0
  23. package/skills/pixerate-video-montage/SKILL.md +99 -0
  24. package/skills/pixerate-video-montage/evals/assemble-on-beats.json +231 -0
  25. package/skills/pixerate-video-montage/evals/music-and-ending.json +210 -0
  26. package/skills/pixerate-video-montage/evals/short-crossfades.json +190 -0
  27. package/skills/pixerate-video-social-cut/SKILL.md +105 -0
  28. package/skills/pixerate-video-social-cut/evals/hook-first.json +19 -0
  29. package/skills/pixerate-video-social-cut/evals/opening-title.json +14 -0
  30. package/skills/pixerate-video-social-cut/evals/vertical-reframe.json +15 -0
@@ -0,0 +1,231 @@
1
+ {
2
+ "prompt": "Assemble the five selects s1 to s5 in order on V1, one shot per beat: each cut lands on the next beat marker (they are 1 s apart, from 0). Use the middle of each select (from 2 s in). No gaps.",
3
+ "fixture": {
4
+ "editor": "video",
5
+ "setup": [
6
+ {
7
+ "tool": "add_video_asset",
8
+ "args": {
9
+ "id": "s1",
10
+ "kind": "video",
11
+ "src": "select-1.mp4",
12
+ "duration": 6000
13
+ }
14
+ },
15
+ {
16
+ "tool": "add_video_asset",
17
+ "args": {
18
+ "id": "s2",
19
+ "kind": "video",
20
+ "src": "select-2.mp4",
21
+ "duration": 6000
22
+ }
23
+ },
24
+ {
25
+ "tool": "add_video_asset",
26
+ "args": {
27
+ "id": "s3",
28
+ "kind": "video",
29
+ "src": "select-3.mp4",
30
+ "duration": 6000
31
+ }
32
+ },
33
+ {
34
+ "tool": "add_video_asset",
35
+ "args": {
36
+ "id": "s4",
37
+ "kind": "video",
38
+ "src": "select-4.mp4",
39
+ "duration": 6000
40
+ }
41
+ },
42
+ {
43
+ "tool": "add_video_asset",
44
+ "args": {
45
+ "id": "s5",
46
+ "kind": "video",
47
+ "src": "select-5.mp4",
48
+ "duration": 6000
49
+ }
50
+ },
51
+ {
52
+ "tool": "add_video_marker",
53
+ "args": {
54
+ "time": 0,
55
+ "label": "beat"
56
+ }
57
+ },
58
+ {
59
+ "tool": "add_video_marker",
60
+ "args": {
61
+ "time": 1000,
62
+ "label": "beat"
63
+ }
64
+ },
65
+ {
66
+ "tool": "add_video_marker",
67
+ "args": {
68
+ "time": 2000,
69
+ "label": "beat"
70
+ }
71
+ },
72
+ {
73
+ "tool": "add_video_marker",
74
+ "args": {
75
+ "time": 3000,
76
+ "label": "beat"
77
+ }
78
+ },
79
+ {
80
+ "tool": "add_video_marker",
81
+ "args": {
82
+ "time": 4000,
83
+ "label": "beat"
84
+ }
85
+ },
86
+ {
87
+ "tool": "add_video_marker",
88
+ "args": {
89
+ "time": 5000,
90
+ "label": "beat"
91
+ }
92
+ }
93
+ ]
94
+ },
95
+ "checks": [
96
+ {
97
+ "why": "five shots in order on V1",
98
+ "tool": "get_video_project",
99
+ "expect": {
100
+ "tracks": {
101
+ "$some": {
102
+ "id": "v1",
103
+ "clips": {
104
+ "$length": 5,
105
+ "$expr": "v.every((c, i) => c.asset === 's' + (i + 1))"
106
+ }
107
+ }
108
+ }
109
+ }
110
+ },
111
+ {
112
+ "why": "every cut on a beat",
113
+ "tool": "get_video_project",
114
+ "expect": {
115
+ "tracks": {
116
+ "$some": {
117
+ "id": "v1",
118
+ "clips": {
119
+ "$every": {
120
+ "$expr": "v.start % 1000 === 0 && v.duration === 1000"
121
+ }
122
+ }
123
+ }
124
+ }
125
+ }
126
+ },
127
+ {
128
+ "why": "from the middle of each select",
129
+ "tool": "get_video_project",
130
+ "expect": {
131
+ "tracks": {
132
+ "$some": {
133
+ "id": "v1",
134
+ "clips": {
135
+ "$every": {
136
+ "in": {
137
+ "$min": 1500,
138
+ "$max": 3000
139
+ }
140
+ }
141
+ }
142
+ }
143
+ }
144
+ }
145
+ },
146
+ {
147
+ "why": "no gaps",
148
+ "tool": "find_video_gaps",
149
+ "expect": {
150
+ "gaps": {
151
+ "$length": 0
152
+ }
153
+ }
154
+ }
155
+ ],
156
+ "solution": [
157
+ {
158
+ "tool": "get_video_project"
159
+ },
160
+ {
161
+ "tool": "edit_video",
162
+ "args": {
163
+ "ops": [
164
+ {
165
+ "op": "add_clip",
166
+ "track": "v1",
167
+ "clip": {
168
+ "type": "media",
169
+ "asset": "s1",
170
+ "id": "c1",
171
+ "in": 2000,
172
+ "start": 0,
173
+ "duration": 1000
174
+ }
175
+ },
176
+ {
177
+ "op": "add_clip",
178
+ "track": "v1",
179
+ "clip": {
180
+ "type": "media",
181
+ "asset": "s2",
182
+ "id": "c2",
183
+ "in": 2000,
184
+ "start": 1000,
185
+ "duration": 1000
186
+ }
187
+ },
188
+ {
189
+ "op": "add_clip",
190
+ "track": "v1",
191
+ "clip": {
192
+ "type": "media",
193
+ "asset": "s3",
194
+ "id": "c3",
195
+ "in": 2000,
196
+ "start": 2000,
197
+ "duration": 1000
198
+ }
199
+ },
200
+ {
201
+ "op": "add_clip",
202
+ "track": "v1",
203
+ "clip": {
204
+ "type": "media",
205
+ "asset": "s4",
206
+ "id": "c4",
207
+ "in": 2000,
208
+ "start": 3000,
209
+ "duration": 1000
210
+ }
211
+ },
212
+ {
213
+ "op": "add_clip",
214
+ "track": "v1",
215
+ "clip": {
216
+ "type": "media",
217
+ "asset": "s5",
218
+ "id": "c5",
219
+ "in": 2000,
220
+ "start": 4000,
221
+ "duration": 1000
222
+ }
223
+ }
224
+ ]
225
+ }
226
+ },
227
+ {
228
+ "tool": "find_video_gaps"
229
+ }
230
+ ]
231
+ }
@@ -0,0 +1,210 @@
1
+ {
2
+ "prompt": "Lay the music under the whole montage, fade the music out over the last two seconds, and end the picture with a fade to black.",
3
+ "fixture": {
4
+ "editor": "video",
5
+ "setup": [
6
+ {
7
+ "tool": "add_video_asset",
8
+ "args": {
9
+ "id": "s1",
10
+ "kind": "video",
11
+ "src": "select-1.mp4",
12
+ "duration": 6000
13
+ }
14
+ },
15
+ {
16
+ "tool": "add_video_asset",
17
+ "args": {
18
+ "id": "s2",
19
+ "kind": "video",
20
+ "src": "select-2.mp4",
21
+ "duration": 6000
22
+ }
23
+ },
24
+ {
25
+ "tool": "add_video_asset",
26
+ "args": {
27
+ "id": "s3",
28
+ "kind": "video",
29
+ "src": "select-3.mp4",
30
+ "duration": 6000
31
+ }
32
+ },
33
+ {
34
+ "tool": "add_video_asset",
35
+ "args": {
36
+ "id": "s4",
37
+ "kind": "video",
38
+ "src": "select-4.mp4",
39
+ "duration": 6000
40
+ }
41
+ },
42
+ {
43
+ "tool": "add_video_asset",
44
+ "args": {
45
+ "id": "s5",
46
+ "kind": "video",
47
+ "src": "select-5.mp4",
48
+ "duration": 6000
49
+ }
50
+ },
51
+ {
52
+ "tool": "add_video_clip",
53
+ "args": {
54
+ "track": "v1",
55
+ "clip": {
56
+ "type": "media",
57
+ "asset": "s1",
58
+ "id": "c1",
59
+ "in": 2000,
60
+ "start": 0,
61
+ "duration": 1000
62
+ }
63
+ }
64
+ },
65
+ {
66
+ "tool": "add_video_clip",
67
+ "args": {
68
+ "track": "v1",
69
+ "clip": {
70
+ "type": "media",
71
+ "asset": "s2",
72
+ "id": "c2",
73
+ "in": 2000,
74
+ "start": 1000,
75
+ "duration": 1000
76
+ }
77
+ }
78
+ },
79
+ {
80
+ "tool": "add_video_clip",
81
+ "args": {
82
+ "track": "v1",
83
+ "clip": {
84
+ "type": "media",
85
+ "asset": "s3",
86
+ "id": "c3",
87
+ "in": 2000,
88
+ "start": 2000,
89
+ "duration": 1000
90
+ }
91
+ }
92
+ },
93
+ {
94
+ "tool": "add_video_clip",
95
+ "args": {
96
+ "track": "v1",
97
+ "clip": {
98
+ "type": "media",
99
+ "asset": "s4",
100
+ "id": "c4",
101
+ "in": 2000,
102
+ "start": 3000,
103
+ "duration": 1000
104
+ }
105
+ }
106
+ },
107
+ {
108
+ "tool": "add_video_clip",
109
+ "args": {
110
+ "track": "v1",
111
+ "clip": {
112
+ "type": "media",
113
+ "asset": "s5",
114
+ "id": "c5",
115
+ "in": 2000,
116
+ "start": 4000,
117
+ "duration": 1000
118
+ }
119
+ }
120
+ },
121
+ {
122
+ "tool": "add_video_asset",
123
+ "args": {
124
+ "id": "music",
125
+ "kind": "audio",
126
+ "src": "music.mp3",
127
+ "duration": 60000
128
+ }
129
+ }
130
+ ]
131
+ },
132
+ "checks": [
133
+ {
134
+ "why": "music under the whole montage, ending with it",
135
+ "tool": "get_video_project",
136
+ "expect": {
137
+ "tracks": {
138
+ "$some": {
139
+ "kind": "audio",
140
+ "clips": {
141
+ "$some": {
142
+ "asset": "music",
143
+ "start": 0,
144
+ "duration": 5000
145
+ }
146
+ }
147
+ }
148
+ }
149
+ }
150
+ },
151
+ {
152
+ "why": "the music fades out over about two seconds",
153
+ "tool": "get_video_project",
154
+ "expect": {
155
+ "tracks": {
156
+ "$some": {
157
+ "kind": "audio",
158
+ "clips": {
159
+ "$some": {
160
+ "asset": "music",
161
+ "fadeOut": {
162
+ "$min": 1500,
163
+ "$max": 2500
164
+ }
165
+ }
166
+ }
167
+ }
168
+ }
169
+ }
170
+ },
171
+ {
172
+ "why": "the last shot fades to black",
173
+ "tool": "get_video_project",
174
+ "expect": {
175
+ "tracks": {
176
+ "$some": {
177
+ "id": "v1",
178
+ "clips": {
179
+ "$expr": "v[v.length - 1].fadeOut >= 300"
180
+ }
181
+ }
182
+ }
183
+ }
184
+ }
185
+ ],
186
+ "solution": [
187
+ {
188
+ "tool": "add_video_clip",
189
+ "args": {
190
+ "track": "a1",
191
+ "clip": {
192
+ "type": "media",
193
+ "asset": "music",
194
+ "start": 0,
195
+ "duration": 5000,
196
+ "fadeOut": 2000
197
+ }
198
+ }
199
+ },
200
+ {
201
+ "tool": "update_video_clip",
202
+ "args": {
203
+ "clip": "c5",
204
+ "set": {
205
+ "fadeOut": 500
206
+ }
207
+ }
208
+ }
209
+ ]
210
+ }
@@ -0,0 +1,190 @@
1
+ {
2
+ "prompt": "Join the shots of this montage with short crossfades of about 400 ms, and make sure every transition has enough media for it.",
3
+ "fixture": {
4
+ "editor": "video",
5
+ "setup": [
6
+ {
7
+ "tool": "add_video_asset",
8
+ "args": {
9
+ "id": "s1",
10
+ "kind": "video",
11
+ "src": "select-1.mp4",
12
+ "duration": 6000
13
+ }
14
+ },
15
+ {
16
+ "tool": "add_video_asset",
17
+ "args": {
18
+ "id": "s2",
19
+ "kind": "video",
20
+ "src": "select-2.mp4",
21
+ "duration": 6000
22
+ }
23
+ },
24
+ {
25
+ "tool": "add_video_asset",
26
+ "args": {
27
+ "id": "s3",
28
+ "kind": "video",
29
+ "src": "select-3.mp4",
30
+ "duration": 6000
31
+ }
32
+ },
33
+ {
34
+ "tool": "add_video_asset",
35
+ "args": {
36
+ "id": "s4",
37
+ "kind": "video",
38
+ "src": "select-4.mp4",
39
+ "duration": 6000
40
+ }
41
+ },
42
+ {
43
+ "tool": "add_video_asset",
44
+ "args": {
45
+ "id": "s5",
46
+ "kind": "video",
47
+ "src": "select-5.mp4",
48
+ "duration": 6000
49
+ }
50
+ },
51
+ {
52
+ "tool": "add_video_clip",
53
+ "args": {
54
+ "track": "v1",
55
+ "clip": {
56
+ "type": "media",
57
+ "asset": "s1",
58
+ "id": "c1",
59
+ "in": 2000,
60
+ "start": 0,
61
+ "duration": 1000
62
+ }
63
+ }
64
+ },
65
+ {
66
+ "tool": "add_video_clip",
67
+ "args": {
68
+ "track": "v1",
69
+ "clip": {
70
+ "type": "media",
71
+ "asset": "s2",
72
+ "id": "c2",
73
+ "in": 2000,
74
+ "start": 1000,
75
+ "duration": 1000
76
+ }
77
+ }
78
+ },
79
+ {
80
+ "tool": "add_video_clip",
81
+ "args": {
82
+ "track": "v1",
83
+ "clip": {
84
+ "type": "media",
85
+ "asset": "s3",
86
+ "id": "c3",
87
+ "in": 2000,
88
+ "start": 2000,
89
+ "duration": 1000
90
+ }
91
+ }
92
+ },
93
+ {
94
+ "tool": "add_video_clip",
95
+ "args": {
96
+ "track": "v1",
97
+ "clip": {
98
+ "type": "media",
99
+ "asset": "s4",
100
+ "id": "c4",
101
+ "in": 2000,
102
+ "start": 3000,
103
+ "duration": 1000
104
+ }
105
+ }
106
+ },
107
+ {
108
+ "tool": "add_video_clip",
109
+ "args": {
110
+ "track": "v1",
111
+ "clip": {
112
+ "type": "media",
113
+ "asset": "s5",
114
+ "id": "c5",
115
+ "in": 2000,
116
+ "start": 4000,
117
+ "duration": 1000
118
+ }
119
+ }
120
+ }
121
+ ]
122
+ },
123
+ "checks": [
124
+ {
125
+ "why": "a short crossfade into every shot after the first",
126
+ "tool": "get_video_project",
127
+ "expect": {
128
+ "tracks": {
129
+ "$some": {
130
+ "id": "v1",
131
+ "clips": {
132
+ "$expr": "v.slice(1).every((c) => c.transition && c.transition.type === 'crossfade' && c.transition.duration >= 300 && c.transition.duration <= 600)"
133
+ }
134
+ }
135
+ }
136
+ }
137
+ },
138
+ {
139
+ "why": "no errors (every transition has handles)",
140
+ "tool": "check_video_project",
141
+ "expect": {
142
+ "errors": 0
143
+ }
144
+ }
145
+ ],
146
+ "solution": [
147
+ {
148
+ "tool": "edit_video",
149
+ "args": {
150
+ "ops": [
151
+ {
152
+ "op": "set_transition",
153
+ "clip": "c2",
154
+ "transition": {
155
+ "type": "crossfade",
156
+ "duration": 400
157
+ }
158
+ },
159
+ {
160
+ "op": "set_transition",
161
+ "clip": "c3",
162
+ "transition": {
163
+ "type": "crossfade",
164
+ "duration": 400
165
+ }
166
+ },
167
+ {
168
+ "op": "set_transition",
169
+ "clip": "c4",
170
+ "transition": {
171
+ "type": "crossfade",
172
+ "duration": 400
173
+ }
174
+ },
175
+ {
176
+ "op": "set_transition",
177
+ "clip": "c5",
178
+ "transition": {
179
+ "type": "crossfade",
180
+ "duration": 400
181
+ }
182
+ }
183
+ ]
184
+ }
185
+ },
186
+ {
187
+ "tool": "check_video_project"
188
+ }
189
+ ]
190
+ }