From c8a25139c9f2df6985a5ff5b3057e2c286500694 Mon Sep 17 00:00:00 2001 From: CTO Agent Date: Tue, 7 Apr 2026 13:46:39 +0000 Subject: [PATCH 01/14] feat: add artist-release-editorial template files Add template directory with style guide, caption guide, video moods, video movements, and caption examples for editorial-style release promo content featuring artist press photos, playlist covers, and DSP branding. Co-Authored-By: Paperclip --- .../loadArtistReleaseEditorial.test.ts | 30 ++++++++++++++++ .../caption-guide.json | 31 ++++++++++++++++ .../references/captions/examples.json | 8 +++++ .../artist-release-editorial/style-guide.json | 35 +++++++++++++++++++ .../artist-release-editorial/video-moods.json | 10 ++++++ .../video-movements.json | 10 ++++++ 6 files changed, 124 insertions(+) create mode 100644 src/content/__tests__/loadArtistReleaseEditorial.test.ts create mode 100644 src/content/templates/artist-release-editorial/caption-guide.json create mode 100644 src/content/templates/artist-release-editorial/references/captions/examples.json create mode 100644 src/content/templates/artist-release-editorial/style-guide.json create mode 100644 src/content/templates/artist-release-editorial/video-moods.json create mode 100644 src/content/templates/artist-release-editorial/video-movements.json diff --git a/src/content/__tests__/loadArtistReleaseEditorial.test.ts b/src/content/__tests__/loadArtistReleaseEditorial.test.ts new file mode 100644 index 0000000..c5285ba --- /dev/null +++ b/src/content/__tests__/loadArtistReleaseEditorial.test.ts @@ -0,0 +1,30 @@ +import { describe, expect, it, vi } from "vitest"; + +vi.mock("../../sandboxes/logStep", () => ({ + logStep: vi.fn(), +})); + +import { loadTemplate } from "../loadTemplate"; + +describe("loadTemplate artist-release-editorial", () => { + it("loads the artist-release-editorial template", async () => { + const template = await loadTemplate("artist-release-editorial"); + + expect(template.name).toBe("artist-release-editorial"); + expect(template.imagePrompt).toBeTruthy(); + expect(template.usesFaceGuide).toBe(true); + expect(template.styleGuide).not.toBeNull(); + expect(template.captionGuide).not.toBeNull(); + expect(template.videoMoods.length).toBeGreaterThan(0); + expect(template.videoMovements.length).toBeGreaterThan(0); + expect(template.captionExamples.length).toBeGreaterThan(0); + }); + + it("has a customInstruction in the style guide", async () => { + const template = await loadTemplate("artist-release-editorial"); + const sg = template.styleGuide as Record; + + expect(sg.customInstruction).toBeTruthy(); + expect(typeof sg.customInstruction).toBe("string"); + }); +}); diff --git a/src/content/templates/artist-release-editorial/caption-guide.json b/src/content/templates/artist-release-editorial/caption-guide.json new file mode 100644 index 0000000..307d232 --- /dev/null +++ b/src/content/templates/artist-release-editorial/caption-guide.json @@ -0,0 +1,31 @@ +{ + "templateStyle": "editorial release promo — polished visual with artist press photo, playlist covers, and streaming platform branding. The post announces or celebrates a release landing on editorial playlists.", + "captionRole": "the caption sells the moment without being salesy. its the artist acknowledging the milestone — editorial playlist placement, the release doing numbers, or the feeling of seeing your song on a curated list.", + "tone": "confident but not bragging. grateful but not corny. the energy of an artist who knows they earned the placement.", + "rules": [ + "lowercase only", + "keep it under 100 characters for short captions, can go longer for medium", + "no punctuation at the end unless its a question mark or ellipsis", + "never sound like a press release or label marketing copy", + "never say 'out now' or 'stream now' or 'link in bio'", + "can name the playlist, the song, or the DSP naturally", + "dont describe whats in the image", + "the caption should feel like the artist typed it, not their manager", + "can reference the grind, the journey, or what the placement means to them", + "if it sounds corporate, rewrite it until it sounds human" + ], + "formats": [ + "a one-line reaction to the playlist placement ('they put me on rapcaviar and i still cant afford a couch')", + "a quiet flex acknowledging the milestone ('editorial. finally.')", + "a thank you that feels real ('yall really streamed this enough for them to notice')", + "a reflection on what the release means ('wrote this song in my car now its on new music friday')", + "a call to the fans without being pushy ('if you played this on repeat this week... i felt it')" + ], + "examples_of_good_length": [ + "editorial. finally.", + "they put me on the playlist and i still cant sleep", + "wrote this in my bedroom now its on new music friday", + "yall really made this happen", + "i keep checking if its real" + ] +} diff --git a/src/content/templates/artist-release-editorial/references/captions/examples.json b/src/content/templates/artist-release-editorial/references/captions/examples.json new file mode 100644 index 0000000..594e2eb --- /dev/null +++ b/src/content/templates/artist-release-editorial/references/captions/examples.json @@ -0,0 +1,8 @@ +[ + "editorial. finally.", + "they put me on the playlist and i still cant sleep", + "wrote this in my bedroom now its on new music friday", + "yall really made this happen", + "i keep checking if its real", + "my song is on a playlist i used to listen to before i even started making music" +] diff --git a/src/content/templates/artist-release-editorial/style-guide.json b/src/content/templates/artist-release-editorial/style-guide.json new file mode 100644 index 0000000..7a23474 --- /dev/null +++ b/src/content/templates/artist-release-editorial/style-guide.json @@ -0,0 +1,35 @@ +{ + "name": "artist-release-editorial", + "description": "Editorial promo featuring artist press photo with playlist covers and DSP branding — the kind of polished-but-organic visual an artist's team drops alongside a new release", + "usesFaceGuide": true, + "customInstruction": "Generate an editorial-style press photo of the artist. The image should look like a professional press photo taken for a magazine feature or playlist editorial — polished lighting but still feeling authentic and personal. Do NOT composite playlist covers or logos into the AI-generated image. Those elements will be overlaid separately in post-production.", + "imagePrompt": "A professional editorial press photo of an artist. Clean, intentional lighting — soft key light with subtle rim light separation. The artist is posed naturally, looking directly at camera or slightly off-axis. The background is a solid or subtly textured surface (concrete wall, draped fabric, muted gradient) that does not distract from the subject. The mood is confident and polished but not sterile. Shot on a DSLR or medium format camera, shallow depth of field, cinematic color grade leaning warm or desaturated depending on the artist's aesthetic.", + + "camera": { + "type": "DSLR or medium format, editorial portrait lens (85mm-135mm equivalent)", + "angle": "eye level or slightly below, straight on or slight three-quarter turn", + "quality": "clean, sharp focus on the subject, natural skin texture visible, cinematic color grade", + "focus": "subject tack sharp, background falls off smoothly with shallow depth of field" + }, + + "environment": { + "feel": "editorial — intentional, curated but not over-produced", + "lighting": "soft key light from the side, subtle fill, rim light for separation. Warm or cool depending on mood. Not flat studio lighting — has dimension and direction.", + "backgrounds": "solid or subtly textured — concrete, fabric drape, muted color wash, out-of-focus urban environment. Clean enough to overlay text and graphics.", + "avoid": "busy backgrounds, visible branding, cluttered sets, green screen look, over-saturated colors, heavy HDR" + }, + + "subject": { + "expression": "confident, intentional — not smiling for the camera but not stone-faced either. The look of someone who knows the music speaks for itself.", + "pose": "natural editorial pose — shoulders slightly turned, hands relaxed, not stiff or over-directed. Can be seated, standing, or leaning.", + "clothing": "stylish but authentic to the artist — not costume-y. Could be anything from a clean hoodie to tailored jacket depending on the artist's brand.", + "framing": "medium shot (waist up) or medium close-up (chest up) — leave space for overlaid graphics on the sides or bottom" + }, + + "realism": { + "priority": "the image must look like an actual editorial press photo, not AI-generated. Think Apple Music editorial playlist cover quality.", + "texture": "natural skin texture, fabric detail, subtle imperfections that make it feel real", + "imperfections": "a stray hair, slight asymmetry in pose, natural skin texture — not airbrushed smooth", + "avoid": "plastic skin, symmetrical face, uncanny valley eyes, overly saturated or HDR look, stock photo posing" + } +} diff --git a/src/content/templates/artist-release-editorial/video-moods.json b/src/content/templates/artist-release-editorial/video-moods.json new file mode 100644 index 0000000..9d34781 --- /dev/null +++ b/src/content/templates/artist-release-editorial/video-moods.json @@ -0,0 +1,10 @@ +[ + "quiet confidence, the calm after you find out your song made the playlist", + "proud but understated, like posting a W without needing to explain it", + "grateful energy, remembering everyone who played it on repeat", + "reflective, thinking about where you started vs where the song ended up", + "celebratory but cool, not popping bottles — just a knowing nod", + "determined, this placement is fuel not a finish line", + "surreal, still processing that its real", + "warm, the feeling of your team hitting you with the screenshot" +] diff --git a/src/content/templates/artist-release-editorial/video-movements.json b/src/content/templates/artist-release-editorial/video-movements.json new file mode 100644 index 0000000..5a8085a --- /dev/null +++ b/src/content/templates/artist-release-editorial/video-movements.json @@ -0,0 +1,10 @@ +[ + "nearly still, only natural breathing — the artist holds the frame with quiet confidence", + "slow subtle head turn toward camera, locks eyes with the lens", + "the faintest nod, like acknowledging something only they understand", + "a slow exhale, shoulders drop slightly as if releasing tension", + "eyes drift down then slowly back up to camera, contemplative", + "jaw sets slightly, the look of someone who earned this", + "the corner of their mouth lifts barely — not a full smile, just satisfaction", + "a slow blink, maintaining eye contact, completely present" +] From d044bae6b9fa16f015e41a2bee7fb967fb61abdd Mon Sep 17 00:00:00 2001 From: Sweets Sweetman Date: Tue, 7 Apr 2026 14:33:43 -0500 Subject: [PATCH 02/14] fix: update artist-release-editorial to composite playlist covers and logos MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Style guide now instructs image generation to combine the artist press photo with playlist covers and streaming logos into a unified composite image, matching reference style - Remove incorrect instruction about not compositing covers/logos - Fix typo: its → it's in video-moods.json Co-Authored-By: Claude Opus 4.6 (1M context) --- .../templates/artist-release-editorial/style-guide.json | 8 ++++---- .../templates/artist-release-editorial/video-moods.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/content/templates/artist-release-editorial/style-guide.json b/src/content/templates/artist-release-editorial/style-guide.json index 7a23474..7bb61fe 100644 --- a/src/content/templates/artist-release-editorial/style-guide.json +++ b/src/content/templates/artist-release-editorial/style-guide.json @@ -2,8 +2,8 @@ "name": "artist-release-editorial", "description": "Editorial promo featuring artist press photo with playlist covers and DSP branding — the kind of polished-but-organic visual an artist's team drops alongside a new release", "usesFaceGuide": true, - "customInstruction": "Generate an editorial-style press photo of the artist. The image should look like a professional press photo taken for a magazine feature or playlist editorial — polished lighting but still feeling authentic and personal. Do NOT composite playlist covers or logos into the AI-generated image. Those elements will be overlaid separately in post-production.", - "imagePrompt": "A professional editorial press photo of an artist. Clean, intentional lighting — soft key light with subtle rim light separation. The artist is posed naturally, looking directly at camera or slightly off-axis. The background is a solid or subtly textured surface (concrete wall, draped fabric, muted gradient) that does not distract from the subject. The mood is confident and polished but not sterile. Shot on a DSLR or medium format camera, shallow depth of field, cinematic color grade leaning warm or desaturated depending on the artist's aesthetic.", + "customInstruction": "Generate an editorial-style composite image that combines a professional press photo of the artist with playlist covers and streaming platform logos into a single unified image. Use the provided playlist covers and logo attachments as source material — match the layout and composition style shown in the reference images. The final image should look like a polished editorial promo card an artist's team would post alongside a new release.", + "imagePrompt": "An editorial composite image featuring an artist press photo combined with playlist cover art and streaming platform logos. The artist is the focal point — a professional editorial portrait with polished lighting, natural pose, and cinematic color grade. Playlist cover art tiles and streaming logos (Spotify, Apple Music, etc.) are composited into the layout around the artist, matching the reference style. The composition is clean and intentional — everything feels like one cohesive design, not a collage. Background is a solid or subtly textured surface that ties the elements together.", "camera": { "type": "DSLR or medium format, editorial portrait lens (85mm-135mm equivalent)", @@ -15,8 +15,8 @@ "environment": { "feel": "editorial — intentional, curated but not over-produced", "lighting": "soft key light from the side, subtle fill, rim light for separation. Warm or cool depending on mood. Not flat studio lighting — has dimension and direction.", - "backgrounds": "solid or subtly textured — concrete, fabric drape, muted color wash, out-of-focus urban environment. Clean enough to overlay text and graphics.", - "avoid": "busy backgrounds, visible branding, cluttered sets, green screen look, over-saturated colors, heavy HDR" + "backgrounds": "solid or subtly textured — concrete, fabric drape, muted color wash, out-of-focus urban environment. Clean enough to support composited playlist covers and logos.", + "avoid": "busy backgrounds, cluttered sets, green screen look, over-saturated colors, heavy HDR, disjointed collage look" }, "subject": { diff --git a/src/content/templates/artist-release-editorial/video-moods.json b/src/content/templates/artist-release-editorial/video-moods.json index 9d34781..38980c4 100644 --- a/src/content/templates/artist-release-editorial/video-moods.json +++ b/src/content/templates/artist-release-editorial/video-moods.json @@ -5,6 +5,6 @@ "reflective, thinking about where you started vs where the song ended up", "celebratory but cool, not popping bottles — just a knowing nod", "determined, this placement is fuel not a finish line", - "surreal, still processing that its real", + "surreal, still processing that it's real", "warm, the feeling of your team hitting you with the screenshot" ] From 449f0cf6d6a25ae8f2d0adc006cd21888dead998 Mon Sep 17 00:00:00 2001 From: Sweets Sweetman Date: Tue, 7 Apr 2026 14:37:41 -0500 Subject: [PATCH 03/14] chore: rename reference images to match naming convention ref-01.png through ref-04.png, matching the pattern used by artist-caption-bedroom template. Co-Authored-By: Claude Opus 4.6 (1M context) --- .../references/images/ref-01.png | Bin 0 -> 1881216 bytes .../references/images/ref-02.png | Bin 0 -> 1842669 bytes .../references/images/ref-03.png | Bin 0 -> 2418279 bytes .../references/images/ref-04.png | Bin 0 -> 1960250 bytes 4 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/content/templates/artist-release-editorial/references/images/ref-01.png create mode 100644 src/content/templates/artist-release-editorial/references/images/ref-02.png create mode 100644 src/content/templates/artist-release-editorial/references/images/ref-03.png create mode 100644 src/content/templates/artist-release-editorial/references/images/ref-04.png diff --git a/src/content/templates/artist-release-editorial/references/images/ref-01.png b/src/content/templates/artist-release-editorial/references/images/ref-01.png new file mode 100644 index 0000000000000000000000000000000000000000..87cf7ecbfaa28422975cc05860be756436817a01 GIT binary patch literal 1881216 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