@gentbajko/slopify 3.25.7 → 3.25.9
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/dist/extension/slopify-studio-chrome.zip +0 -0
- package/dist/extension/slopify-studio-firefox.zip +0 -0
- package/dist/patch-notes/3.25.8.md +5 -0
- package/dist/patch-notes/3.25.9.md +5 -0
- package/dist/patch-notes/index.json +12 -0
- package/dist/slices/rebuild/recipe-save.js +11 -2
- package/dist/slices/rebuild/runtime-shorts.js +9 -5
- package/package.json +1 -1
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
# Slopify 3.25.8
|
|
2
|
+
|
|
3
|
+
Released 17 October 2026.
|
|
4
|
+
|
|
5
|
+
- **Older projects' shorts follow a changed narration.** On a project made before Slopify kept track of each short's render, saving it again after levelling or softening the narration kept the old shorts as if they were current. Their renders now read out of date and are made again on this computer, with nothing paid.
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
# Slopify 3.25.9
|
|
2
|
+
|
|
3
|
+
Released 17 October 2026.
|
|
4
|
+
|
|
5
|
+
- **An older project's shorts render again.** Remaking the shorts of a project made before an earlier change to how Slopify recognises finished work failed with "The clip this short was cut from is no longer among the picked shorts". The shorts now render from the moments already picked.
|
|
@@ -1,4 +1,16 @@
|
|
|
1
1
|
[
|
|
2
|
+
{
|
|
3
|
+
"id": "3.25.9",
|
|
4
|
+
"title": "Slopify 3.25.9",
|
|
5
|
+
"version": "3.25.9",
|
|
6
|
+
"date": "2026-10-17"
|
|
7
|
+
},
|
|
8
|
+
{
|
|
9
|
+
"id": "3.25.8",
|
|
10
|
+
"title": "Slopify 3.25.8",
|
|
11
|
+
"version": "3.25.8",
|
|
12
|
+
"date": "2026-10-17"
|
|
13
|
+
},
|
|
2
14
|
{
|
|
3
15
|
"id": "3.25.7",
|
|
4
16
|
"title": "Slopify 3.25.7",
|
|
@@ -216,8 +216,8 @@ function planEdit(base, edit, prepared, inspected, keeping) {
|
|
|
216
216
|
const fingerprints = Object.fromEntries(desired.map((row) => [row.key, row.fingerprint]));
|
|
217
217
|
const outputs = proposedManifest.outputs.map((row) => {
|
|
218
218
|
const next = desired.find((value) => value.key === row.workKey);
|
|
219
|
-
const
|
|
220
|
-
|
|
219
|
+
const before = old.find((value) => value.key === row.workKey)?.fingerprint;
|
|
220
|
+
const unchanged = next !== undefined && before === next.fingerprint && !staleRender(base, row, before);
|
|
221
221
|
const state = next === undefined
|
|
222
222
|
? row.state
|
|
223
223
|
: prepared.outputs.includes(row) || (unchanged && row.state === "ready")
|
|
@@ -248,6 +248,15 @@ function planEdit(base, edit, prepared, inspected, keeping) {
|
|
|
248
248
|
shortMoves: [...moves.entries()],
|
|
249
249
|
};
|
|
250
250
|
}
|
|
251
|
+
// A render a version from an older Slopify never recorded, made for another recipe than the
|
|
252
|
+
// one the version asks for: its narration was changed (levelled or softened) since, and saving
|
|
253
|
+
// the version again must not take the old file for the new render. Only renders: they are made
|
|
254
|
+
// on this computer and nothing paid is made from them.
|
|
255
|
+
function staleRender(base, row, before) {
|
|
256
|
+
return ((row.workKey === "export:video" || /^shorts:\d+:render$/.test(row.workKey)) &&
|
|
257
|
+
base.revision.fingerprints[row.workKey] === undefined &&
|
|
258
|
+
row.fingerprint !== before);
|
|
259
|
+
}
|
|
251
260
|
function normalizeImages(content) {
|
|
252
261
|
return {
|
|
253
262
|
...content,
|
|
@@ -317,12 +317,16 @@ async function render(deps, context, piece, snapshot, clip) {
|
|
|
317
317
|
}
|
|
318
318
|
// The clips the pick saved for this plan, with any range set by hand in place: the
|
|
319
319
|
// selected pick whose fingerprint is the one the plan asks for.
|
|
320
|
-
function savedClips(snapshot) {
|
|
320
|
+
export function savedClips(snapshot) {
|
|
321
321
|
const recipe = snapshot.plan.recipes.find((one) => one.key === shortsPickKey);
|
|
322
|
-
const
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
322
|
+
const done = snapshot.view.pieces.filter((one) => one.key === shortsPickKey && one.selected && one.piece.state === "done");
|
|
323
|
+
// A project from before an older fingerprint scheme keeps its pick under another
|
|
324
|
+
// fingerprint; the plan planned its clips from the version's one selected pick
|
|
325
|
+
// (`savedPicked` in `recipe-shorts.ts`), so the clips are that pick's.
|
|
326
|
+
const row = done.find((one) => one.fingerprint === recipe?.fingerprint) ??
|
|
327
|
+
(done.length === 1 && snapshot.plan.recipes.some((one) => /^shorts:\d+:/.test(one.key))
|
|
328
|
+
? done[0]
|
|
329
|
+
: undefined);
|
|
326
330
|
const picked = pickedShortsOf(row?.piece.payload);
|
|
327
331
|
const shorts = snapshot.view.revision.config.shorts;
|
|
328
332
|
if (picked === undefined || recipe === undefined || shorts === undefined)
|