Skip to content

feat: add album-record-store content template#115

Merged
sweetmantech merged 10 commits intomainfrom
feature/album-record-store-template
Apr 1, 2026
Merged

feat: add album-record-store content template#115
sweetmantech merged 10 commits intomainfrom
feature/album-record-store-template

Conversation

@sweetmantech
Copy link
Copy Markdown
Contributor

@sweetmantech sweetmantech commented Mar 30, 2026

Summary

  • New template for "album art on vinyl in a record store" content
  • Includes style guide, caption guide, example captions, video moods, and video movements
  • Template data only — no code changes
  • Split from feat: add optional songs filter to content creation pipeline #112 per SRP feedback (template separate from song filtering logic)

Test plan

  • Verify template loads correctly via loadTemplate("album-record-store")
  • Verify all JSON files parse without errors

🤖 Generated with Claude Code

Summary by CodeRabbit

  • New Features

    • Added an "album record store" template: scene style, motion options, mood presets, caption guide, and example captions for vinyl/record-store video content.
  • Bug Fixes

    • Image attachments are now respected even when face-guidance is disabled.
    • Instruction selection for image generation now respects both the template style guide and face-guidance setting.
  • Tests

    • Added and updated tests covering image passthrough, face-guidance, and instruction-resolution behaviors.

New template for "album art on vinyl in a record store" content.
Includes style guide, caption guide, example captions, video moods,
and video movements. No code changes — template data only.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@coderabbitai
Copy link
Copy Markdown

coderabbitai bot commented Mar 30, 2026

Warning

Rate limit exceeded

@sweetmantech has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 9 minutes and 15 seconds before requesting another review.

Your organization is not enrolled in usage-based pricing. Contact your admin to enable usage-based pricing to continue reviews beyond the rate limit, or try again in 9 minutes and 15 seconds.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: cc6a5a70-c897-4b10-984d-694a81a35314

📥 Commits

Reviewing files that changed from the base of the PR and between 3f48f17 and c1711c3.

📒 Files selected for processing (7)
  • src/content/__tests__/falSubscribe.test.ts
  • src/content/__tests__/resolveImageInstruction.test.ts
  • src/content/falSubscribe.ts
  • src/content/generateContentImage.ts
  • src/content/resolveImageInstruction.ts
  • src/content/templates/album-record-store/style-guide.json
  • src/tasks/createContentTask.ts
📝 Walkthrough

Walkthrough

Adds an album-record-store template (style guide, caption guide, examples, video moods, video movements), introduces resolveImageInstruction, adjusts resolveFaceGuide behavior to passthrough attached images, updates generateContentImage logging/error handling, and adds related tests for face-guide and instruction resolution.

Changes

Cohort / File(s) Summary
Template: Caption Guidance & Examples
src/content/templates/album-record-store/caption-guide.json, src/content/templates/album-record-store/references/captions/examples.json
New caption-generation guide with strict formatting/tone rules and bans, plus 8 example caption strings.
Template: Style, Moods, Movements
src/content/templates/album-record-store/style-guide.json, src/content/templates/album-record-store/video-moods.json, src/content/templates/album-record-store/video-movements.json
New scene/style template for album-on-vinyl in a record-store setting (detailed imagePrompt, camera/environment/avoid lists, realism rules) and arrays of mood and motion presets.
Image instruction & face-guide resolution
src/content/resolveImageInstruction.ts, src/content/resolveFaceGuide.ts, src/content/__tests__/resolveFaceGuide.test.ts, src/content/__tests__/resolveImageInstruction.test.ts
Added resolveImageInstruction to pick customInstruction or face/no-face fallbacks; resolveFaceGuide now returns fetchImageFromUrl(images[0]) immediately when an image is attached regardless of usesFaceGuide; tests updated/added to cover both behaviors.
Image generation logging & error handling
src/content/generateContentImage.ts, src/tasks/createContentTask.ts
generateContentImage now builds a reusable input payload, logs truncated prompt (up to 200 chars) and imageUrls, and wraps fal.subscribe in try/catch with richer error logging; createContentTask uses resolveImageInstruction when composing image prompts.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

Poem

🐰 found a sleeve in a dusty row,
needle leans, the warm lights glow.
captions low, no shove or sell,
motion hums where memories dwell.
hop—this tiny template rings, and tells.

🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'feat: add album-record-store content template' directly and clearly describes the main change: introduction of a new content template for album art in a record store context.
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feature/album-record-store-template

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@src/content/templates/album-record-store/style-guide.json`:
- Line 4: The template currently sets usesFaceGuide to true which conflicts with
the template's "no person in the shot" requirement; change the usesFaceGuide
boolean to false so face-guidance is disabled for this album template (update
the usesFaceGuide property in the template JSON to false and verify any
associated face-guidance flags or validators reference usesFaceGuide rather than
a separate flag).
- Line 5: The JSON key "customInstruction" contains contradictory directives
about text: change the wording to explicitly preserve any text that is part of
the original album art while removing only extraneous
overlays/captions/watermarks added to the image or scene; update the
"customInstruction" value to state “Do NOT alter or remove any text/design that
is part of the album cover art itself; however, remove any added captions,
watermarks, or overlays that are not part of the original artwork,” and keep the
rest of the scene instructions (vinyl on turntable, sleeve placement) unchanged
so callers know exactly what to preserve versus what to strip.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 79581e6e-9df5-4e09-b0a4-7d5977d10b02

📥 Commits

Reviewing files that changed from the base of the PR and between 01ba744 and faa1830.

📒 Files selected for processing (5)
  • src/content/templates/album-record-store/caption-guide.json
  • src/content/templates/album-record-store/references/captions/examples.json
  • src/content/templates/album-record-store/style-guide.json
  • src/content/templates/album-record-store/video-moods.json
  • src/content/templates/album-record-store/video-movements.json

sweetmantech and others added 2 commits April 1, 2026 10:30
9 reference images of vinyl records in record store settings for
fal.ai scene composition guidance.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
"name": "album-record-store",
"description": "Album cover art displayed in a gritty New York record store — vinyl spinning on a turntable",
"usesFaceGuide": true,
"customInstruction": "Place the album cover art from the first image onto a vinyl record sleeve and display it prominently in the scene. The album art should be clearly visible — propped up on a shelf, leaning against a crate, or displayed on the counter next to the turntable. A vinyl record from the same album is spinning on a turntable nearby. Do NOT alter the album art — reproduce it exactly. Remove any text, captions, watermarks, or overlays from the generated scene. The album art itself should retain its original text/design.",
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

YAGNI - is customInstruction used anywhere?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If no, what else is included, but unused, in this pull request?

Move the images[] check above the usesFaceGuide guard in
resolveFaceGuide so album cover art flows through to fal.ai
without triggering face-swap logic. Set usesFaceGuide to false
for the album-record-store template.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Copy link
Copy Markdown

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (2)
src/content/__tests__/resolveFaceGuide.test.ts (1)

41-53: Optionally harden the passthrough test with negative-path assertions.

You can also assert that GitHub fetch/upload is not touched in this path, to make branch isolation explicit.

Proposed assertion additions
   it("passes attached images through even when usesFaceGuide is false", async () => {
     vi.mocked(fetchImageFromUrl).mockResolvedValue("https://fal.ai/uploaded.png");

     const result = await resolveFaceGuide({
       usesFaceGuide: false,
       images: ["https://example.com/album-cover.png"],
       githubRepo: "https://github.com/test/repo",
       artistSlug: "artist",
     });

     expect(fetchImageFromUrl).toHaveBeenCalledWith("https://example.com/album-cover.png");
+    expect(fetchGithubFile).not.toHaveBeenCalled();
+    expect(fal.storage.upload).not.toHaveBeenCalled();
     expect(result).toBe("https://fal.ai/uploaded.png");
   });
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/content/__tests__/resolveFaceGuide.test.ts` around lines 41 - 53, The
passthrough test for resolveFaceGuide currently asserts fetchImageFromUrl was
called and the returned value is forwarded; add negative-path assertions to
ensure GitHub-related code paths are not exercised in this branch by asserting
the mocked GitHub fetch/upload helpers (e.g., any mocks for functions like
fetchImageFromGithub or uploadImageToGithub used in the module) were not called;
keep using vi.mocked(...) to check those mocks were not invoked so the test
explicitly isolates the usesFaceGuide=false branch alongside the existing
fetchImageFromUrl and result assertions.
src/content/resolveFaceGuide.ts (1)

24-30: Update the function contract comment to match the new behavior.

The current docstring still reads like usesFaceGuide: false always returns null, which is no longer true when images[0] is present.

Proposed doc update
 /**
  * Resolves the face guide URL for the content pipeline.
- * Uses the first image from the images array if provided,
- * otherwise fetches face-guide.png from the artist's GitHub repo.
+ * Uses the first image from the images array if provided (even when usesFaceGuide is false).
+ * Otherwise, if usesFaceGuide is true, fetches face-guide.png from the artist's GitHub repo.
  *
- * `@returns` fal.ai storage URL, or null if template doesn't use face guide
+ * `@returns` fal.ai storage URL, or null when no image is provided and face guide is disabled
  */
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/content/resolveFaceGuide.ts` around lines 24 - 30, The function comment
for resolveFaceGuide is out of date: it states that usesFaceGuide: false always
returns null, but the implementation first checks images?.[0] (imageUrl) and
returns fetchImageFromUrl(imageUrl) even when usesFaceGuide is false. Update the
docstring for resolveFaceGuide to describe the new behavior: that an attached
image (images[0]) is always passed through via fetchImageFromUrl, and only when
no image is present does the usesFaceGuide flag determine whether null is
returned or face-guide logic runs; reference the imageUrl, images,
usesFaceGuide, and fetchImageFromUrl symbols in the updated description.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Nitpick comments:
In `@src/content/__tests__/resolveFaceGuide.test.ts`:
- Around line 41-53: The passthrough test for resolveFaceGuide currently asserts
fetchImageFromUrl was called and the returned value is forwarded; add
negative-path assertions to ensure GitHub-related code paths are not exercised
in this branch by asserting the mocked GitHub fetch/upload helpers (e.g., any
mocks for functions like fetchImageFromGithub or uploadImageToGithub used in the
module) were not called; keep using vi.mocked(...) to check those mocks were not
invoked so the test explicitly isolates the usesFaceGuide=false branch alongside
the existing fetchImageFromUrl and result assertions.

In `@src/content/resolveFaceGuide.ts`:
- Around line 24-30: The function comment for resolveFaceGuide is out of date:
it states that usesFaceGuide: false always returns null, but the implementation
first checks images?.[0] (imageUrl) and returns fetchImageFromUrl(imageUrl) even
when usesFaceGuide is false. Update the docstring for resolveFaceGuide to
describe the new behavior: that an attached image (images[0]) is always passed
through via fetchImageFromUrl, and only when no image is present does the
usesFaceGuide flag determine whether null is returned or face-guide logic runs;
reference the imageUrl, images, usesFaceGuide, and fetchImageFromUrl symbols in
the updated description.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 1ecabce6-ff8f-4fc3-b29b-31751f61b286

📥 Commits

Reviewing files that changed from the base of the PR and between faa1830 and 08cfc11.

⛔ Files ignored due to path filters (9)
  • src/content/templates/album-record-store/references/images/ref-01.png is excluded by !**/*.png
  • src/content/templates/album-record-store/references/images/ref-02.png is excluded by !**/*.png
  • src/content/templates/album-record-store/references/images/ref-03.png is excluded by !**/*.png
  • src/content/templates/album-record-store/references/images/ref-04.png is excluded by !**/*.png
  • src/content/templates/album-record-store/references/images/ref-05.png is excluded by !**/*.png
  • src/content/templates/album-record-store/references/images/ref-06.png is excluded by !**/*.png
  • src/content/templates/album-record-store/references/images/ref-07.png is excluded by !**/*.png
  • src/content/templates/album-record-store/references/images/ref-08.png is excluded by !**/*.png
  • src/content/templates/album-record-store/references/images/ref-09.png is excluded by !**/*.png
📒 Files selected for processing (3)
  • src/content/__tests__/resolveFaceGuide.test.ts
  • src/content/resolveFaceGuide.ts
  • src/content/templates/album-record-store/style-guide.json
✅ Files skipped from review due to trivial changes (1)
  • src/content/templates/album-record-store/style-guide.json

Log the full error response (status, body, imageUrls, prompt length)
when fal.ai rejects the request so we can diagnose 422 errors.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Copy link
Copy Markdown

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@src/content/generateContentImage.ts`:
- Around line 56-62: The current logger.log call in generateContentImage.ts
exposes sensitive data by logging raw imageUrls and the full serialized input;
change the log to avoid printing imageUrls and the full input payload and
instead log safe metadata such as imageCount (imageUrls.length), promptLength
(prompt.length or prompt.slice info), and inputSize
(JSON.stringify(input).length) or flags (hasImages=true) via the existing
logger.log invocation; update the call referencing the logger.log invocation in
generateContentImage.ts so it removes imageUrls and full input serialization and
replaces them with derived metadata only.
- Around line 68-74: The catch block that logs fal.ai failures (where
logger.error is called with model: config.imageModel, status: err.status,
message: err.message, body: JSON.stringify(err.body ?? err).slice(0,1000),
imageUrls) can itself throw when JSON.stringify hits circular structures; change
the body serialization to a safe-serializer pattern: attempt
JSON.stringify(err.body ?? err) inside a try/catch (or use a safeStringify
utility), truncate the result to 1000 chars, and on failure fall back to a
non-throwing representation like String(err) or util.inspect(err) so the
original error is never masked. Ensure this safe serialization is used in the
logger.error call.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 93435a80-3fe3-49a4-8926-e94e9d59391e

📥 Commits

Reviewing files that changed from the base of the PR and between 08cfc11 and dfe25fe.

📒 Files selected for processing (1)
  • src/content/generateContentImage.ts

sweetmantech and others added 2 commits April 1, 2026 11:05
Extract resolveImageInstruction() that checks for a customInstruction
field in the template's style guide before falling back to the default
face-swap or no-face instructions. This allows the album-record-store
template to tell fal.ai how to use the album cover + reference images.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Update the prompt to explicitly require the provided album cover
artwork on both the spinning vinyl record AND displayed nearby,
so the model doesn't generate different art on the turntable.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Copy link
Copy Markdown

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
src/tasks/createContentTask.ts (1)

95-103: ⚠️ Potential issue | 🟠 Major

Instruction/guide-image mismatch when attached images bypass usesFaceGuide check.

resolveFaceGuide() passes through attached images regardless of template.usesFaceGuide, but resolveImageInstruction() only checks that flag. If an attached image is provided but usesFaceGuide is false, the prompt will resolve to NO_FACE_INSTRUCTION while a face guide image is still submitted to the generation API—creating a conflict between the prompt instruction and the actual inputs.

Alignment fix
+import { NO_FACE_INSTRUCTION } from "../content/contentPrompts";
 import { resolveImageInstruction } from "../content/resolveImageInstruction";
@@
     const instruction = resolveImageInstruction({
       styleGuide: template.styleGuide,
       usesFaceGuide: template.usesFaceGuide,
     });
+    const effectiveFaceGuideUrl =
+      instruction === NO_FACE_INSTRUCTION ? undefined : faceGuideUrl ?? undefined;
@@
     let imageUrl = await generateContentImage({
-      faceGuideUrl: faceGuideUrl ?? undefined,
+      faceGuideUrl: effectiveFaceGuideUrl,
       referenceImagePath,
       prompt: fullPrompt,
     });
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/tasks/createContentTask.ts` around lines 95 - 103, The prompt/attachment
mismatch comes from passing faceGuideUrl into generateContentImage even when
template.usesFaceGuide is false while resolveImageInstruction uses usesFaceGuide
to choose NO_FACE_INSTRUCTION; fix by making the behavior consistent: either (A)
if template.usesFaceGuide is false, clear/ignore any attached faceGuideUrl
before calling generateContentImage, or (B) if an attached face guide exists and
should be honored, set usesFaceGuide=true when calling resolveImageInstruction;
update the call sites around resolveImageInstruction and generateContentImage so
both use the same usesFaceGuide decision (reference resolveImageInstruction,
generateContentImage, faceGuideUrl, and template.usesFaceGuide).
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@src/content/resolveImageInstruction.ts`:
- Around line 15-17: The current check returns styleGuide.customInstruction even
when it's only whitespace; update the early-return logic in
resolveImageInstruction to treat whitespace-only strings as empty by trimming
before length check: replace the condition that uses custom and custom.length
with a check like typeof custom === "string" && custom.trim().length > 0 so that
whitespace-only values fall through to the usesFaceGuide ? FACE_SWAP_INSTRUCTION
: NO_FACE_INSTRUCTION fallback.

---

Outside diff comments:
In `@src/tasks/createContentTask.ts`:
- Around line 95-103: The prompt/attachment mismatch comes from passing
faceGuideUrl into generateContentImage even when template.usesFaceGuide is false
while resolveImageInstruction uses usesFaceGuide to choose NO_FACE_INSTRUCTION;
fix by making the behavior consistent: either (A) if template.usesFaceGuide is
false, clear/ignore any attached faceGuideUrl before calling
generateContentImage, or (B) if an attached face guide exists and should be
honored, set usesFaceGuide=true when calling resolveImageInstruction; update the
call sites around resolveImageInstruction and generateContentImage so both use
the same usesFaceGuide decision (reference resolveImageInstruction,
generateContentImage, faceGuideUrl, and template.usesFaceGuide).
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 71edae90-0c6d-4af1-9412-bfe0549bf176

📥 Commits

Reviewing files that changed from the base of the PR and between dfe25fe and 3f48f17.

📒 Files selected for processing (4)
  • src/content/__tests__/resolveImageInstruction.test.ts
  • src/content/resolveImageInstruction.ts
  • src/content/templates/album-record-store/style-guide.json
  • src/tasks/createContentTask.ts
✅ Files skipped from review due to trivial changes (1)
  • src/content/templates/album-record-store/style-guide.json

- Remove raw imageUrls and serialized input from success logs, log
  metadata (promptLength, hasFaceGuide, hasReferenceImage) instead
- Wrap error body serialization in try/catch to handle circular refs
- Clarify customInstruction text-preservation: preserve album art
  text/design, only suppress extra scene overlays/watermarks
- Trim whitespace-only customInstruction values before using them

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
num_images: 1,
};

logger.log("Generating image", {
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Replace logger.log with logStep

}): string {
const custom = styleGuide?.customInstruction;
if (typeof custom === "string" && custom.length > 0) return custom;
return usesFaceGuide ? FACE_SWAP_INSTRUCTION : NO_FACE_INSTRUCTION;
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why aren't we using rhe styleGuide customInstructions here?

Comment on lines +96 to +99
const instruction = resolveImageInstruction({
styleGuide: template.styleGuide,
usesFaceGuide: template.usesFaceGuide,
});
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

KISS - Why not simply pass the entire template object here?

Comment on lines +64 to +83
let result;
try {
result = await fal.subscribe(config.imageModel, { input, logs: true });
} catch (error: unknown) {
const err = error as Record<string, unknown>;
let body: string;
try {
body = JSON.stringify(err.body ?? err).slice(0, 1000);
} catch {
body = String(err).slice(0, 1000);
}
logger.error("fal.ai image generation failed", {
model: config.imageModel,
status: err.status,
message: err.message,
body,
promptLength: prompt.length,
});
throw error;
}
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

SRP / OCP

  • actual: new subscribe try catch added in generateContentImage function
  • required: new lib file for the result try catch.

sweetmantech and others added 2 commits April 1, 2026 11:29
- Replace logger.log with logStep in generateContentImage for consistency
- Simplify resolveImageInstruction to accept full TemplateData instead
  of destructured fields

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Move fal.ai subscribe-with-error-logging into its own falSubscribe
module so generateContentImage stays focused on image generation.
falSubscribe handles try/catch, safe serialization, and structured
error logging for any fal.ai model call.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@sweetmantech sweetmantech merged commit c31d95e into main Apr 1, 2026
2 checks passed
@sweetmantech sweetmantech deleted the feature/album-record-store-template branch April 1, 2026 16:39
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant