@gentbajko/slopify 3.2.0 → 3.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,13 @@
1
+ # Slopify 3.2.1
2
+
3
+ Released 30 September 2026.
4
+
5
+ 3.2.1 lets one narration chunk be re-tagged without re-recording the whole narration.
6
+
7
+ ## Narration
8
+
9
+ - A chunk whose text is edited in Edit project → Narration can carry its own delivery note. The note is added to the narration prep prompt for that chunk only, so its delivery cues can change (a calmer opening, say) while every other chunk keeps its recording.
10
+
11
+ ## Upgrading from 3.2.0
12
+
13
+ - **Nothing becomes outdated.**
@@ -1,4 +1,10 @@
1
1
  [
2
+ {
3
+ "id": "3.2.1",
4
+ "title": "Slopify 3.2.1",
5
+ "version": "3.2.1",
6
+ "date": "2026-09-30"
7
+ },
2
8
  {
3
9
  "id": "3.2.0",
4
10
  "title": "Slopify 3.2.0",
@@ -26,8 +26,12 @@ export function preparationFuture(context, segment, dependency, additionalDepend
26
26
  }, [...new Set([dependency.key, ...additionalDependencies.map((row) => row.key)])]);
27
27
  }
28
28
  export function preparationForGroup(context, logicalKey, source, segment, dependsOn, maxCharacters, spans = [], aliases = [], speaker) {
29
+ // A delivery note for this chunk alone (Edit project → Narration), after the project's prompt.
30
+ const override = context.content.narrationOverrides[logicalKey];
31
+ const note = override?.kind === "text" ? override.direction : undefined;
32
+ const prompt = renderedPrompt(context, "narration");
29
33
  const preparation = recipe(context, `narration:prepare:${segment}:${logicalKey}`, "audio", {
30
- ...llmInput(context, preparationMessages(renderedPrompt(context, "narration"), source, aliases, context.config.language, speaker)),
34
+ ...llmInput(context, preparationMessages(note === undefined ? prompt : `${prompt}\n\n${note}`, source, aliases, context.config.language, speaker)),
31
35
  preparation: { format: "inworld-tts-2", version: 1, source, logicalKey, segment },
32
36
  }, dependsOn, { unresolved: source.trim() === "" });
33
37
  if (source.trim() === "")
@@ -55,7 +55,13 @@ export const revisionContentSchema = z
55
55
  .strict()),
56
56
  narrationOverrides: z.record(workKey, z.discriminatedUnion("kind", [
57
57
  z.object({ kind: z.literal("asset"), assetId: id }).strict(),
58
- z.object({ kind: z.literal("text"), text: z.string().trim().min(1).max(500000) }).strict(),
58
+ z
59
+ .object({
60
+ kind: z.literal("text"),
61
+ text: z.string().trim().min(1).max(500000),
62
+ direction: z.string().trim().min(1).max(20000).optional(),
63
+ })
64
+ .strict(),
59
65
  ])),
60
66
  narrationSources: z
61
67
  .record(workKey, z