From 65509ab600bf93dbde80290c1803b3d4728c2470 Mon Sep 17 00:00:00 2001 From: Gosku Date: Sat, 25 Jul 2026 15:38:37 +1000 Subject: [PATCH 01/15] Extract shared card rendering primitives into rendering.py Move the design-agnostic Pillow helpers (cover_fill, build_gradient, load_font, make_qr, embed_recipe_exif) and the shared constants (QR size, blur radius, gradient colours) out of the cards operations module into a new rendering module. Introduce a RenderedCard value object for the (canvas, json_str, embed_exif) compose result. This is a pure extraction with no behaviour change: _compose_card now delegates to the shared primitives and returns a RenderedCard. It sets up the shared foundation that the upcoming pluggable card designs will reuse. Co-Authored-By: Claude Opus 4.8 --- src/domain/recipes/cards/operations.py | 117 ++++++------------ src/domain/recipes/cards/rendering.py | 105 ++++++++++++++++ .../domain/recipes/cards/test_rendering.py | 54 ++++++++ 3 files changed, 194 insertions(+), 82 deletions(-) create mode 100644 src/domain/recipes/cards/rendering.py create mode 100644 tests/unit/domain/recipes/cards/test_rendering.py diff --git a/src/domain/recipes/cards/operations.py b/src/domain/recipes/cards/operations.py index 38d587e..0d7f365 100644 --- a/src/domain/recipes/cards/operations.py +++ b/src/domain/recipes/cards/operations.py @@ -7,23 +7,18 @@ from pathlib import Path import attrs -import piexif # type: ignore[import-untyped] from PIL import Image as PILImage -from PIL import ImageDraw, ImageFilter, ImageFont - -import qrcode # type: ignore[import-untyped] -import qrcode.image.pil # type: ignore[import-untyped] +from PIL import ImageDraw, ImageFilter from django.db import transaction from src.data import models from src.domain.images import events from src.domain.recipes.cards import queries as card_queries +from src.domain.recipes.cards import rendering from src.domain.recipes.cards import templates as card_templates -_QR_SIZE = 300 _QR_MARGIN = 20 -_BLUR_RADIUS = 12 _PANEL_ALPHA = 140 # 0-255 opacity of the text-readability overlay panel _TEXT_PADDING = 40 _LINE_HEIGHT = 44 @@ -36,61 +31,6 @@ _LOGO_WIDTH = 320 _LOGO_PADDING = 20 -# Gradient colours (dark teal → dark indigo) -_GRADIENT_TOP = (18, 52, 64) -_GRADIENT_BOTTOM = (30, 20, 70) - - -def _cover_fill(img: PILImage.Image, target_w: int, target_h: int) -> PILImage.Image: - """ - Scale *img* so it fills (target_w × target_h) with no empty space, then center-crop. - """ - scale = max(target_w / img.width, target_h / img.height) - new_w = int(img.width * scale) - new_h = int(img.height * scale) - img = img.resize((new_w, new_h), PILImage.Resampling.LANCZOS) - left = (new_w - target_w) // 2 - top = (new_h - target_h) // 2 - return img.crop((left, top, left + target_w, top + target_h)) - - -def _build_gradient(width: int, height: int) -> PILImage.Image: - """ - Return a soft vertical gradient from _GRADIENT_TOP to _GRADIENT_BOTTOM. - """ - img = PILImage.new("RGB", (width, height)) - draw = ImageDraw.Draw(img) - r0, g0, b0 = _GRADIENT_TOP - r1, g1, b1 = _GRADIENT_BOTTOM - for y in range(height): - t = y / (height - 1) - r = int(r0 + (r1 - r0) * t) - g = int(g0 + (g1 - g0) * t) - b = int(b0 + (b1 - b0) * t) - draw.line([(0, y), (width, y)], fill=(r, g, b)) - return img - - -def _load_font(size: int) -> ImageFont.FreeTypeFont | ImageFont.ImageFont: - for name in ("DejaVuSans.ttf", "LiberationSans-Regular.ttf", "Arial.ttf"): - try: - return ImageFont.truetype(name, size) - except OSError: - continue - return ImageFont.load_default() - - -def _embed_recipe_exif(*, filepath: Path, json_str: str) -> None: - """ - Embed recipe JSON into the UserComment EXIF field of the saved JPEG at filepath. - """ - exif_bytes = piexif.dump({ - "Exif": { - piexif.ExifIFD.UserComment: b"ASCII\x00\x00\x00" + json_str.encode("ascii"), - } - }) - piexif.insert(exif_bytes, str(filepath)) - def _compose_card( *, @@ -98,21 +38,21 @@ def _compose_card( template: card_templates.CardTemplate, background_image: models.Image | None, info_side: card_templates.InfoSide, -) -> tuple[PILImage.Image, str, bool]: +) -> rendering.RenderedCard: """ - Build the card PIL image. Returns (canvas, json_str, use_gradient). + Build the card PIL image. *info_side* chooses which half holds the info text + logo; the QR code goes on the opposite bottom corner. """ target_w, target_h = template.output_size if background_image is None: - canvas = _build_gradient(target_w, target_h) + canvas = rendering.build_gradient(target_w, target_h) else: with PILImage.open(background_image.filepath) as img: - canvas = _cover_fill(img.convert("RGB"), target_w, target_h) + canvas = rendering.cover_fill(img.convert("RGB"), target_w, target_h) if template.background_effect == "blur": - canvas = canvas.filter(ImageFilter.GaussianBlur(radius=_BLUR_RADIUS)) + canvas = canvas.filter(ImageFilter.GaussianBlur(radius=rendering.BLUR_RADIUS)) panel_w = target_w // 2 panel_x = 0 if info_side == "left" else target_w - panel_w @@ -122,13 +62,13 @@ def _compose_card( canvas = canvas_rgba.convert("RGB") draw = ImageDraw.Draw(canvas) - label_font = _load_font(_FONT_SIZE) - value_font = _load_font(_FONT_SIZE) + label_font = rendering.load_font(_FONT_SIZE) + value_font = rendering.load_font(_FONT_SIZE) lines = card_queries.get_recipe_cover_lines(recipe=recipe, template=template) x = panel_x + _TEXT_PADDING y = _TEXT_PADDING if recipe.name: - title_font = _load_font(_TITLE_FONT_SIZE) + title_font = rendering.load_font(_TITLE_FONT_SIZE) draw.text((x, y), recipe.name, font=title_font, fill=_VALUE_COLOR) y += _TITLE_LINE_HEIGHT for line in lines: @@ -140,10 +80,9 @@ def _compose_card( y += _LINE_HEIGHT json_str = card_queries.get_recipe_as_json(recipe=recipe) - qr_img = qrcode.make(json_str) - qr_img = qr_img.resize((_QR_SIZE, _QR_SIZE), PILImage.Resampling.LANCZOS) - qr_x = _QR_MARGIN if info_side == "right" else target_w - _QR_SIZE - _QR_MARGIN - qr_pos = (qr_x, target_h - _QR_SIZE - _QR_MARGIN) + qr_img = rendering.make_qr(json_str) + qr_x = _QR_MARGIN if info_side == "right" else target_w - rendering.QR_SIZE - _QR_MARGIN + qr_pos = (qr_x, target_h - rendering.QR_SIZE - _QR_MARGIN) canvas.paste(qr_img, qr_pos) if _LOGO_PATH.exists(): @@ -162,7 +101,11 @@ def _compose_card( canvas_rgba.paste(logo, (logo_x, logo_y), logo) canvas = canvas_rgba.convert("RGB") - return canvas, json_str, background_image is None + return rendering.RenderedCard( + canvas=canvas, + json_str=json_str, + embed_exif=background_image is None, + ) def _save_card( @@ -170,11 +113,11 @@ def _save_card( canvas: PILImage.Image, filepath: Path, json_str: str, - use_gradient: bool, + embed_exif: bool, ) -> None: canvas.save(str(filepath), format="JPEG", quality=90) - if use_gradient: - _embed_recipe_exif(filepath=filepath, json_str=json_str) + if embed_exif: + rendering.embed_recipe_exif(filepath=filepath, json_str=json_str) def preview_recipe_card_image( @@ -192,13 +135,18 @@ def preview_recipe_card_image( deterministic /tmp/ path) so successive previews for the same options overwrite the previous file rather than accumulating. """ - canvas, json_str, use_gradient = _compose_card( + rendered = _compose_card( recipe=recipe, template=template, background_image=background_image, info_side=info_side, ) - _save_card(canvas=canvas, filepath=output_path, json_str=json_str, use_gradient=use_gradient) + _save_card( + canvas=rendered.canvas, + filepath=output_path, + json_str=rendered.json_str, + embed_exif=rendered.embed_exif, + ) return output_path @@ -218,14 +166,19 @@ def create_recipe_card_image( If background_image is None, generates a soft gradient background and embeds the recipe JSON into the EXIF UserComment so the card can be re-imported. """ - canvas, json_str, use_gradient = _compose_card( + rendered = _compose_card( recipe=recipe, template=template, background_image=background_image, info_side=info_side, ) filepath = output_dir / f"recipe_{recipe.pk}_{uuid.uuid4().hex[:8]}.jpg" - _save_card(canvas=canvas, filepath=filepath, json_str=json_str, use_gradient=use_gradient) + _save_card( + canvas=rendered.canvas, + filepath=filepath, + json_str=rendered.json_str, + embed_exif=rendered.embed_exif, + ) return filepath diff --git a/src/domain/recipes/cards/rendering.py b/src/domain/recipes/cards/rendering.py new file mode 100644 index 0000000..c485979 --- /dev/null +++ b/src/domain/recipes/cards/rendering.py @@ -0,0 +1,105 @@ +from __future__ import annotations + +from pathlib import Path + +import attrs +import piexif # type: ignore[import-untyped] +from PIL import Image as PILImage +from PIL import ImageDraw, ImageFont + +import qrcode # type: ignore[import-untyped] +import qrcode.image.pil # type: ignore[import-untyped] + + +# The QR code is a shared global across every card design: the same size and +# specs are used everywhere so any reader scans a card reliably regardless of +# which design produced it. +QR_SIZE = 300 + +# Softening radius applied to a photo background when a design blurs it. +BLUR_RADIUS = 12 + +# Gradient colours for the no-photo fallback background (dark teal -> dark indigo). +GRADIENT_TOP = (18, 52, 64) +GRADIENT_BOTTOM = (30, 20, 70) + +# Prefix piexif writes before the payload when embedding recipe JSON. +_EXIF_ASCII_PREFIX = b"ASCII\x00\x00\x00" + + +@attrs.frozen +class RenderedCard: + """ + The output of a card design: the composed image plus its QR payload. + + ``embed_exif`` is True when the recipe JSON should additionally be written + to the JPEG EXIF UserComment. This is done for no-photo (gradient) cards so + they remain re-importable even where a scannable QR is not relied upon. + """ + + canvas: PILImage.Image + json_str: str + embed_exif: bool + + +def cover_fill(img: PILImage.Image, target_w: int, target_h: int) -> PILImage.Image: + """ + Scale *img* so it fills (target_w x target_h) with no empty space, then center-crop. + """ + scale = max(target_w / img.width, target_h / img.height) + new_w = int(img.width * scale) + new_h = int(img.height * scale) + img = img.resize((new_w, new_h), PILImage.Resampling.LANCZOS) + left = (new_w - target_w) // 2 + top = (new_h - target_h) // 2 + return img.crop((left, top, left + target_w, top + target_h)) + + +def build_gradient(width: int, height: int) -> PILImage.Image: + """ + Return a soft vertical gradient from GRADIENT_TOP to GRADIENT_BOTTOM. + """ + img = PILImage.new("RGB", (width, height)) + draw = ImageDraw.Draw(img) + r0, g0, b0 = GRADIENT_TOP + r1, g1, b1 = GRADIENT_BOTTOM + for y in range(height): + t = y / (height - 1) + r = int(r0 + (r1 - r0) * t) + g = int(g0 + (g1 - g0) * t) + b = int(b0 + (b1 - b0) * t) + draw.line([(0, y), (width, y)], fill=(r, g, b)) + return img + + +def load_font(size: int) -> ImageFont.FreeTypeFont | ImageFont.ImageFont: + """ + Return a sans-serif TrueType font at *size*, falling back to the PIL default. + """ + for name in ("DejaVuSans.ttf", "LiberationSans-Regular.ttf", "Arial.ttf"): + try: + return ImageFont.truetype(name, size) + except OSError: + continue + return ImageFont.load_default() + + +def make_qr(json_str: str, *, size: int = QR_SIZE) -> PILImage.Image: + """ + Return a *size* x *size* QR code image encoding *json_str*. + """ + qr_img = qrcode.make(json_str) + resized: PILImage.Image = qr_img.resize((size, size), PILImage.Resampling.LANCZOS) + return resized + + +def embed_recipe_exif(*, filepath: Path, json_str: str) -> None: + """ + Embed recipe JSON into the UserComment EXIF field of the saved JPEG at filepath. + """ + exif_bytes = piexif.dump({ + "Exif": { + piexif.ExifIFD.UserComment: _EXIF_ASCII_PREFIX + json_str.encode("ascii"), + } + }) + piexif.insert(exif_bytes, str(filepath)) diff --git a/tests/unit/domain/recipes/cards/test_rendering.py b/tests/unit/domain/recipes/cards/test_rendering.py new file mode 100644 index 0000000..7243124 --- /dev/null +++ b/tests/unit/domain/recipes/cards/test_rendering.py @@ -0,0 +1,54 @@ +from pathlib import Path + +from PIL import Image as PILImage + +from src.domain.recipes.cards import queries as card_queries +from src.domain.recipes.cards import rendering + + +class TestCoverFill: + def test_returns_image_at_exact_target_size(self) -> None: + source = PILImage.new("RGB", (400, 200), (10, 20, 30)) + + result = rendering.cover_fill(source, 100, 100) + + assert result.size == (100, 100) + + def test_fills_without_letterboxing_a_wide_source(self) -> None: + # A wide source cropped to a square must cover the whole target: every + # pixel comes from the source colour, never an empty/black border. + source = PILImage.new("RGB", (400, 200), (10, 20, 30)) + + result = rendering.cover_fill(source, 100, 100) + + assert result.getextrema() == ((10, 10), (20, 20), (30, 30)) + + +class TestBuildGradient: + def test_returns_image_at_requested_size(self) -> None: + gradient = rendering.build_gradient(64, 128) + + assert gradient.size == (64, 128) + + def test_top_row_matches_gradient_top_colour(self) -> None: + gradient = rendering.build_gradient(64, 128) + + assert gradient.getpixel((0, 0)) == rendering.GRADIENT_TOP + + +class TestMakeQr: + def test_returns_qr_at_the_shared_global_size(self) -> None: + qr = rendering.make_qr('{"v":2}') + + assert qr.size == (rendering.QR_SIZE, rendering.QR_SIZE) + + +class TestEmbedRecipeExif: + def test_embedded_json_round_trips_through_the_reader(self, tmp_path: Path) -> None: + filepath = tmp_path / "card.jpg" + PILImage.new("RGB", (10, 10), (0, 0, 0)).save(str(filepath), format="JPEG") + json_str = '{"v":2,"film_simulation":"Provia"}' + + rendering.embed_recipe_exif(filepath=filepath, json_str=json_str) + + assert card_queries._read_exif_recipe(image_path=str(filepath)) == json_str From 5942cc451a10b6e174f083b669f3e40761e40af1 Mon Sep 17 00:00:00 2001 From: Gosku Date: Sat, 25 Jul 2026 15:48:13 +1000 Subject: [PATCH 02/15] Add CardDesign ABC and ClassicDesign Introduce a designs/ package with a CardDesign abstract base class (the polymorphic seam for pluggable card designs) and a ClassicDesign that reproduces the current square-card composition. The four legacy templates collapse into one ClassicDesign parameterized by label_style / background_effect / info_side; its template_name property reproduces the existing persisted strings for backward compatibility. Decouple get_recipe_cover_lines from CardTemplate: it now takes a label_style string, so ClassicDesign (and future designs) no longer depend on the templates module. ClassicDesign is not yet wired into operations; that swap happens next. Co-Authored-By: Claude Opus 4.8 --- src/domain/recipes/cards/designs/__init__.py | 0 src/domain/recipes/cards/designs/base.py | 53 +++++++ src/domain/recipes/cards/designs/classic.py | 130 ++++++++++++++++++ src/domain/recipes/cards/operations.py | 2 +- src/domain/recipes/cards/queries.py | 16 +-- .../recipes/cards/test_recipe_card_queries.py | 26 ++-- .../recipes/cards/test_classic_design.py | 109 +++++++++++++++ 7 files changed, 314 insertions(+), 22 deletions(-) create mode 100644 src/domain/recipes/cards/designs/__init__.py create mode 100644 src/domain/recipes/cards/designs/base.py create mode 100644 src/domain/recipes/cards/designs/classic.py create mode 100644 tests/unit/domain/recipes/cards/test_classic_design.py diff --git a/src/domain/recipes/cards/designs/__init__.py b/src/domain/recipes/cards/designs/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/domain/recipes/cards/designs/base.py b/src/domain/recipes/cards/designs/base.py new file mode 100644 index 0000000..e98482c --- /dev/null +++ b/src/domain/recipes/cards/designs/base.py @@ -0,0 +1,53 @@ +from __future__ import annotations + +import abc +from typing import ClassVar + +from src.data import models +from src.domain.recipes.cards import rendering + + +class CardDesign(abc.ABC): + """ + A recipe card design: a self-contained strategy for composing a card image. + + Each concrete design owns its full layout in render(). Design-agnostic + concerns (QR generation and spec, EXIF embedding, file saving) live in the + rendering module and the cards operations module, so every design produces a + scannable, importable card regardless of its look. + + Concrete designs declare three pieces of metadata: + + - ``template_name``: the identifier persisted on ``RecipeCard.template`` and + emitted in the ``recipe.card.created`` event. Must stay stable across + releases so existing rows and event history remain meaningful. + - ``output_size``: the fixed output canvas size in pixels. + - ``requires_background_image``: whether the design needs a real photo (a + photo-centric layout) rather than being able to fall back to a generated + gradient background. + """ + + output_size: ClassVar[tuple[int, int]] + requires_background_image: ClassVar[bool] + + @property + @abc.abstractmethod + def template_name(self) -> str: + """ + Return the stable identifier stored on the card and the event. + """ + + @abc.abstractmethod + def render( + self, + *, + recipe: models.FujifilmRecipe, + background_image: models.Image | None, + ) -> rendering.RenderedCard: + """ + Compose the card image for *recipe* over *background_image*. + + When *background_image* is None the design falls back to a generated + gradient background (only designs where requires_background_image is + False are expected to be called this way). + """ diff --git a/src/domain/recipes/cards/designs/classic.py b/src/domain/recipes/cards/designs/classic.py new file mode 100644 index 0000000..d819a6c --- /dev/null +++ b/src/domain/recipes/cards/designs/classic.py @@ -0,0 +1,130 @@ +from __future__ import annotations + +from pathlib import Path +from typing import ClassVar, Literal + +import attrs +from PIL import Image as PILImage +from PIL import ImageDraw, ImageFilter + +from src.data import models +from src.domain.recipes.cards import queries as card_queries +from src.domain.recipes.cards import rendering +from src.domain.recipes.cards.designs import base + +LabelStyle = Literal["long", "short"] +BackgroundEffect = Literal["none", "blur"] +InfoSide = Literal["left", "right"] + +DEFAULT_INFO_SIDE: InfoSide = "left" + +_OUTPUT_SIZE = (1080, 1080) +_QR_MARGIN = 20 +_PANEL_ALPHA = 140 # 0-255 opacity of the text-readability overlay panel +_TEXT_PADDING = 40 +_LINE_HEIGHT = 44 +_FONT_SIZE = 28 +_TITLE_FONT_SIZE = 34 +_TITLE_LINE_HEIGHT = 56 +_LABEL_COLOR = (220, 220, 220) +_VALUE_COLOR = (255, 255, 255) +_LOGO_PATH = Path(__file__).resolve().parents[4] / "interfaces" / "static" / "images" / "filmcase_stacked_full.png" +_LOGO_WIDTH = 320 +_LOGO_PADDING = 20 + + +@attrs.frozen +class ClassicDesign(base.CardDesign): + """ + The original square recipe card: a photo (or gradient) background with a + half-canvas info panel and a QR code in the opposite bottom corner. + + The four legacy templates (long/short labels x blur/sharp background) are + the four combinations of this one design's options, so their persisted + ``template_name`` strings are reproduced exactly for backward compatibility. + """ + + label_style: LabelStyle = "long" + background_effect: BackgroundEffect = "blur" + info_side: InfoSide = DEFAULT_INFO_SIDE + + output_size: ClassVar[tuple[int, int]] = _OUTPUT_SIZE + requires_background_image: ClassVar[bool] = False + + @property + def template_name(self) -> str: + style = "long" if self.label_style == "long" else "short" + suffix = "_sharp" if self.background_effect == "none" else "" + return f"{style}_label{suffix}" + + def render( + self, + *, + recipe: models.FujifilmRecipe, + background_image: models.Image | None, + ) -> rendering.RenderedCard: + target_w, target_h = self.output_size + if background_image is None: + canvas = rendering.build_gradient(target_w, target_h) + else: + with PILImage.open(background_image.filepath) as img: + canvas = rendering.cover_fill(img.convert("RGB"), target_w, target_h) + if self.background_effect == "blur": + canvas = canvas.filter(ImageFilter.GaussianBlur(radius=rendering.BLUR_RADIUS)) + + panel_w = target_w // 2 + panel_x = 0 if self.info_side == "left" else target_w - panel_w + overlay = PILImage.new("RGBA", (panel_w, target_h), (0, 0, 0, _PANEL_ALPHA)) + canvas_rgba = canvas.convert("RGBA") + canvas_rgba.paste(overlay, (panel_x, 0), overlay) + canvas = canvas_rgba.convert("RGB") + + draw = ImageDraw.Draw(canvas) + label_font = rendering.load_font(_FONT_SIZE) + value_font = rendering.load_font(_FONT_SIZE) + lines = card_queries.get_recipe_cover_lines(recipe=recipe, label_style=self.label_style) + x = panel_x + _TEXT_PADDING + y = _TEXT_PADDING + if recipe.name: + title_font = rendering.load_font(_TITLE_FONT_SIZE) + draw.text((x, y), recipe.name, font=title_font, fill=_VALUE_COLOR) + y += _TITLE_LINE_HEIGHT + for line in lines: + if y + _LINE_HEIGHT > target_h - _TEXT_PADDING: + break + draw.text((x, y), f"{line.label}:", font=label_font, fill=_LABEL_COLOR) + label_w = int(draw.textlength(f"{line.label}:", font=label_font)) + draw.text((x + label_w + 8, y), line.value, font=value_font, fill=_VALUE_COLOR) + y += _LINE_HEIGHT + + json_str = card_queries.get_recipe_as_json(recipe=recipe) + qr_img = rendering.make_qr(json_str) + qr_x = _QR_MARGIN if self.info_side == "right" else target_w - rendering.QR_SIZE - _QR_MARGIN + qr_pos = (qr_x, target_h - rendering.QR_SIZE - _QR_MARGIN) + canvas.paste(qr_img, qr_pos) + + if _LOGO_PATH.exists(): + with PILImage.open(_LOGO_PATH) as logo_src: + logo_rgba = logo_src.convert("RGBA") + bbox = logo_rgba.getbbox() + if bbox: + logo_rgba = logo_rgba.crop(bbox) + content_h = int(_LOGO_WIDTH * logo_rgba.height / logo_rgba.width) + logo = logo_rgba.resize((_LOGO_WIDTH, content_h), PILImage.Resampling.LANCZOS) + logo_x = panel_x + _TEXT_PADDING + logo_y = target_h - content_h - _TEXT_PADDING + white_bg = PILImage.new( + "RGBA", + (_LOGO_WIDTH + _LOGO_PADDING * 2, content_h + _LOGO_PADDING * 2), + (255, 255, 255, 255), + ) + canvas_rgba = canvas.convert("RGBA") + canvas_rgba.paste(white_bg, (logo_x - _LOGO_PADDING, logo_y - _LOGO_PADDING)) + canvas_rgba.paste(logo, (logo_x, logo_y), logo) + canvas = canvas_rgba.convert("RGB") + + return rendering.RenderedCard( + canvas=canvas, + json_str=json_str, + embed_exif=background_image is None, + ) diff --git a/src/domain/recipes/cards/operations.py b/src/domain/recipes/cards/operations.py index 0d7f365..6ff7d2d 100644 --- a/src/domain/recipes/cards/operations.py +++ b/src/domain/recipes/cards/operations.py @@ -64,7 +64,7 @@ def _compose_card( draw = ImageDraw.Draw(canvas) label_font = rendering.load_font(_FONT_SIZE) value_font = rendering.load_font(_FONT_SIZE) - lines = card_queries.get_recipe_cover_lines(recipe=recipe, template=template) + lines = card_queries.get_recipe_cover_lines(recipe=recipe, label_style=template.label_style) x = panel_x + _TEXT_PADDING y = _TEXT_PADDING if recipe.name: diff --git a/src/domain/recipes/cards/queries.py b/src/domain/recipes/cards/queries.py index fde5115..b6ff2e3 100644 --- a/src/domain/recipes/cards/queries.py +++ b/src/domain/recipes/cards/queries.py @@ -13,7 +13,6 @@ from src.domain.recipes import normalization as recipe_normalization from src.domain.recipes import queries as recipe_queries from src.domain.recipes.cards import dataclasses as card_dataclasses -from src.domain.recipes.cards import templates as card_templates @attrs.frozen @@ -174,17 +173,18 @@ def get_recipe_as_json(*, recipe: models.FujifilmRecipe) -> str: def get_recipe_cover_lines( *, recipe: models.FujifilmRecipe, - template: card_templates.CardTemplate, + label_style: str, ) -> tuple[FieldLine, ...]: """ - Return display lines for the recipe card formatted per template label style. + Return display lines for the recipe card formatted per *label_style*. - Inapplicable fields (same rules as get_recipe_as_json) and null values are - omitted. When the recipe has attached sensors, a "Sensors" line is - prepended to the body so card recipients can see compatibility at a - glance before reading the settings. + *label_style* is ``"long"`` (full labels, e.g. "White Balance") or anything + else for the short forms (e.g. "WB"). Inapplicable fields (same rules as + get_recipe_as_json) and null values are omitted. When the recipe has attached + sensors, a "Sensors" line is prepended to the body so card recipients can see + compatibility at a glance before reading the settings. """ - labels = _LONG_LABELS if template.label_style == "long" else _SHORT_LABELS + labels = _LONG_LABELS if label_style == "long" else _SHORT_LABELS lines: list[FieldLine] = [] sensor_names = sorted(recipe.sensors.values_list("name", flat=True)) if sensor_names: diff --git a/tests/integration/domain/recipes/cards/test_recipe_card_queries.py b/tests/integration/domain/recipes/cards/test_recipe_card_queries.py index e9d0bc1..8f09279 100644 --- a/tests/integration/domain/recipes/cards/test_recipe_card_queries.py +++ b/tests/integration/domain/recipes/cards/test_recipe_card_queries.py @@ -3,7 +3,7 @@ import pytest from src.data import models -from src.domain.recipes.cards import queries, templates +from src.domain.recipes.cards import queries def _recipe(**kwargs: object) -> models.FujifilmRecipe: @@ -125,25 +125,25 @@ def test_omits_name_when_recipe_is_unnamed(self) -> None: class TestGetRecipeCoverLines: def test_returns_field_lines(self) -> None: recipe = _recipe() - lines = queries.get_recipe_cover_lines(recipe=recipe, template=templates.LONG_LABEL) + lines = queries.get_recipe_cover_lines(recipe=recipe, label_style="long") assert all(isinstance(line, queries.FieldLine) for line in lines) def test_uses_long_labels_for_long_template(self) -> None: recipe = _recipe(film_simulation="Provia") - lines = queries.get_recipe_cover_lines(recipe=recipe, template=templates.LONG_LABEL) + lines = queries.get_recipe_cover_lines(recipe=recipe, label_style="long") labels = [line.label for line in lines] assert "Film Simulation" in labels def test_uses_short_labels_for_short_template(self) -> None: recipe = _recipe(film_simulation="Provia") - lines = queries.get_recipe_cover_lines(recipe=recipe, template=templates.SHORT_LABEL) + lines = queries.get_recipe_cover_lines(recipe=recipe, label_style="short") labels = [line.label for line in lines] assert "Film Sim" in labels assert "Film Simulation" not in labels def test_film_simulation_value_is_present(self) -> None: recipe = _recipe(film_simulation="Velvia") - lines = queries.get_recipe_cover_lines(recipe=recipe, template=templates.LONG_LABEL) + lines = queries.get_recipe_cover_lines(recipe=recipe, label_style="long") film_line = next(l for l in lines if l.label == "Film Simulation") assert film_line.value == "Velvia" @@ -151,19 +151,19 @@ def test_omits_inapplicable_fields(self) -> None: # ``color`` is the only field flagged as colour-only via # _COLOR_ONLY_FIELDS; for a mono sim it is omitted from the card. recipe = _recipe(film_simulation="Acros STD", color=None) - lines = queries.get_recipe_cover_lines(recipe=recipe, template=templates.LONG_LABEL) + lines = queries.get_recipe_cover_lines(recipe=recipe, label_style="long") labels = [line.label for line in lines] assert "Color" not in labels def test_omits_grain_size_when_grain_roughness_is_off(self) -> None: recipe = _recipe(grain_roughness="Off", grain_size="Small") - lines = queries.get_recipe_cover_lines(recipe=recipe, template=templates.LONG_LABEL) + lines = queries.get_recipe_cover_lines(recipe=recipe, label_style="long") labels = [line.label for line in lines] assert "Grain Size" not in labels def test_omits_none_values(self) -> None: recipe = _recipe(highlight=None, shadow=None) - lines = queries.get_recipe_cover_lines(recipe=recipe, template=templates.LONG_LABEL) + lines = queries.get_recipe_cover_lines(recipe=recipe, label_style="long") labels = [line.label for line in lines] assert "Highlight" not in labels assert "Shadow" not in labels @@ -171,7 +171,7 @@ def test_omits_none_values(self) -> None: def test_omits_drp_fields_when_drp_is_active(self) -> None: from decimal import Decimal recipe = _recipe(d_range_priority="Auto", dynamic_range="DR100", highlight=Decimal("1"), shadow=Decimal("-1")) - lines = queries.get_recipe_cover_lines(recipe=recipe, template=templates.LONG_LABEL) + lines = queries.get_recipe_cover_lines(recipe=recipe, label_style="long") labels = [line.label for line in lines] assert "Dynamic Range" not in labels assert "Highlight" not in labels @@ -187,7 +187,7 @@ def test_field_order_matches_display_fields(self) -> None: highlight=Decimal("1"), shadow=Decimal("-1"), ) - lines = queries.get_recipe_cover_lines(recipe=recipe, template=templates.LONG_LABEL) + lines = queries.get_recipe_cover_lines(recipe=recipe, label_style="long") present_fields = [line.label for line in lines] film_idx = present_fields.index("Film Simulation") wb_idx = present_fields.index("White Balance") @@ -236,7 +236,7 @@ class TestGetRecipeCoverLinesSensors: def test_omits_sensors_line_when_recipe_has_none(self) -> None: recipe = _recipe() - lines = queries.get_recipe_cover_lines(recipe=recipe, template=templates.LONG_LABEL) + lines = queries.get_recipe_cover_lines(recipe=recipe, label_style="long") assert "Sensors" not in [line.label for line in lines] @@ -246,7 +246,7 @@ def test_prepends_sensors_line_when_recipe_has_sensors(self) -> None: sensors=models.Sensor.objects.filter(name__in=["X-Trans IV", "GFX"]) ) - lines = queries.get_recipe_cover_lines(recipe=recipe, template=templates.LONG_LABEL) + lines = queries.get_recipe_cover_lines(recipe=recipe, label_style="long") # The sensors line is first so receivers see compatibility before # reading any settings. @@ -257,7 +257,7 @@ def test_uses_short_label_style(self) -> None: recipe = _recipe() recipe.set_sensors(sensors=models.Sensor.objects.filter(name="X-Trans V")) - lines = queries.get_recipe_cover_lines(recipe=recipe, template=templates.SHORT_LABEL) + lines = queries.get_recipe_cover_lines(recipe=recipe, label_style="short") # Long/short happen to be identical here ("Sensors"); the test # documents the contract for future divergence. diff --git a/tests/unit/domain/recipes/cards/test_classic_design.py b/tests/unit/domain/recipes/cards/test_classic_design.py new file mode 100644 index 0000000..4637e95 --- /dev/null +++ b/tests/unit/domain/recipes/cards/test_classic_design.py @@ -0,0 +1,109 @@ +from pathlib import Path +from unittest.mock import MagicMock, patch + +from PIL import Image as PILImage + +from src.domain.recipes.cards import rendering +from src.domain.recipes.cards.designs import classic + + +def _quiet_queries() -> tuple[object, object]: + return ( + patch.object(classic.card_queries, "get_recipe_cover_lines", return_value=()), + patch.object(classic.card_queries, "get_recipe_as_json", return_value='{"v":2}'), + ) + + +def _render(design: classic.ClassicDesign, recipe: MagicMock) -> rendering.RenderedCard: + lines_patch, json_patch = _quiet_queries() + with ( + patch.object(classic, "_LOGO_PATH", Path("/nonexistent/no_logo.png")), + lines_patch, + json_patch, + ): + return design.render(recipe=recipe, background_image=None) + + +class TestClassicDesignMetadata: + def test_template_name_maps_the_four_legacy_combinations(self) -> None: + assert classic.ClassicDesign(label_style="long", background_effect="blur").template_name == "long_label" + assert classic.ClassicDesign(label_style="short", background_effect="blur").template_name == "short_label" + assert classic.ClassicDesign(label_style="long", background_effect="none").template_name == "long_label_sharp" + assert classic.ClassicDesign(label_style="short", background_effect="none").template_name == "short_label_sharp" + + def test_output_size_is_square_1080(self) -> None: + assert classic.ClassicDesign().output_size == (1080, 1080) + + def test_does_not_require_a_background_image(self) -> None: + assert classic.ClassicDesign().requires_background_image is False + + +class TestClassicDesignRender: + def test_canvas_matches_output_size(self) -> None: + recipe = MagicMock() + recipe.name = "" + + rendered = _render(classic.ClassicDesign(), recipe) + + assert rendered.canvas.size == (1080, 1080) + + def test_embeds_exif_for_gradient_card(self) -> None: + recipe = MagicMock() + recipe.name = "" + + rendered = _render(classic.ClassicDesign(), recipe) + + assert rendered.embed_exif is True + + def test_title_is_rendered_when_recipe_has_a_name(self) -> None: + recipe = MagicMock() + recipe.name = "My Recipe" + + rendered = _render(classic.ClassicDesign(), recipe) + + assert self._max_brightness(rendered.canvas, classic._TEXT_PADDING) > 200 + + def test_title_is_absent_when_recipe_is_unnamed(self) -> None: + recipe = MagicMock() + recipe.name = "" + + rendered = _render(classic.ClassicDesign(), recipe) + + assert self._max_brightness(rendered.canvas, classic._TEXT_PADDING) < 100 + + def test_info_side_left_renders_title_in_the_left_half(self) -> None: + recipe = MagicMock() + recipe.name = "My Recipe" + + rendered = _render(classic.ClassicDesign(info_side="left"), recipe) + + left_x = classic._TEXT_PADDING + right_x = 1080 // 2 + classic._TEXT_PADDING + assert self._max_brightness(rendered.canvas, left_x) > 200 + assert self._max_brightness(rendered.canvas, right_x) < 100 + + def test_info_side_right_renders_title_in_the_right_half(self) -> None: + recipe = MagicMock() + recipe.name = "My Recipe" + + rendered = _render(classic.ClassicDesign(info_side="right"), recipe) + + left_x = classic._TEXT_PADDING + right_x = 1080 // 2 + classic._TEXT_PADDING + assert self._max_brightness(rendered.canvas, right_x) > 200 + assert self._max_brightness(rendered.canvas, left_x) < 100 + + def test_missing_logo_file_does_not_raise(self) -> None: + recipe = MagicMock() + recipe.name = "" + + # _render already patches _LOGO_PATH to a missing file; reaching here + # without an exception is the assertion. + rendered = _render(classic.ClassicDesign(), recipe) + + assert rendered.canvas.size == (1080, 1080) + + def _max_brightness(self, canvas: PILImage.Image, x0: int) -> int: + p = classic._TEXT_PADDING + region = canvas.crop((x0, p, x0 + 300, p + classic._TITLE_LINE_HEIGHT)) + return region.getextrema()[0][1] # max R value in the region From 17aba4c7cf1fbd049329ce82023fa64c445ffb02 Mon Sep 17 00:00:00 2001 From: Gosku Date: Sat, 25 Jul 2026 15:56:59 +1000 Subject: [PATCH 03/15] Drive card creation with CardDesign instead of CardTemplate Replace the template + info_side parameters of the card operations with a single design: CardDesign object across the domain operations, the create/ preview/batch use cases, and the interface views. The interface now builds a ClassicDesign from the modal's option values via _resolve_design (replacing _resolve_card_template / _resolve_info_side); the batch use case uses a fixed ClassicDesign. Delete the now-unused templates module and the monolithic _compose_card (its logic lives in ClassicDesign.render). RecipeCard.template and the recipe.card.created event still carry the same template_name strings, so persisted rows and event history are unchanged. Co-Authored-By: Claude Opus 4.8 --- .../usecases/recipes/create_recipe_card.py | 8 +- .../recipes/create_recipe_cards_batch.py | 11 +- .../usecases/recipes/preview_recipe_card.py | 10 +- src/domain/recipes/cards/operations.py | 130 ++------------- src/domain/recipes/cards/templates.py | 49 ------ src/interfaces/recipes/views.py | 46 +++--- .../recipes/test_create_recipe_card.py | 15 +- .../recipes/test_preview_recipe_card.py | 34 ++-- .../recipes/cards/test_create_recipe_card.py | 59 +++---- .../cards/test_create_recipe_cards_zip.py | 4 +- .../recipes/test_create_recipe_cards_batch.py | 4 +- .../recipes/cards/test_create_recipe_card.py | 148 +----------------- 12 files changed, 113 insertions(+), 405 deletions(-) delete mode 100644 src/domain/recipes/cards/templates.py diff --git a/src/application/usecases/recipes/create_recipe_card.py b/src/application/usecases/recipes/create_recipe_card.py index 4c1b814..b2e060a 100644 --- a/src/application/usecases/recipes/create_recipe_card.py +++ b/src/application/usecases/recipes/create_recipe_card.py @@ -4,15 +4,14 @@ from src.data import models from src.domain.recipes.cards import operations as card_operations -from src.domain.recipes.cards import templates as card_templates +from src.domain.recipes.cards.designs import base as card_designs def create_recipe_card( *, recipe_id: int, image_id: int | None, - template: card_templates.CardTemplate, - info_side: card_templates.InfoSide = card_templates.DEFAULT_INFO_SIDE, + design: card_designs.CardDesign, ) -> models.RecipeCard: """ Create a recipe card for the given recipe and persist it. @@ -28,8 +27,7 @@ def create_recipe_card( output_dir.mkdir(parents=True, exist_ok=True) return card_operations.create_recipe_card( recipe=recipe, - template=template, + design=design, background_image=background_image, output_dir=output_dir, - info_side=info_side, ) diff --git a/src/application/usecases/recipes/create_recipe_cards_batch.py b/src/application/usecases/recipes/create_recipe_cards_batch.py index f96f8c3..5607673 100644 --- a/src/application/usecases/recipes/create_recipe_cards_batch.py +++ b/src/application/usecases/recipes/create_recipe_cards_batch.py @@ -9,11 +9,12 @@ from src.application.usecases.recipes import create_recipe_card as create_recipe_card_uc from src.data import models from src.domain.recipes.cards import operations as card_operations -from src.domain.recipes.cards import templates as card_templates +from src.domain.recipes.cards.designs import classic as classic_design -# Every batch card uses long labels on a generated gradient (no background -# image), matching the agreed fixed template for bulk creation. -_BATCH_TEMPLATE = card_templates.LONG_LABEL +# Every batch card uses the classic design with long labels on a generated +# gradient (no background image), matching the agreed fixed look for bulk +# creation. +_BATCH_DESIGN = classic_design.ClassicDesign(label_style="long", background_effect="blur") class CreateRecipeCardFailureReason(enum.StrEnum): @@ -58,7 +59,7 @@ def create_recipe_cards_batch( card = create_recipe_card_uc.create_recipe_card( recipe_id=recipe_id, image_id=None, - template=_BATCH_TEMPLATE, + design=_BATCH_DESIGN, ) created.append(card) except models.FujifilmRecipe.DoesNotExist: diff --git a/src/application/usecases/recipes/preview_recipe_card.py b/src/application/usecases/recipes/preview_recipe_card.py index 3c9732b..20837d7 100644 --- a/src/application/usecases/recipes/preview_recipe_card.py +++ b/src/application/usecases/recipes/preview_recipe_card.py @@ -2,7 +2,7 @@ from src.data import models from src.domain.recipes.cards import operations as card_operations -from src.domain.recipes.cards import templates as card_templates +from src.domain.recipes.cards.designs import base as card_designs _TMP_DIR = Path("/tmp") @@ -11,8 +11,7 @@ def preview_recipe_card( *, recipe_id: int, image_id: int | None, - template: card_templates.CardTemplate, - info_side: card_templates.InfoSide = card_templates.DEFAULT_INFO_SIDE, + design: card_designs.CardDesign, ) -> Path: """ Generate a recipe card preview in /tmp/ and return its path. @@ -28,11 +27,10 @@ def preview_recipe_card( models.Image.objects.get(pk=image_id) if image_id is not None else None ) image_suffix = str(image_id) if image_id is not None else "none" - output_path = _TMP_DIR / f"recipe_preview_{recipe_id}_{template.template_name}_{image_suffix}_{info_side}.jpg" + output_path = _TMP_DIR / f"recipe_preview_{recipe_id}_{design.template_name}_{image_suffix}.jpg" return card_operations.preview_recipe_card_image( recipe=recipe, - template=template, + design=design, background_image=background_image, output_path=output_path, - info_side=info_side, ) diff --git a/src/domain/recipes/cards/operations.py b/src/domain/recipes/cards/operations.py index 6ff7d2d..df15352 100644 --- a/src/domain/recipes/cards/operations.py +++ b/src/domain/recipes/cards/operations.py @@ -8,104 +8,13 @@ import attrs from PIL import Image as PILImage -from PIL import ImageDraw, ImageFilter from django.db import transaction from src.data import models from src.domain.images import events -from src.domain.recipes.cards import queries as card_queries from src.domain.recipes.cards import rendering -from src.domain.recipes.cards import templates as card_templates - -_QR_MARGIN = 20 -_PANEL_ALPHA = 140 # 0-255 opacity of the text-readability overlay panel -_TEXT_PADDING = 40 -_LINE_HEIGHT = 44 -_FONT_SIZE = 28 -_TITLE_FONT_SIZE = 34 -_TITLE_LINE_HEIGHT = 56 -_LABEL_COLOR = (220, 220, 220) -_VALUE_COLOR = (255, 255, 255) -_LOGO_PATH = Path(__file__).resolve().parents[3] / "interfaces" / "static" / "images" / "filmcase_stacked_full.png" -_LOGO_WIDTH = 320 -_LOGO_PADDING = 20 - - -def _compose_card( - *, - recipe: models.FujifilmRecipe, - template: card_templates.CardTemplate, - background_image: models.Image | None, - info_side: card_templates.InfoSide, -) -> rendering.RenderedCard: - """ - Build the card PIL image. - - *info_side* chooses which half holds the info text + logo; the QR code - goes on the opposite bottom corner. - """ - target_w, target_h = template.output_size - if background_image is None: - canvas = rendering.build_gradient(target_w, target_h) - else: - with PILImage.open(background_image.filepath) as img: - canvas = rendering.cover_fill(img.convert("RGB"), target_w, target_h) - if template.background_effect == "blur": - canvas = canvas.filter(ImageFilter.GaussianBlur(radius=rendering.BLUR_RADIUS)) - - panel_w = target_w // 2 - panel_x = 0 if info_side == "left" else target_w - panel_w - overlay = PILImage.new("RGBA", (panel_w, target_h), (0, 0, 0, _PANEL_ALPHA)) - canvas_rgba = canvas.convert("RGBA") - canvas_rgba.paste(overlay, (panel_x, 0), overlay) - canvas = canvas_rgba.convert("RGB") - - draw = ImageDraw.Draw(canvas) - label_font = rendering.load_font(_FONT_SIZE) - value_font = rendering.load_font(_FONT_SIZE) - lines = card_queries.get_recipe_cover_lines(recipe=recipe, label_style=template.label_style) - x = panel_x + _TEXT_PADDING - y = _TEXT_PADDING - if recipe.name: - title_font = rendering.load_font(_TITLE_FONT_SIZE) - draw.text((x, y), recipe.name, font=title_font, fill=_VALUE_COLOR) - y += _TITLE_LINE_HEIGHT - for line in lines: - if y + _LINE_HEIGHT > target_h - _TEXT_PADDING: - break - draw.text((x, y), f"{line.label}:", font=label_font, fill=_LABEL_COLOR) - label_w = int(draw.textlength(f"{line.label}:", font=label_font)) - draw.text((x + label_w + 8, y), line.value, font=value_font, fill=_VALUE_COLOR) - y += _LINE_HEIGHT - - json_str = card_queries.get_recipe_as_json(recipe=recipe) - qr_img = rendering.make_qr(json_str) - qr_x = _QR_MARGIN if info_side == "right" else target_w - rendering.QR_SIZE - _QR_MARGIN - qr_pos = (qr_x, target_h - rendering.QR_SIZE - _QR_MARGIN) - canvas.paste(qr_img, qr_pos) - - if _LOGO_PATH.exists(): - with PILImage.open(_LOGO_PATH) as logo_src: - logo_rgba = logo_src.convert("RGBA") - bbox = logo_rgba.getbbox() - if bbox: - logo_rgba = logo_rgba.crop(bbox) - content_h = int(_LOGO_WIDTH * logo_rgba.height / logo_rgba.width) - logo = logo_rgba.resize((_LOGO_WIDTH, content_h), PILImage.Resampling.LANCZOS) - logo_x = panel_x + _TEXT_PADDING - logo_y = target_h - content_h - _TEXT_PADDING - white_bg = PILImage.new("RGBA", (_LOGO_WIDTH + _LOGO_PADDING * 2, content_h + _LOGO_PADDING * 2), (255, 255, 255, 255)) - canvas_rgba = canvas.convert("RGBA") - canvas_rgba.paste(white_bg, (logo_x - _LOGO_PADDING, logo_y - _LOGO_PADDING)) - canvas_rgba.paste(logo, (logo_x, logo_y), logo) - canvas = canvas_rgba.convert("RGB") - - return rendering.RenderedCard( - canvas=canvas, - json_str=json_str, - embed_exif=background_image is None, - ) +from src.domain.recipes.cards.designs import base as card_designs def _save_card( @@ -123,10 +32,9 @@ def _save_card( def preview_recipe_card_image( *, recipe: models.FujifilmRecipe, - template: card_templates.CardTemplate, + design: card_designs.CardDesign, background_image: models.Image | None, output_path: Path, - info_side: card_templates.InfoSide = card_templates.DEFAULT_INFO_SIDE, ) -> Path: """ Compose a recipe card image and save it to output_path. Return output_path. @@ -135,12 +43,7 @@ def preview_recipe_card_image( deterministic /tmp/ path) so successive previews for the same options overwrite the previous file rather than accumulating. """ - rendered = _compose_card( - recipe=recipe, - template=template, - background_image=background_image, - info_side=info_side, - ) + rendered = design.render(recipe=recipe, background_image=background_image) _save_card( canvas=rendered.canvas, filepath=output_path, @@ -153,25 +56,18 @@ def preview_recipe_card_image( def create_recipe_card_image( *, recipe: models.FujifilmRecipe, - template: card_templates.CardTemplate, + design: card_designs.CardDesign, background_image: models.Image | None, output_dir: Path, - info_side: card_templates.InfoSide = card_templates.DEFAULT_INFO_SIDE, ) -> Path: """ Compose a recipe card image and save it to output_dir. Return the file path. - If background_image is given, resizes/crops it to template.output_size and - applies Gaussian blur when template.background_effect == "blur". - If background_image is None, generates a soft gradient background and embeds - the recipe JSON into the EXIF UserComment so the card can be re-imported. + The *design* controls the entire layout. When background_image is None the + design falls back to a generated gradient and the recipe JSON is embedded in + the EXIF UserComment so the card can be re-imported without the QR. """ - rendered = _compose_card( - recipe=recipe, - template=template, - background_image=background_image, - info_side=info_side, - ) + rendered = design.render(recipe=recipe, background_image=background_image) filepath = output_dir / f"recipe_{recipe.pk}_{uuid.uuid4().hex[:8]}.jpg" _save_card( canvas=rendered.canvas, @@ -185,10 +81,9 @@ def create_recipe_card_image( def create_recipe_card( *, recipe: models.FujifilmRecipe, - template: card_templates.CardTemplate, + design: card_designs.CardDesign, background_image: models.Image | None, output_dir: Path, - info_side: card_templates.InfoSide = card_templates.DEFAULT_INFO_SIDE, ) -> models.RecipeCard: """ Create a recipe card image, persist a RecipeCard record, and publish an event. @@ -198,14 +93,13 @@ def create_recipe_card( """ filepath = create_recipe_card_image( recipe=recipe, - template=template, + design=design, background_image=background_image, output_dir=output_dir, - info_side=info_side, ) card = models.RecipeCard.create( filepath=str(filepath), - template=template.template_name, + template=design.template_name, recipe_id=recipe.pk, image_id=background_image.pk if background_image is not None else None, ) @@ -213,7 +107,7 @@ def create_recipe_card( event_type=events.RECIPE_CARD_CREATED, recipe_id=recipe.pk, card_id=card.pk, - template=template.template_name, + template=design.template_name, ) return card diff --git a/src/domain/recipes/cards/templates.py b/src/domain/recipes/cards/templates.py deleted file mode 100644 index bf6cf44..0000000 --- a/src/domain/recipes/cards/templates.py +++ /dev/null @@ -1,49 +0,0 @@ -from typing import Literal - -import attrs - - -InfoSide = Literal["left", "right"] -DEFAULT_INFO_SIDE: InfoSide = "left" -INFO_SIDES: tuple[InfoSide, ...] = ("left", "right") - - -@attrs.frozen -class CardTemplate: - label_style: Literal["long", "short"] - background_effect: Literal["none", "blur"] - output_size: tuple[int, int] - template_name: str - - -LONG_LABEL: CardTemplate = CardTemplate( - label_style="long", - background_effect="blur", - output_size=(1080, 1080), - template_name="long_label", -) -SHORT_LABEL: CardTemplate = CardTemplate( - label_style="short", - background_effect="blur", - output_size=(1080, 1080), - template_name="short_label", -) -LONG_LABEL_SHARP: CardTemplate = CardTemplate( - label_style="long", - background_effect="none", - output_size=(1080, 1080), - template_name="long_label_sharp", -) -SHORT_LABEL_SHARP: CardTemplate = CardTemplate( - label_style="short", - background_effect="none", - output_size=(1080, 1080), - template_name="short_label_sharp", -) - -TEMPLATES: dict[str, CardTemplate] = { - "long_label": LONG_LABEL, - "short_label": SHORT_LABEL, - "long_label_sharp": LONG_LABEL_SHARP, - "short_label_sharp": SHORT_LABEL_SHARP, -} diff --git a/src/interfaces/recipes/views.py b/src/interfaces/recipes/views.py index 35054d4..0c113a2 100644 --- a/src/interfaces/recipes/views.py +++ b/src/interfaces/recipes/views.py @@ -35,7 +35,8 @@ from src.domain.recipes import graph as recipe_graph from src.domain.recipes import operations as recipe_operations from src.domain.recipes import queries as recipe_queries -from src.domain.recipes.cards import templates as card_templates +from src.domain.recipes.cards.designs import base as card_designs +from src.domain.recipes.cards.designs import classic as classic_design def _recipe_explorer_filters_from_request(request: http.HttpRequest) -> dict[str, list[str]]: @@ -726,16 +727,20 @@ def _serialize_field(f: recipe_queries.FieldValue) -> dict[str, str | None]: }) -def _resolve_card_template( +def _resolve_design( + *, label_style: str, bg_effect: str, -) -> card_templates.CardTemplate: - key = ("long" if label_style == "long" else "short") + "_label" + ("_sharp" if bg_effect == "sharp" else "") - return card_templates.TEMPLATES.get(key, card_templates.LONG_LABEL) - - -def _resolve_info_side(value: str) -> card_templates.InfoSide: - return "right" if value == "right" else "left" + info_side: str, +) -> card_designs.CardDesign: + """ + Build the CardDesign for the classic card from the modal's option values. + """ + return classic_design.ClassicDesign( + label_style="long" if label_style == "long" else "short", + background_effect="none" if bg_effect == "sharp" else "blur", + info_side="right" if info_side == "right" else "left", + ) @_attrs.frozen @@ -803,17 +808,16 @@ class RecipeCardPreview(generic.View): def get(self, request: http.HttpRequest, recipe_id: int) -> http.HttpResponse: image_id_raw = request.GET.get("image_id") image_id = int(image_id_raw) if image_id_raw else None - template = _resolve_card_template( + design = _resolve_design( label_style=request.GET.get("label_style", "long"), bg_effect=request.GET.get("bg_effect", "blur"), + info_side=request.GET.get("info_side", "left"), ) - info_side = _resolve_info_side(request.GET.get("info_side", "left")) try: preview_path = preview_recipe_card_uc.preview_recipe_card( recipe_id=recipe_id, image_id=image_id, - template=template, - info_side=info_side, + design=design, ) except Exception: structlog.get_logger().exception("Unexpected error generating recipe card preview") @@ -831,7 +835,7 @@ def get(self, request: http.HttpRequest, recipe_id: int) -> http.HttpResponse: "image_id": image_id, "label_style": request.GET.get("label_style", "long"), "bg_effect": request.GET.get("bg_effect", "blur"), - "info_side": info_side, + "info_side": request.GET.get("info_side", "left"), }, ) @@ -846,17 +850,16 @@ class RecipeCardPreviewFile(generic.View): def get(self, request: http.HttpRequest, recipe_id: int) -> http.FileResponse: image_id_raw = request.GET.get("image_id") image_id = int(image_id_raw) if image_id_raw else None - template = _resolve_card_template( + design = _resolve_design( label_style=request.GET.get("label_style", "long"), bg_effect=request.GET.get("bg_effect", "blur"), + info_side=request.GET.get("info_side", "left"), ) - info_side = _resolve_info_side(request.GET.get("info_side", "left")) try: preview_path = preview_recipe_card_uc.preview_recipe_card( recipe_id=recipe_id, image_id=image_id, - template=template, - info_side=info_side, + design=design, ) except Exception: structlog.get_logger().exception("Unexpected error generating recipe card preview file") @@ -882,17 +885,16 @@ def setup(self, request: http.HttpRequest, *args: object, **kwargs: object) -> N def post(self, request: http.HttpRequest, recipe_id: int) -> http.HttpResponse: image_id_raw = request.POST.get("image_id") image_id = int(image_id_raw) if image_id_raw else None - template = _resolve_card_template( + design = _resolve_design( label_style=request.POST.get("label_style", "long"), bg_effect=request.POST.get("bg_effect", "blur"), + info_side=request.POST.get("info_side", "left"), ) - info_side = _resolve_info_side(request.POST.get("info_side", "left")) try: card = create_recipe_card_uc.create_recipe_card( recipe_id=recipe_id, image_id=image_id, - template=template, - info_side=info_side, + design=design, ) except Exception: structlog.get_logger().exception("Unexpected error creating recipe card") diff --git a/tests/integration/application/recipes/test_create_recipe_card.py b/tests/integration/application/recipes/test_create_recipe_card.py index 18d9524..3d771c7 100644 --- a/tests/integration/application/recipes/test_create_recipe_card.py +++ b/tests/integration/application/recipes/test_create_recipe_card.py @@ -4,7 +4,7 @@ from src.application.usecases.recipes import create_recipe_card as uc from src.data import models -from src.domain.recipes.cards import templates as card_templates +from src.domain.recipes.cards.designs import classic as classic_design from tests.factories import FujifilmRecipeFactory @@ -17,7 +17,7 @@ def test_returns_recipe_card_record(self, tmp_path: Path, settings: object) -> N card = uc.create_recipe_card( recipe_id=recipe.pk, image_id=None, - template=card_templates.LONG_LABEL, + design=classic_design.ClassicDesign(), ) assert isinstance(card, models.RecipeCard) @@ -32,8 +32,7 @@ def test_returns_recipe_card_record_with_info_side_right( card = uc.create_recipe_card( recipe_id=recipe.pk, image_id=None, - template=card_templates.LONG_LABEL, - info_side="right", + design=classic_design.ClassicDesign(info_side="right"), ) assert isinstance(card, models.RecipeCard) @@ -46,7 +45,7 @@ def test_raises_if_recipe_does_not_exist(self, tmp_path: Path, settings: object) uc.create_recipe_card( recipe_id=999999, image_id=None, - template=card_templates.LONG_LABEL, + design=classic_design.ClassicDesign(), ) def test_raises_if_image_does_not_exist(self, tmp_path: Path, settings: object) -> None: @@ -57,7 +56,7 @@ def test_raises_if_image_does_not_exist(self, tmp_path: Path, settings: object) uc.create_recipe_card( recipe_id=recipe.pk, image_id=999999, - template=card_templates.LONG_LABEL, + design=classic_design.ClassicDesign(), ) def test_card_file_is_saved_to_recipe_cards_dir(self, tmp_path: Path, settings: object) -> None: @@ -67,7 +66,7 @@ def test_card_file_is_saved_to_recipe_cards_dir(self, tmp_path: Path, settings: card = uc.create_recipe_card( recipe_id=recipe.pk, image_id=None, - template=card_templates.LONG_LABEL, + design=classic_design.ClassicDesign(), ) assert Path(card.filepath).parent == tmp_path @@ -81,7 +80,7 @@ def test_creates_output_dir_if_missing(self, tmp_path: Path, settings: object) - uc.create_recipe_card( recipe_id=recipe.pk, image_id=None, - template=card_templates.LONG_LABEL, + design=classic_design.ClassicDesign(), ) assert output_dir.exists() diff --git a/tests/integration/application/recipes/test_preview_recipe_card.py b/tests/integration/application/recipes/test_preview_recipe_card.py index 3c40ad9..e639131 100644 --- a/tests/integration/application/recipes/test_preview_recipe_card.py +++ b/tests/integration/application/recipes/test_preview_recipe_card.py @@ -4,9 +4,12 @@ from src.application.usecases.recipes import preview_recipe_card as uc from src.data import models -from src.domain.recipes.cards import templates as card_templates +from src.domain.recipes.cards.designs import classic as classic_design from tests.factories import FujifilmRecipeFactory +_CLASSIC = classic_design.ClassicDesign() +_CLASSIC_SHORT = classic_design.ClassicDesign(label_style="short") + @pytest.mark.django_db class TestPreviewRecipeCard: @@ -16,7 +19,7 @@ def test_returns_path_to_generated_file(self, tmp_path: Path) -> None: result = uc.preview_recipe_card( recipe_id=recipe.pk, image_id=None, - template=card_templates.LONG_LABEL, + design=_CLASSIC, ) assert isinstance(result, Path) @@ -27,7 +30,7 @@ def test_raises_if_recipe_does_not_exist(self) -> None: uc.preview_recipe_card( recipe_id=999999, image_id=None, - template=card_templates.LONG_LABEL, + design=_CLASSIC, ) def test_raises_if_image_does_not_exist(self) -> None: @@ -37,7 +40,7 @@ def test_raises_if_image_does_not_exist(self) -> None: uc.preview_recipe_card( recipe_id=recipe.pk, image_id=999999, - template=card_templates.LONG_LABEL, + design=_CLASSIC, ) def test_output_path_is_deterministic(self) -> None: @@ -46,35 +49,36 @@ def test_output_path_is_deterministic(self) -> None: path1 = uc.preview_recipe_card( recipe_id=recipe.pk, image_id=None, - template=card_templates.LONG_LABEL, + design=_CLASSIC, ) path2 = uc.preview_recipe_card( recipe_id=recipe.pk, image_id=None, - template=card_templates.LONG_LABEL, + design=_CLASSIC, ) assert path1 == path2 - def test_different_info_side_produces_different_paths(self) -> None: + def test_info_side_reuses_the_same_deterministic_path(self) -> None: + # info_side is a ClassicDesign option but is not part of the persisted + # template name, so both sides share one preview file. The file is + # regenerated on every request, so this overwrite is intentional and + # keeps previews from accumulating. recipe = FujifilmRecipeFactory() path_left = uc.preview_recipe_card( recipe_id=recipe.pk, image_id=None, - template=card_templates.LONG_LABEL, - info_side="left", + design=classic_design.ClassicDesign(info_side="left"), ) path_right = uc.preview_recipe_card( recipe_id=recipe.pk, image_id=None, - template=card_templates.LONG_LABEL, - info_side="right", + design=classic_design.ClassicDesign(info_side="right"), ) - assert path_left != path_right + assert path_left == path_right assert path_left.exists() - assert path_right.exists() def test_different_templates_produce_different_paths(self) -> None: recipe = FujifilmRecipeFactory() @@ -82,12 +86,12 @@ def test_different_templates_produce_different_paths(self) -> None: path_long = uc.preview_recipe_card( recipe_id=recipe.pk, image_id=None, - template=card_templates.LONG_LABEL, + design=_CLASSIC, ) path_short = uc.preview_recipe_card( recipe_id=recipe.pk, image_id=None, - template=card_templates.SHORT_LABEL, + design=_CLASSIC_SHORT, ) assert path_long != path_short diff --git a/tests/integration/domain/recipes/cards/test_create_recipe_card.py b/tests/integration/domain/recipes/cards/test_create_recipe_card.py index 53a4945..829c2cf 100644 --- a/tests/integration/domain/recipes/cards/test_create_recipe_card.py +++ b/tests/integration/domain/recipes/cards/test_create_recipe_card.py @@ -5,9 +5,12 @@ from src.domain.images import events from src.domain.recipes.cards import operations as card_operations -from src.domain.recipes.cards import templates as card_templates +from src.domain.recipes.cards.designs import classic as classic_design from tests.factories import FujifilmRecipeFactory +_CLASSIC = classic_design.ClassicDesign() +_CLASSIC_SHORT = classic_design.ClassicDesign(label_style="short") + @pytest.mark.django_db class TestPreviewRecipeCardImage: @@ -16,7 +19,7 @@ def test_returns_the_output_path(self, tmp_path: Path) -> None: output_path = tmp_path / "preview.jpg" result = card_operations.preview_recipe_card_image( recipe=recipe, - template=card_templates.LONG_LABEL, + design=_CLASSIC, background_image=None, output_path=output_path, ) @@ -27,7 +30,7 @@ def test_creates_jpeg_at_specified_path(self, tmp_path: Path) -> None: output_path = tmp_path / "preview.jpg" card_operations.preview_recipe_card_image( recipe=recipe, - template=card_templates.LONG_LABEL, + design=_CLASSIC, background_image=None, output_path=output_path, ) @@ -38,25 +41,25 @@ def test_jpeg_has_correct_dimensions(self, tmp_path: Path) -> None: output_path = tmp_path / "preview.jpg" card_operations.preview_recipe_card_image( recipe=recipe, - template=card_templates.LONG_LABEL, + design=_CLASSIC, background_image=None, output_path=output_path, ) with PILImage.open(output_path) as img: - assert img.size == card_templates.LONG_LABEL.output_size + assert img.size == classic_design.ClassicDesign.output_size def test_successive_calls_overwrite_the_same_file(self, tmp_path: Path) -> None: recipe = FujifilmRecipeFactory() output_path = tmp_path / "preview.jpg" card_operations.preview_recipe_card_image( recipe=recipe, - template=card_templates.LONG_LABEL, + design=_CLASSIC, background_image=None, output_path=output_path, ) card_operations.preview_recipe_card_image( recipe=recipe, - template=card_templates.SHORT_LABEL, + design=_CLASSIC_SHORT, background_image=None, output_path=output_path, ) @@ -70,7 +73,7 @@ def test_returns_path_inside_output_dir(self, tmp_path: Path) -> None: recipe = FujifilmRecipeFactory() filepath = card_operations.create_recipe_card_image( recipe=recipe, - template=card_templates.LONG_LABEL, + design=_CLASSIC, background_image=None, output_dir=tmp_path, ) @@ -80,7 +83,7 @@ def test_creates_jpeg_file(self, tmp_path: Path) -> None: recipe = FujifilmRecipeFactory() filepath = card_operations.create_recipe_card_image( recipe=recipe, - template=card_templates.LONG_LABEL, + design=_CLASSIC, background_image=None, output_dir=tmp_path, ) @@ -90,19 +93,19 @@ def test_jpeg_has_correct_dimensions(self, tmp_path: Path) -> None: recipe = FujifilmRecipeFactory() filepath = card_operations.create_recipe_card_image( recipe=recipe, - template=card_templates.LONG_LABEL, + design=_CLASSIC, background_image=None, output_dir=tmp_path, ) with PILImage.open(filepath) as img: - assert img.size == card_templates.LONG_LABEL.output_size + assert img.size == classic_design.ClassicDesign.output_size def test_gradient_card_embeds_recipe_json_in_exif(self, tmp_path: Path) -> None: import piexif recipe = FujifilmRecipeFactory() filepath = card_operations.create_recipe_card_image( recipe=recipe, - template=card_templates.LONG_LABEL, + design=_CLASSIC, background_image=None, output_dir=tmp_path, ) @@ -114,13 +117,13 @@ def test_each_call_produces_unique_filepath(self, tmp_path: Path) -> None: recipe = FujifilmRecipeFactory() filepath1 = card_operations.create_recipe_card_image( recipe=recipe, - template=card_templates.LONG_LABEL, + design=_CLASSIC, background_image=None, output_dir=tmp_path, ) filepath2 = card_operations.create_recipe_card_image( recipe=recipe, - template=card_templates.LONG_LABEL, + design=_CLASSIC, background_image=None, output_dir=tmp_path, ) @@ -133,7 +136,7 @@ def test_creates_recipe_card_record_in_db(self, tmp_path: Path) -> None: recipe = FujifilmRecipeFactory() card = card_operations.create_recipe_card( recipe=recipe, - template=card_templates.LONG_LABEL, + design=_CLASSIC, background_image=None, output_dir=tmp_path, ) @@ -144,7 +147,7 @@ def test_card_filepath_points_to_existing_file(self, tmp_path: Path) -> None: recipe = FujifilmRecipeFactory() card = card_operations.create_recipe_card( recipe=recipe, - template=card_templates.LONG_LABEL, + design=_CLASSIC, background_image=None, output_dir=tmp_path, ) @@ -154,7 +157,7 @@ def test_no_background_image_sets_null_image_fk(self, tmp_path: Path) -> None: recipe = FujifilmRecipeFactory() card = card_operations.create_recipe_card( recipe=recipe, - template=card_templates.LONG_LABEL, + design=_CLASSIC, background_image=None, output_dir=tmp_path, ) @@ -164,7 +167,7 @@ def test_stores_template_name_on_card(self, tmp_path: Path) -> None: recipe = FujifilmRecipeFactory() card = card_operations.create_recipe_card( recipe=recipe, - template=card_templates.SHORT_LABEL, + design=_CLASSIC_SHORT, background_image=None, output_dir=tmp_path, ) @@ -179,7 +182,7 @@ def test_publishes_recipe_card_created_event( recipe = FujifilmRecipeFactory() card = card_operations.create_recipe_card( recipe=recipe, - template=card_templates.LONG_LABEL, + design=_CLASSIC, background_image=None, output_dir=tmp_path, ) @@ -196,7 +199,7 @@ def test_event_contains_template_name( recipe = FujifilmRecipeFactory() card_operations.create_recipe_card( recipe=recipe, - template=card_templates.SHORT_LABEL, + design=_CLASSIC_SHORT, background_image=None, output_dir=tmp_path, ) @@ -212,7 +215,7 @@ def test_logo_white_background_appears_bottom_left(self, tmp_path: Path) -> None recipe = FujifilmRecipeFactory() filepath = card_operations.create_recipe_card_image( recipe=recipe, - template=card_templates.LONG_LABEL, + design=_CLASSIC, background_image=None, output_dir=tmp_path, ) @@ -220,8 +223,8 @@ def test_logo_white_background_appears_bottom_left(self, tmp_path: Path) -> None # Sample inside the left padding strip of the white logo pill. # This strip (x < _TEXT_PADDING) contains only the white background, # not the logo itself, so it is reliably white regardless of logo content. - x = card_operations._TEXT_PADDING - card_operations._LOGO_PADDING // 2 - y = img.height - card_operations._TEXT_PADDING - card_operations._LOGO_PADDING + x = classic_design._TEXT_PADDING - classic_design._LOGO_PADDING // 2 + y = img.height - classic_design._TEXT_PADDING - classic_design._LOGO_PADDING r, g, b = img.getpixel((x, y)) # The gradient background at this position is near-black (~30, 20, 70). assert r > 200 and g > 200 and b > 200 @@ -232,9 +235,9 @@ class TestRecipeCardInfoSide: def _max_title_brightness(self, img: PILImage.Image, panel_x: int) -> int: # The title sits in the top padding strip of the info panel. This region # is well above the QR code, so it isolates the info-panel placement. - p = card_operations._TEXT_PADDING + p = classic_design._TEXT_PADDING region = img.crop( - (panel_x + p, p, panel_x + p + 300, p + card_operations._TITLE_LINE_HEIGHT) + (panel_x + p, p, panel_x + p + 300, p + classic_design._TITLE_LINE_HEIGHT) ) return region.getextrema()[0][1] # max R value @@ -242,10 +245,9 @@ def test_left_keeps_info_panel_in_left_half(self, tmp_path: Path) -> None: recipe = FujifilmRecipeFactory(name="My Recipe") filepath = card_operations.create_recipe_card_image( recipe=recipe, - template=card_templates.LONG_LABEL, + design=classic_design.ClassicDesign(info_side="left"), background_image=None, output_dir=tmp_path, - info_side="left", ) with PILImage.open(filepath) as img: assert self._max_title_brightness(img, panel_x=0) > 200 @@ -255,10 +257,9 @@ def test_right_moves_info_panel_to_right_half(self, tmp_path: Path) -> None: recipe = FujifilmRecipeFactory(name="My Recipe") filepath = card_operations.create_recipe_card_image( recipe=recipe, - template=card_templates.LONG_LABEL, + design=classic_design.ClassicDesign(info_side="right"), background_image=None, output_dir=tmp_path, - info_side="right", ) with PILImage.open(filepath) as img: assert self._max_title_brightness(img, panel_x=img.width // 2) > 200 diff --git a/tests/integration/domain/recipes/cards/test_create_recipe_cards_zip.py b/tests/integration/domain/recipes/cards/test_create_recipe_cards_zip.py index a64feec..4989132 100644 --- a/tests/integration/domain/recipes/cards/test_create_recipe_cards_zip.py +++ b/tests/integration/domain/recipes/cards/test_create_recipe_cards_zip.py @@ -5,7 +5,7 @@ import pytest from src.domain.recipes.cards import operations as card_operations -from src.domain.recipes.cards import templates as card_templates +from src.domain.recipes.cards.designs import classic as classic_design from tests.factories import FujifilmRecipeFactory @@ -15,7 +15,7 @@ def _make_card(self, tmp_path: Path) -> object: recipe = FujifilmRecipeFactory() return card_operations.create_recipe_card( recipe=recipe, - template=card_templates.LONG_LABEL, + design=classic_design.ClassicDesign(), background_image=None, output_dir=tmp_path, ) diff --git a/tests/unit/application/recipes/test_create_recipe_cards_batch.py b/tests/unit/application/recipes/test_create_recipe_cards_batch.py index 1df660f..a8e285c 100644 --- a/tests/unit/application/recipes/test_create_recipe_cards_batch.py +++ b/tests/unit/application/recipes/test_create_recipe_cards_batch.py @@ -39,7 +39,7 @@ def test_calls_create_recipe_card_for_every_id(self) -> None: uc.create_recipe_cards_batch(recipe_ids=[1, 2]) assert mock_create.call_count == 2 mock_create.assert_any_call( - recipe_id=1, image_id=None, template=uc._BATCH_TEMPLATE + recipe_id=1, image_id=None, design=uc._BATCH_DESIGN ) @@ -79,7 +79,7 @@ def test_captures_missing_recipe_as_not_found_failure(self) -> None: assert result.failures[0].is_not_found def test_failure_does_not_stop_processing_remaining_ids(self) -> None: - def _side_effect(*, recipe_id: int, image_id: int | None, template: object) -> MagicMock: + def _side_effect(*, recipe_id: int, image_id: int | None, design: object) -> MagicMock: if recipe_id == 2: raise models.FujifilmRecipe.DoesNotExist return _fake_card() diff --git a/tests/unit/domain/recipes/cards/test_create_recipe_card.py b/tests/unit/domain/recipes/cards/test_create_recipe_card.py index 05366f0..9621ab1 100644 --- a/tests/unit/domain/recipes/cards/test_create_recipe_card.py +++ b/tests/unit/domain/recipes/cards/test_create_recipe_card.py @@ -2,12 +2,11 @@ from unittest.mock import MagicMock, patch import pytest -from PIL import Image as PILImage from src.data import models from src.domain.images import events from src.domain.recipes.cards import operations as card_operations -from src.domain.recipes.cards import templates as card_templates +from src.domain.recipes.cards.designs import classic as classic_design def _make_fake_card(recipe_pk: int) -> MagicMock: @@ -36,7 +35,7 @@ def test_publishes_recipe_card_created_event( ): card = card_operations.create_recipe_card( recipe=recipe, - template=card_templates.LONG_LABEL, + design=classic_design.ClassicDesign(), background_image=None, output_dir=tmp_path, ) @@ -66,7 +65,7 @@ def test_event_contains_template_name( ): card_operations.create_recipe_card( recipe=recipe, - template=card_templates.SHORT_LABEL, + design=classic_design.ClassicDesign(label_style="short"), background_image=None, output_dir=tmp_path, ) @@ -90,7 +89,7 @@ def test_does_not_publish_event_if_image_creation_fails( with pytest.raises(OSError): card_operations.create_recipe_card( recipe=recipe, - template=card_templates.LONG_LABEL, + design=classic_design.ClassicDesign(), background_image=None, output_dir=tmp_path, ) @@ -99,142 +98,3 @@ def test_does_not_publish_event_if_image_creation_fails( e for e in captured_logs if e.get("event_type") == events.RECIPE_CARD_CREATED ] assert len(card_events) == 0 - - -class TestComposeCardTitle: - def _generate_card(self, recipe: MagicMock, tmp_path: Path) -> Path: - output_path = tmp_path / "card.jpg" - with ( - patch.object(card_operations, "_LOGO_PATH", tmp_path / "no_logo.png"), - patch.object(card_operations.card_queries, "get_recipe_cover_lines", return_value=()), - patch.object(card_operations.card_queries, "get_recipe_as_json", return_value='{"v":1}'), - ): - card_operations.preview_recipe_card_image( - recipe=recipe, - template=card_templates.LONG_LABEL, - background_image=None, - output_path=output_path, - ) - return output_path - - def _max_brightness_in_title_region(self, filepath: Path) -> int: - p = card_operations._TEXT_PADDING - with PILImage.open(filepath) as img: - region = img.crop((p, p, p + 300, p + card_operations._TITLE_LINE_HEIGHT)) - return region.getextrema()[0][1] # max R value in the region - - def test_title_is_rendered_when_recipe_has_name(self, tmp_path: Path) -> None: - recipe = MagicMock() - recipe.name = "My Recipe" - recipe.pk = 1 - - filepath = self._generate_card(recipe, tmp_path) - - # White text on a near-black gradient; max R in the title region must be bright. - assert self._max_brightness_in_title_region(filepath) > 200 - - def test_title_is_not_rendered_when_name_is_empty(self, tmp_path: Path) -> None: - recipe = MagicMock() - recipe.name = "" - recipe.pk = 1 - - filepath = self._generate_card(recipe, tmp_path) - - # Gradient at top-left is ~(18, 51, 64); no text means no bright pixels. - assert self._max_brightness_in_title_region(filepath) < 100 - - -class TestComposeCardLogoFallback: - def test_missing_logo_file_does_not_raise(self, tmp_path: Path) -> None: - recipe = MagicMock() - recipe.name = "" - recipe.pk = 1 - - with ( - patch.object(card_operations, "_LOGO_PATH", tmp_path / "no_logo.png"), - patch.object(card_operations.card_queries, "get_recipe_cover_lines", return_value=()), - patch.object(card_operations.card_queries, "get_recipe_as_json", return_value='{"v":1}'), - ): - output_path = tmp_path / "card.jpg" - result = card_operations.preview_recipe_card_image( - recipe=recipe, - template=card_templates.LONG_LABEL, - background_image=None, - output_path=output_path, - ) - - assert result == output_path - assert output_path.exists() - - -class TestComposeCardInfoSide: - def _generate_card( - self, tmp_path: Path, info_side: card_templates.InfoSide - ) -> Path: - recipe = MagicMock() - recipe.name = "My Recipe" - recipe.pk = 1 - output_path = tmp_path / f"card_{info_side}.jpg" - with ( - patch.object(card_operations, "_LOGO_PATH", tmp_path / "no_logo.png"), - patch.object(card_operations.card_queries, "get_recipe_cover_lines", return_value=()), - patch.object(card_operations.card_queries, "get_recipe_as_json", return_value='{"v":1}'), - ): - card_operations.preview_recipe_card_image( - recipe=recipe, - template=card_templates.LONG_LABEL, - background_image=None, - output_path=output_path, - info_side=info_side, - ) - return output_path - - def _max_brightness(self, filepath: Path, x0: int) -> int: - p = card_operations._TEXT_PADDING - with PILImage.open(filepath) as img: - region = img.crop((x0, p, x0 + 300, p + card_operations._TITLE_LINE_HEIGHT)) - return region.getextrema()[0][1] # max R value in the region - - def test_left_side_renders_title_in_left_half(self, tmp_path: Path) -> None: - filepath = self._generate_card(tmp_path, "left") - - left_x = card_operations._TEXT_PADDING - right_x = 1080 // 2 + card_operations._TEXT_PADDING - assert self._max_brightness(filepath, left_x) > 200 - assert self._max_brightness(filepath, right_x) < 100 - - def test_right_side_renders_title_in_right_half(self, tmp_path: Path) -> None: - filepath = self._generate_card(tmp_path, "right") - - left_x = card_operations._TEXT_PADDING - right_x = 1080 // 2 + card_operations._TEXT_PADDING - assert self._max_brightness(filepath, right_x) > 200 - assert self._max_brightness(filepath, left_x) < 100 - - def test_default_info_side_matches_explicit_left(self, tmp_path: Path) -> None: - recipe = MagicMock() - recipe.name = "My Recipe" - recipe.pk = 1 - paths = {} - for label, kwargs in ( - ("default", {}), - ("left", {"info_side": "left"}), - ): - output_path = tmp_path / f"card_{label}.jpg" - with ( - patch.object(card_operations, "_LOGO_PATH", tmp_path / "no_logo.png"), - patch.object(card_operations.card_queries, "get_recipe_cover_lines", return_value=()), - patch.object(card_operations.card_queries, "get_recipe_as_json", return_value='{"v":1}'), - ): - card_operations.preview_recipe_card_image( - recipe=recipe, - template=card_templates.LONG_LABEL, - background_image=None, - output_path=output_path, - **kwargs, - ) - paths[label] = output_path.read_bytes() - - assert paths["default"] == paths["left"] - - From 494f4505e302be410bccd3179a7028d37bca8384 Mon Sep 17 00:00:00 2001 From: Gosku Date: Sat, 25 Jul 2026 16:06:43 +1000 Subject: [PATCH 04/15] Vendor Archivo/Space Mono fonts and add portrait rendering helpers Add the OFL-licensed Archivo (variable) and Space Mono TTFs under interfaces/static/fonts, and bake the stacked filmcase logo (icon + Archivo Black wordmark, faithful to filmcase_stacked_tight.svg) to a 2x transparent PNG in the original-branding images. Add the shared rendering helpers the new portrait designs need: Archivo/Space Mono loaders, draw_tracked_text (Pillow has no letter-spacing), the inline filmcase wordmark, and rounded-corner mask / clip / paste helpers. Co-Authored-By: Claude Opus 4.8 --- src/domain/recipes/cards/rendering.py | 110 ++++++++++++++++++ src/interfaces/static/fonts/Archivo-OFL.txt | 93 +++++++++++++++ .../fonts/Archivo-VariableFont_wdth,wght.ttf | Bin 0 -> 658596 bytes .../static/fonts/SpaceMono-Bold.ttf | Bin 0 -> 98232 bytes src/interfaces/static/fonts/SpaceMono-OFL.txt | 93 +++++++++++++++ .../static/fonts/SpaceMono-Regular.ttf | Bin 0 -> 99356 bytes .../filmcase_stacked_tight.png | Bin 0 -> 30650 bytes .../domain/recipes/cards/test_rendering.py | 74 ++++++++++++ 8 files changed, 370 insertions(+) create mode 100644 src/interfaces/static/fonts/Archivo-OFL.txt create mode 100644 src/interfaces/static/fonts/Archivo-VariableFont_wdth,wght.ttf create mode 100644 src/interfaces/static/fonts/SpaceMono-Bold.ttf create mode 100644 src/interfaces/static/fonts/SpaceMono-OFL.txt create mode 100644 src/interfaces/static/fonts/SpaceMono-Regular.ttf create mode 100644 src/interfaces/static/images/original-branding/filmcase_stacked_tight.png diff --git a/src/domain/recipes/cards/rendering.py b/src/domain/recipes/cards/rendering.py index c485979..a933e96 100644 --- a/src/domain/recipes/cards/rendering.py +++ b/src/domain/recipes/cards/rendering.py @@ -26,6 +26,116 @@ # Prefix piexif writes before the payload when embedding recipe JSON. _EXIF_ASCII_PREFIX = b"ASCII\x00\x00\x00" +_STATIC_DIR = Path(__file__).resolve().parents[3] / "interfaces" / "static" +FONTS_DIR = _STATIC_DIR / "fonts" +ARCHIVO_PATH = FONTS_DIR / "Archivo-VariableFont_wdth,wght.ttf" +SPACE_MONO_REGULAR_PATH = FONTS_DIR / "SpaceMono-Regular.ttf" +SPACE_MONO_BOLD_PATH = FONTS_DIR / "SpaceMono-Bold.ttf" +STACKED_LOGO_PATH = _STATIC_DIR / "images" / "original-branding" / "filmcase_stacked_tight.png" + +# Archivo is a variable font. FreeType reports its axes in the order +# [Weight, Width]; we always render at the normal width. +_ARCHIVO_NORMAL_WIDTH = 100 + +RGBAColor = tuple[int, int, int, int] +RGBColor = tuple[int, int, int] + + +def load_archivo(size: int, *, weight: int) -> ImageFont.FreeTypeFont: + """ + Return the Archivo variable font at *size* px and the given *weight* (100-900). + """ + font = ImageFont.truetype(str(ARCHIVO_PATH), size) + font.set_variation_by_axes([weight, _ARCHIVO_NORMAL_WIDTH]) + return font + + +def load_space_mono(size: int, *, bold: bool = False) -> ImageFont.FreeTypeFont: + """ + Return the Space Mono font at *size* px, bold or regular. + """ + path = SPACE_MONO_BOLD_PATH if bold else SPACE_MONO_REGULAR_PATH + return ImageFont.truetype(str(path), size) + + +def draw_tracked_text( + draw: ImageDraw.ImageDraw, + xy: tuple[float, float], + text: str, + *, + font: ImageFont.FreeTypeFont, + fill: RGBColor | RGBAColor, + tracking: float = 0.0, + anchor: str = "la", +) -> float: + """ + Draw *text* one glyph at a time, advancing by glyph width plus *tracking*. + + Pillow's ImageDraw.text has no letter-spacing parameter, so tracked labels + (positive tracking on the mono labels, negative on tight titles) are drawn + glyph by glyph. Returns the x coordinate just past the last glyph. + """ + x, y = xy + for char in text: + draw.text((x, y), char, font=font, fill=fill, anchor=anchor) + x += draw.textlength(char, font=font) + tracking + return x + + +def draw_filmcase_wordmark( + draw: ImageDraw.ImageDraw, + xy: tuple[float, float], + *, + font: ImageFont.FreeTypeFont, + film_color: RGBColor | RGBAColor, + case_color: RGBColor | RGBAColor, + tracking: float = 0.0, + anchor: str = "la", +) -> float: + """ + Draw the inline "filmcase" wordmark (``film`` then ``case``) back to back. + + Used for the "IMPORT RECIPE WITH filmcase" label. ``film`` and ``case`` are + drawn as separate runs so each can take its own colour. Returns the x + coordinate just past the wordmark. + """ + x = draw_tracked_text(draw, xy, "film", font=font, fill=film_color, tracking=tracking, anchor=anchor) + return draw_tracked_text(draw, (x, xy[1]), "case", font=font, fill=case_color, tracking=tracking, anchor=anchor) + + +def rounded_mask(size: tuple[int, int], radius: int) -> PILImage.Image: + """ + Return an "L" mode alpha mask: opaque inside a rounded rectangle, else clear. + """ + mask = PILImage.new("L", size, 0) + ImageDraw.Draw(mask).rounded_rectangle( + [(0, 0), (size[0] - 1, size[1] - 1)], radius=radius, fill=255 + ) + return mask + + +def round_corners(img: PILImage.Image, radius: int) -> PILImage.Image: + """ + Return an RGBA copy of *img* with its corners clipped to *radius*. + """ + rgba = img.convert("RGBA") + rgba.putalpha(rounded_mask(rgba.size, radius)) + return rgba + + +def paste_rounded( + canvas: PILImage.Image, + img: PILImage.Image, + position: tuple[int, int], + radius: int, +) -> None: + """ + Alpha-composite *img* onto *canvas* at *position* with rounded corners. + + *canvas* must be in RGBA mode. + """ + canvas.alpha_composite(round_corners(img, radius), position) + @attrs.frozen class RenderedCard: diff --git a/src/interfaces/static/fonts/Archivo-OFL.txt b/src/interfaces/static/fonts/Archivo-OFL.txt new file mode 100644 index 0000000..8597481 --- /dev/null +++ b/src/interfaces/static/fonts/Archivo-OFL.txt @@ -0,0 +1,93 @@ +Copyright 2020 The Archivo Project Authors (https://github.com/Omnibus-Type/Archivo) + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/src/interfaces/static/fonts/Archivo-VariableFont_wdth,wght.ttf b/src/interfaces/static/fonts/Archivo-VariableFont_wdth,wght.ttf new file mode 100644 index 0000000000000000000000000000000000000000..cc64253d36665a5ca0d6719cdf1e32b3de453b51 GIT binary patch literal 658596 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

nm;2NUFRC${vR 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

l3Be9C4i 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�AX6$CMwN}s4U)$r6)w3? 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 z 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

of^bo5Zce-mS`ZNCP^RoqUeue-;SW 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 O#a@p$^!B9uJM~X~{*CMa literal 0 HcmV?d00001 diff --git a/src/interfaces/static/images/original-branding/filmcase_stacked_tight.png b/src/interfaces/static/images/original-branding/filmcase_stacked_tight.png new file mode 100644 index 0000000000000000000000000000000000000000..7a7f21e10dd00fa949eb1e196f5a296e8c98e41a GIT binary patch literal 30650 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 literal 0 HcmV?d00001 diff --git a/tests/unit/domain/recipes/cards/test_rendering.py b/tests/unit/domain/recipes/cards/test_rendering.py index 7243124..cf1c285 100644 --- a/tests/unit/domain/recipes/cards/test_rendering.py +++ b/tests/unit/domain/recipes/cards/test_rendering.py @@ -1,6 +1,7 @@ from pathlib import Path from PIL import Image as PILImage +from PIL import ImageDraw, ImageFont from src.domain.recipes.cards import queries as card_queries from src.domain.recipes.cards import rendering @@ -52,3 +53,76 @@ def test_embedded_json_round_trips_through_the_reader(self, tmp_path: Path) -> N rendering.embed_recipe_exif(filepath=filepath, json_str=json_str) assert card_queries._read_exif_recipe(image_path=str(filepath)) == json_str + + +class TestFontLoaders: + def test_archivo_loads_as_a_truetype_font(self) -> None: + font = rendering.load_archivo(52, weight=800) + + assert isinstance(font, ImageFont.FreeTypeFont) + + def test_archivo_weight_changes_glyph_width(self) -> None: + # A heavier weight renders wider glyphs, so the same text is wider. + thin = rendering.load_archivo(52, weight=100) + black = rendering.load_archivo(52, weight=900) + draw = ImageDraw.Draw(PILImage.new("RGB", (10, 10))) + + assert draw.textlength("filmcase", font=black) > draw.textlength("filmcase", font=thin) + + def test_space_mono_bold_and_regular_both_load(self) -> None: + assert isinstance(rendering.load_space_mono(24), ImageFont.FreeTypeFont) + assert isinstance(rendering.load_space_mono(24, bold=True), ImageFont.FreeTypeFont) + + +class TestDrawTrackedText: + def test_positive_tracking_widens_the_run(self) -> None: + font = rendering.load_space_mono(24) + draw = ImageDraw.Draw(PILImage.new("RGB", (400, 60))) + + untracked_end = rendering.draw_tracked_text( + draw, (0, 0), "ABCDE", font=font, fill=(255, 255, 255), tracking=0, + ) + tracked_end = rendering.draw_tracked_text( + draw, (0, 0), "ABCDE", font=font, fill=(255, 255, 255), tracking=5, + ) + + assert tracked_end > untracked_end + + +class TestFilmcaseWordmark: + def test_advances_past_the_start(self) -> None: + font = rendering.load_archivo(27, weight=900) + draw = ImageDraw.Draw(PILImage.new("RGB", (400, 60))) + + end = rendering.draw_filmcase_wordmark( + draw, (10, 0), font=font, film_color=(239, 68, 68), case_color=(17, 24, 39), + ) + + assert end > 10 + + +class TestRoundedCorners: + def test_rounded_mask_clears_corners_and_fills_centre(self) -> None: + mask = rendering.rounded_mask((100, 100), radius=30) + + assert mask.getpixel((0, 0)) == 0 + assert mask.getpixel((50, 50)) == 255 + + def test_round_corners_makes_corner_transparent(self) -> None: + img = PILImage.new("RGB", (100, 100), (10, 20, 30)) + + rounded = rendering.round_corners(img, radius=30) + + assert rounded.mode == "RGBA" + assert rounded.getpixel((0, 0))[3] == 0 + assert rounded.getpixel((50, 50))[3] == 255 + + def test_paste_rounded_composites_onto_canvas(self) -> None: + canvas = PILImage.new("RGBA", (200, 200), (0, 0, 0, 255)) + patch = PILImage.new("RGB", (100, 100), (255, 0, 0)) + + rendering.paste_rounded(canvas, patch, (50, 50), radius=20) + + # Centre of the pasted patch is red; a canvas corner is untouched black. + assert canvas.getpixel((100, 100))[:3] == (255, 0, 0) + assert canvas.getpixel((0, 0))[:3] == (0, 0, 0) From 928a5ed6f0469408bfe3546927fb188724ef3c6a Mon Sep 17 00:00:00 2001 From: Gosku Date: Sat, 25 Jul 2026 17:21:54 +1000 Subject: [PATCH 05/15] Add the Aperture card design Add ApertureDesign: a dark, story-format (1080x1920) card with a blurred, darkened photo background, a rounded hero photo, frosted-glass parameter tiles (a Film Simulation + White Balance hero row and a 3-column grid), and a bottom import module with the stacked logo and QR on a white pill. The QR stays the shared 300px so every design scans the same way. Add reusable queries the designs share: get_recipe_field_lines (format an ordered field subset, reusing the applicability rules), is_monochromatic, and get_sensor_names; get_recipe_cover_lines now builds on the first. Co-Authored-By: Claude Opus 4.8 --- src/domain/recipes/cards/designs/aperture.py | 401 ++++++++++++++++++ src/domain/recipes/cards/queries.py | 55 ++- .../recipes/cards/test_aperture_design.py | 64 +++ 3 files changed, 509 insertions(+), 11 deletions(-) create mode 100644 src/domain/recipes/cards/designs/aperture.py create mode 100644 tests/integration/domain/recipes/cards/test_aperture_design.py diff --git a/src/domain/recipes/cards/designs/aperture.py b/src/domain/recipes/cards/designs/aperture.py new file mode 100644 index 0000000..3a3e1a0 --- /dev/null +++ b/src/domain/recipes/cards/designs/aperture.py @@ -0,0 +1,401 @@ +from __future__ import annotations + +from typing import ClassVar + +import attrs +from PIL import Image as PILImage +from PIL import ImageDraw, ImageEnhance, ImageFilter, ImageFont + +from src.data import models +from src.domain.recipes.cards import queries as card_queries +from src.domain.recipes.cards import rendering +from src.domain.recipes.cards.designs import base + +_SIZE = (1080, 1920) +_CONTENT_X = 56 +_CONTENT_W = 968 # 1080 - 56 - 56 +_MARGIN_TOP = 48 +_MARGIN_BOTTOM = 30 + +# Real minus sign (U+2212) for negative values, per the design spec. +_MINUS = "−" + +# Background: blurred, lightly darkened but saturation-boosted photo with a +# top->bottom black scrim (matches the design's blur/brightness/saturate). +_BG_BLUR = 64 +_BG_BRIGHTNESS = 0.78 +_BG_SATURATION = 1.25 +_SCRIM_COLOR = (10, 11, 15) +_SCRIM_ALPHA_TOP = int(0.30 * 255) +_SCRIM_ALPHA_BOTTOM = int(0.80 * 255) + +_WHITE = (255, 255, 255) +_EYEBROW_COLOR = (170, 174, 182) +_HERO_LABEL_COLOR = (168, 172, 180) +_GRID_LABEL_COLOR = (163, 167, 176) +_IMPORT_LABEL_COLOR = (204, 208, 216) +_WB_RED = (255, 107, 107) +_WB_BLUE = (107, 168, 255) +_WORDMARK_FILM = (239, 68, 68) +_WORDMARK_CASE = (241, 245, 249) + +# Header +_EYEBROW_SIZE = 24 +_EYEBROW_TRACKING = 2 +_TITLE_SIZE = 52 +_TITLE_TRACKING = -2 +_EYEBROW_TO_TITLE = 6 +_TITLE_TO_HERO = 20 + +# Hero photo (native 3:2, full content width) +_HERO_H = 645 # 968 * 2 / 3 +_HERO_RADIUS = 26 +_HERO_TO_TILES = 12 + +# Hero tiles (Film Simulation + White Balance) +_HERO_TILE_GAP = 14 +_HERO_TILE_H = 104 +_HERO_TILE_RADIUS = 20 +_HERO_TILE_FILL = (255, 255, 255, 26) +_HERO_TILE_BORDER = (255, 255, 255, 41) +_HERO_TILE_PAD_X = 22 +_HERO_TILE_PAD_Y = 13 +_HERO_SIM_FLEX = 1.4 +_HERO_WB_FLEX = 1.0 +_HERO_LABEL_SIZE = 22 +_HERO_LABEL_TRACKING = 1.5 +_HERO_VALUE_SIZE = 36 +_HERO_VALUE_TRACKING = -1 +_WB_SHIFT_SIZE = 26 +_HERO_TILES_TO_GRID = 10 + +# Parameter grid (3 columns) +_GRID_COLS = 3 +_GRID_GAP = 12 +_GRID_TILE_H = 96 +_GRID_TILE_RADIUS = 16 +_GRID_TILE_FILL = (255, 255, 255, 20) +_GRID_TILE_BORDER = (255, 255, 255, 33) +_GRID_PAD_X = 18 +_GRID_PAD_Y = 13 +_GRID_LABEL_SIZE = 20 +_GRID_LABEL_TRACKING = 1 +_GRID_VALUE_SIZE = 30 +_GRID_VALUE_TRACKING = -0.5 + +# Import module +_IMPORT_BAR_RADIUS = 22 +_IMPORT_BAR_FILL = (255, 255, 255, 20) +_IMPORT_BAR_BORDER = (255, 255, 255, 33) +_IMPORT_BAR_PAD = 18 +_IMPORT_LABEL_SIZE = 21 +_IMPORT_LABEL_TRACKING = 3 +_IMPORT_LABEL_TO_PILL = 14 +_WORDMARK_SIZE = 30 +_PILL_RADIUS = 14 +_PILL_PAD_X = 24 +_PILL_PAD_Y = 14 +_LOGO_H = 200 + +# Grid field order. Hidden/inapplicable fields are dropped by the query. +_GRID_FIELDS_COLOR: tuple[str, ...] = ( + "grain_roughness", + "grain_size", + "dynamic_range", + "d_range_priority", + "color_chrome_effect", + "color_chrome_fx_blue", + "highlight", + "shadow", + "color", + "sharpness", + "high_iso_nr", + "clarity", +) +_GRID_FIELDS_BW: tuple[str, ...] = ( + "grain_roughness", + "grain_size", + "dynamic_range", + "d_range_priority", + "color_chrome_effect", + "color_chrome_fx_blue", + "monochromatic_color_warm_cool", + "monochromatic_color_magenta_green", + "highlight", + "shadow", + "sharpness", + "high_iso_nr", + "clarity", +) + + +def _display_value(value: str) -> str: + return value.replace("-", _MINUS) + + +def _line_height(font: ImageFont.FreeTypeFont) -> int: + ascent, descent = font.getmetrics() + return ascent + descent + + +def _frosted_tile( + size: tuple[int, int], + *, + radius: int, + fill: rendering.RGBAColor, + border: rendering.RGBAColor, +) -> PILImage.Image: + tile = PILImage.new("RGBA", size, (0, 0, 0, 0)) + ImageDraw.Draw(tile).rounded_rectangle( + [(0, 0), (size[0] - 1, size[1] - 1)], + radius=radius, + fill=fill, + outline=border, + width=1, + ) + return tile + + +def _vertical_scrim( + size: tuple[int, int], + color: rendering.RGBColor, + alpha_top: int, + alpha_bottom: int, +) -> PILImage.Image: + width, height = size + column = PILImage.new("RGBA", (1, height)) + for y in range(height): + alpha = int(alpha_top + (alpha_bottom - alpha_top) * y / (height - 1)) + column.putpixel((0, y), (*color, alpha)) + return column.resize((width, height)) + + +@attrs.frozen +class ApertureDesign(base.CardDesign): + """ + A dark, story-format (9:16) card: a blurred photo background, a hero photo, + frosted-glass parameter tiles, and a bottom import module with the logo + QR. + """ + + output_size: ClassVar[tuple[int, int]] = _SIZE + requires_background_image: ClassVar[bool] = True + + @property + def template_name(self) -> str: + return "aperture" + + def render( + self, + *, + recipe: models.FujifilmRecipe, + background_image: models.Image | None, + ) -> rendering.RenderedCard: + canvas = self._build_background(background_image) + draw = ImageDraw.Draw(canvas) + + y = self._draw_header(canvas, draw, recipe, _MARGIN_TOP) + if background_image is not None: + with PILImage.open(background_image.filepath) as photo: + hero = rendering.cover_fill(photo.convert("RGB"), _CONTENT_W, _HERO_H) + rendering.paste_rounded(canvas, hero, (_CONTENT_X, y), _HERO_RADIUS) + y += _HERO_H + y += _HERO_TO_TILES + y = self._draw_hero_tiles(canvas, draw, recipe, y) + y += _HERO_TILES_TO_GRID + self._draw_grid(canvas, draw, recipe, y) + + self._draw_import_module(canvas, draw, recipe) + + json_str = card_queries.get_recipe_as_json(recipe=recipe) + return rendering.RenderedCard( + canvas=canvas.convert("RGB"), + json_str=json_str, + embed_exif=background_image is None, + ) + + def _build_background(self, background_image: models.Image | None) -> PILImage.Image: + width, height = _SIZE + if background_image is None: + base_img = rendering.build_gradient(width, height).convert("RGBA") + else: + with PILImage.open(background_image.filepath) as img: + filled = rendering.cover_fill(img.convert("RGB"), width, height) + blurred = filled.filter(ImageFilter.GaussianBlur(_BG_BLUR)) + saturated = ImageEnhance.Color(blurred).enhance(_BG_SATURATION) + darkened = ImageEnhance.Brightness(saturated).enhance(_BG_BRIGHTNESS) + base_img = darkened.convert("RGBA") + scrim = _vertical_scrim((width, height), _SCRIM_COLOR, _SCRIM_ALPHA_TOP, _SCRIM_ALPHA_BOTTOM) + base_img.alpha_composite(scrim) + return base_img + + def _eyebrow_text(self, recipe: models.FujifilmRecipe) -> str: + parts = ["FILM RECIPE"] + if card_queries.is_monochromatic(recipe): + parts.append("B&W") + sensors = card_queries.get_sensor_names(recipe) + if sensors: + parts.append(", ".join(sensors)) + return " · ".join(parts).upper() + + def _draw_header( + self, + canvas: PILImage.Image, + draw: ImageDraw.ImageDraw, + recipe: models.FujifilmRecipe, + top: int, + ) -> int: + eyebrow_font = rendering.load_space_mono(_EYEBROW_SIZE) + rendering.draw_tracked_text( + draw, + (_CONTENT_X, top), + self._eyebrow_text(recipe), + font=eyebrow_font, + fill=_EYEBROW_COLOR, + tracking=_EYEBROW_TRACKING, + ) + y = top + _line_height(eyebrow_font) + _EYEBROW_TO_TITLE + title_font = rendering.load_archivo(_TITLE_SIZE, weight=800) + rendering.draw_tracked_text( + draw, + (_CONTENT_X, y), + recipe.name or recipe.film_simulation, + font=title_font, + fill=_WHITE, + tracking=_TITLE_TRACKING, + ) + return y + _line_height(title_font) + _TITLE_TO_HERO + + def _draw_hero_tiles( + self, + canvas: PILImage.Image, + draw: ImageDraw.ImageDraw, + recipe: models.FujifilmRecipe, + top: int, + ) -> int: + flex_total = _HERO_SIM_FLEX + _HERO_WB_FLEX + available = _CONTENT_W - _HERO_TILE_GAP + sim_w = int(available * _HERO_SIM_FLEX / flex_total) + wb_w = _CONTENT_W - _HERO_TILE_GAP - sim_w + + label_font = rendering.load_space_mono(_HERO_LABEL_SIZE) + value_font = rendering.load_archivo(_HERO_VALUE_SIZE, weight=800) + shift_font = rendering.load_space_mono(_WB_SHIFT_SIZE, bold=True) + + # Values and the WB shift share one baseline so R/B line up with the + # value text (matching the design's align-items: baseline). + ly = top + _HERO_TILE_PAD_Y + vy = ly + _line_height(label_font) + 4 + value_baseline = vy + value_font.getmetrics()[0] + + # Film Simulation tile. + self._frosted(canvas, (_CONTENT_X, top), (sim_w, _HERO_TILE_H), _HERO_TILE_RADIUS, _HERO_TILE_FILL, _HERO_TILE_BORDER) + lx = _CONTENT_X + _HERO_TILE_PAD_X + rendering.draw_tracked_text(draw, (lx, ly), "FILM SIMULATION", font=label_font, fill=_HERO_LABEL_COLOR, tracking=_HERO_LABEL_TRACKING) + rendering.draw_tracked_text(draw, (lx, value_baseline), recipe.film_simulation, font=value_font, fill=_WHITE, tracking=_HERO_VALUE_TRACKING, anchor="ls") + + # White Balance tile. + wb_x = _CONTENT_X + sim_w + _HERO_TILE_GAP + self._frosted(canvas, (wb_x, top), (wb_w, _HERO_TILE_H), _HERO_TILE_RADIUS, _HERO_TILE_FILL, _HERO_TILE_BORDER) + wlx = wb_x + _HERO_TILE_PAD_X + rendering.draw_tracked_text(draw, (wlx, ly), "WHITE BALANCE", font=label_font, fill=_HERO_LABEL_COLOR, tracking=_HERO_LABEL_TRACKING) + end_x = rendering.draw_tracked_text(draw, (wlx, value_baseline), recipe.white_balance, font=value_font, fill=_WHITE, tracking=_HERO_VALUE_TRACKING, anchor="ls") + shift_x = end_x + 14 + red = _display_value(f"R {recipe.white_balance_red:+d}") + blue = _display_value(f"B {recipe.white_balance_blue:+d}") + red_end = rendering.draw_tracked_text(draw, (shift_x, value_baseline), red, font=shift_font, fill=_WB_RED, anchor="ls") + rendering.draw_tracked_text(draw, (red_end + 12, value_baseline), blue, font=shift_font, fill=_WB_BLUE, anchor="ls") + + return top + _HERO_TILE_H + + def _draw_grid( + self, + canvas: PILImage.Image, + draw: ImageDraw.ImageDraw, + recipe: models.FujifilmRecipe, + top: int, + ) -> None: + fields = _GRID_FIELDS_BW if card_queries.is_monochromatic(recipe) else _GRID_FIELDS_COLOR + tiles = card_queries.get_recipe_field_lines(recipe=recipe, fields=fields, label_style="long") + label_font = rendering.load_space_mono(_GRID_LABEL_SIZE) + value_font = rendering.load_archivo(_GRID_VALUE_SIZE, weight=800) + cell_w = (_CONTENT_W - (_GRID_COLS - 1) * _GRID_GAP) // _GRID_COLS + + for index, line in enumerate(tiles): + row, col = divmod(index, _GRID_COLS) + x = _CONTENT_X + col * (cell_w + _GRID_GAP) + y = top + row * (_GRID_TILE_H + _GRID_GAP) + self._frosted(canvas, (x, y), (cell_w, _GRID_TILE_H), _GRID_TILE_RADIUS, _GRID_TILE_FILL, _GRID_TILE_BORDER) + lx = x + _GRID_PAD_X + ly = y + _GRID_PAD_Y + rendering.draw_tracked_text(draw, (lx, ly), line.label.upper(), font=label_font, fill=_GRID_LABEL_COLOR, tracking=_GRID_LABEL_TRACKING) + vy = ly + _line_height(label_font) + 2 + rendering.draw_tracked_text(draw, (lx, vy), _display_value(line.value), font=value_font, fill=_WHITE, tracking=_GRID_VALUE_TRACKING) + + def _draw_import_module( + self, + canvas: PILImage.Image, + draw: ImageDraw.ImageDraw, + recipe: models.FujifilmRecipe, + ) -> None: + label_font = rendering.load_space_mono(_IMPORT_LABEL_SIZE, bold=True) + wordmark_font = rendering.load_archivo(_WORDMARK_SIZE, weight=900) + qr = rendering.make_qr(card_queries.get_recipe_as_json(recipe=recipe)).convert("RGB") + with PILImage.open(rendering.STACKED_LOGO_PATH) as logo_src: + logo_rgba = logo_src.convert("RGBA") + logo_w = int(_LOGO_H * logo_rgba.width / logo_rgba.height) + logo = logo_rgba.resize((logo_w, _LOGO_H), PILImage.Resampling.LANCZOS) + + pill_content_w = logo_w + qr.width + pill_w = pill_content_w + _PILL_PAD_X * 2 + pill_h = max(_LOGO_H, qr.height) + _PILL_PAD_Y * 2 + + label = "IMPORT RECIPE WITH " + label_w = self._tracked_width(draw, label, label_font, _IMPORT_LABEL_TRACKING) + wordmark_w = self._tracked_width(draw, "filmcase", wordmark_font, 0) + label_row_w = label_w + wordmark_w + label_row_h = max(_line_height(label_font), _line_height(wordmark_font)) + + bar_content_w = max(pill_w, label_row_w) + bar_w = bar_content_w + _IMPORT_BAR_PAD * 2 + bar_h = _IMPORT_BAR_PAD * 2 + label_row_h + _IMPORT_LABEL_TO_PILL + pill_h + bar_x = (_SIZE[0] - bar_w) // 2 + bar_y = _SIZE[1] - _MARGIN_BOTTOM - bar_h + + self._frosted(canvas, (bar_x, bar_y), (bar_w, bar_h), _IMPORT_BAR_RADIUS, _IMPORT_BAR_FILL, _IMPORT_BAR_BORDER) + + # Centered label row: mono label + coloured wordmark. + label_x = bar_x + (bar_w - label_row_w) // 2 + label_y = bar_y + _IMPORT_BAR_PAD + end_x = rendering.draw_tracked_text(draw, (label_x, label_y), label, font=label_font, fill=_IMPORT_LABEL_COLOR, tracking=_IMPORT_LABEL_TRACKING) + rendering.draw_filmcase_wordmark(draw, (end_x, label_y), font=wordmark_font, film_color=_WORDMARK_FILM, case_color=_WORDMARK_CASE) + + # White pill holding the logo + QR couple. + pill_x = bar_x + (bar_w - pill_w) // 2 + pill_y = label_y + label_row_h + _IMPORT_LABEL_TO_PILL + pill = PILImage.new("RGBA", (pill_w, pill_h), (0, 0, 0, 0)) + ImageDraw.Draw(pill).rounded_rectangle( + [(0, 0), (pill_w - 1, pill_h - 1)], radius=_PILL_RADIUS, fill=(255, 255, 255, 255) + ) + pill.alpha_composite(logo, (_PILL_PAD_X, (pill_h - _LOGO_H) // 2)) + pill.paste(qr, (_PILL_PAD_X + logo_w, (pill_h - qr.height) // 2)) + canvas.alpha_composite(pill, (pill_x, pill_y)) + + def _frosted( + self, + canvas: PILImage.Image, + position: tuple[int, int], + size: tuple[int, int], + radius: int, + fill: rendering.RGBAColor, + border: rendering.RGBAColor, + ) -> None: + canvas.alpha_composite(_frosted_tile(size, radius=radius, fill=fill, border=border), position) + + def _tracked_width( + self, + draw: ImageDraw.ImageDraw, + text: str, + font: ImageFont.FreeTypeFont, + tracking: float, + ) -> int: + return int(sum(draw.textlength(char, font=font) + tracking for char in text)) diff --git a/src/domain/recipes/cards/queries.py b/src/domain/recipes/cards/queries.py index b6ff2e3..c2917cc 100644 --- a/src/domain/recipes/cards/queries.py +++ b/src/domain/recipes/cards/queries.py @@ -1,6 +1,7 @@ from __future__ import annotations import json +from collections.abc import Sequence import attrs import piexif # type: ignore[import-untyped] @@ -121,15 +122,28 @@ def _format_value(field: str, raw: object) -> str: }) +def is_monochromatic(recipe: models.FujifilmRecipe) -> bool: + """ + Return True when the recipe's film simulation is a black-and-white one. + """ + return recipe.film_simulation in recipe_constants.MONOCHROMATIC_FILM_SIMULATIONS + + +def get_sensor_names(recipe: models.FujifilmRecipe) -> tuple[str, ...]: + """ + Return the recipe's sensor names, sorted, for display on a card. + """ + return tuple(sorted(recipe.sensors.values_list("name", flat=True))) + + def _is_applicable(recipe: models.FujifilmRecipe, field: str) -> bool: """ Return False when a field is semantically inapplicable for this recipe. """ - is_monochromatic = recipe.film_simulation in recipe_constants.MONOCHROMATIC_FILM_SIMULATIONS drp_active = recipe.d_range_priority != "Off" - if field in _COLOR_ONLY_FIELDS and is_monochromatic: + if field in _COLOR_ONLY_FIELDS and is_monochromatic(recipe): return False - if field in _MONOCHROME_ONLY_FIELDS and not is_monochromatic: + if field in _MONOCHROME_ONLY_FIELDS and not is_monochromatic(recipe): return False if field == _GRAIN_SIZE_FIELD and recipe.grain_roughness == "Off": return False @@ -170,6 +184,32 @@ def get_recipe_as_json(*, recipe: models.FujifilmRecipe) -> str: return json.dumps(payload, separators=(",", ":")) +def get_recipe_field_lines( + *, + recipe: models.FujifilmRecipe, + fields: Sequence[str], + label_style: str = "long", +) -> tuple[FieldLine, ...]: + """ + Return FieldLines for *fields*, in order, formatted per *label_style*. + + Skips fields that are semantically inapplicable to the recipe (same rules as + get_recipe_as_json) or whose value is None. This is the shared building block + for card designs that choose their own field subset and order; it does not + prepend a Sensors line (designs that want sensors add them explicitly). + """ + labels = _LONG_LABELS if label_style == "long" else _SHORT_LABELS + lines: list[FieldLine] = [] + for field in fields: + if not _is_applicable(recipe, field): + continue + raw = _get_raw_value(recipe, field) + if raw is None: + continue + lines.append(FieldLine(label=labels[field], value=_format_value(field, raw))) + return tuple(lines) + + def get_recipe_cover_lines( *, recipe: models.FujifilmRecipe, @@ -191,14 +231,7 @@ def get_recipe_cover_lines( lines.append( FieldLine(label=labels["sensors"], value=", ".join(sensor_names)) ) - for field in _DISPLAY_FIELDS: - if not _is_applicable(recipe, field): - continue - raw = _get_raw_value(recipe, field) - if raw is None: - continue - value = _format_value(field, raw) - lines.append(FieldLine(label=labels[field], value=value)) + lines.extend(get_recipe_field_lines(recipe=recipe, fields=_DISPLAY_FIELDS, label_style=label_style)) return tuple(lines) diff --git a/tests/integration/domain/recipes/cards/test_aperture_design.py b/tests/integration/domain/recipes/cards/test_aperture_design.py new file mode 100644 index 0000000..36a109b --- /dev/null +++ b/tests/integration/domain/recipes/cards/test_aperture_design.py @@ -0,0 +1,64 @@ +from pathlib import Path + +import pytest +from PIL import Image as PILImage + +from src.domain.recipes.cards import queries as card_queries +from src.domain.recipes.cards.designs import aperture +from tests.factories import FujifilmRecipeFactory + + +def _photo(tmp_path: Path) -> object: + # A plain on-disk photo the design can open as the hero / blurred background. + path = tmp_path / "photo.jpg" + PILImage.new("RGB", (900, 600), (120, 60, 40)).save(str(path), format="JPEG") + + class _Image: + filepath = str(path) + + return _Image() + + +class TestApertureDesignMetadata: + def test_template_name(self) -> None: + assert aperture.ApertureDesign().template_name == "aperture" + + def test_output_size_is_portrait(self) -> None: + assert aperture.ApertureDesign().output_size == (1080, 1920) + + def test_requires_a_background_image(self) -> None: + assert aperture.ApertureDesign().requires_background_image is True + + +@pytest.mark.django_db +class TestApertureDesignRender: + def test_renders_portrait_rgb_jpeg_canvas(self, tmp_path: Path) -> None: + recipe = FujifilmRecipeFactory(name="Portra", film_simulation="Classic Chrome") + + rendered = aperture.ApertureDesign().render(recipe=recipe, background_image=_photo(tmp_path)) + + assert rendered.canvas.size == (1080, 1920) + assert rendered.canvas.mode == "RGB" + + def test_qr_round_trips(self, tmp_path: Path) -> None: + recipe = FujifilmRecipeFactory(film_simulation="Classic Chrome") + + rendered = aperture.ApertureDesign().render(recipe=recipe, background_image=_photo(tmp_path)) + out = tmp_path / "card.jpg" + rendered.canvas.save(str(out), format="JPEG", quality=92) + + decoded = card_queries.get_qr_recipe_from_image(image_path=str(out)) + assert decoded.film_simulation == "Classic Chrome" + + def test_eyebrow_marks_bw_recipe(self, tmp_path: Path) -> None: + recipe = FujifilmRecipeFactory(film_simulation="Acros Yellow") + + assert "B&W" in aperture.ApertureDesign()._eyebrow_text(recipe) + + def test_falls_back_to_gradient_without_photo(self) -> None: + recipe = FujifilmRecipeFactory(film_simulation="Classic Chrome") + + rendered = aperture.ApertureDesign().render(recipe=recipe, background_image=None) + + assert rendered.canvas.size == (1080, 1920) + assert rendered.embed_exif is True From f3ef0c3cc2bdc2f37809c579a653f80f1671b344 Mon Sep 17 00:00:00 2001 From: Gosku Date: Sat, 25 Jul 2026 17:37:42 +1000 Subject: [PATCH 06/15] Add the Contact Sheet card design Add ContactSheetDesign: a light paper spec-sheet card (1080x1920) with a blurred photo frame behind a rounded paper panel that holds a red-accented header, a hero photo, a two-column key/value list of every parameter with hairline rows, and a hairline-separated import module with the logo + QR directly on the paper. Add a shared rendering.line_height helper used by both portrait designs. Co-Authored-By: Claude Opus 4.8 --- .../recipes/cards/designs/contact_sheet.py | 311 ++++++++++++++++++ src/domain/recipes/cards/rendering.py | 8 + .../cards/test_contact_sheet_design.py | 83 +++++ 3 files changed, 402 insertions(+) create mode 100644 src/domain/recipes/cards/designs/contact_sheet.py create mode 100644 tests/integration/domain/recipes/cards/test_contact_sheet_design.py diff --git a/src/domain/recipes/cards/designs/contact_sheet.py b/src/domain/recipes/cards/designs/contact_sheet.py new file mode 100644 index 0000000..d074b76 --- /dev/null +++ b/src/domain/recipes/cards/designs/contact_sheet.py @@ -0,0 +1,311 @@ +from __future__ import annotations + +from typing import ClassVar + +import attrs +from PIL import Image as PILImage +from PIL import ImageDraw, ImageEnhance, ImageFilter, ImageFont + +from src.data import models +from src.domain.recipes.cards import queries as card_queries +from src.domain.recipes.cards import rendering +from src.domain.recipes.cards.designs import base + +_SIZE = (1080, 1920) +_MINUS = "−" + +# Blurred, lightly darkened photo frame behind the paper panel. +_BG_BLUR = 60 +_BG_BRIGHTNESS = 0.85 +_SCRIM = (20, 22, 28, int(0.28 * 255)) + +# Paper panel +_PANEL_INSET = 26 +_PANEL_RADIUS = 30 +_PAD_L = 48 +_PAD_R = 48 +_PAD_T = 44 +_PAD_B = 40 + +_PAPER = (247, 246, 243) +_INK = (17, 24, 39) +_RED = (239, 68, 68) +_HAIRLINE = (228, 226, 220) +_MUTED_LABEL = (125, 130, 140) +_EYEBROW = (138, 143, 153) + +# Header +_ACCENT_W = 8 +_ACCENT_H = 44 +_ACCENT_RADIUS = 2 +_ACCENT_GAP = 16 +_EYEBROW_SIZE = 22 +_EYEBROW_TRACKING = 2 +_TITLE_SIZE = 50 +_TITLE_TRACKING = -1.5 +_EYEBROW_TO_TITLE = 4 +_HEADER_TO_HERO = 24 + +# Hero photo +_HERO_RADIUS = 20 +_HERO_TO_ROWS = 22 + +# Two-column key/value rows +_ROW_COLS = 2 +_ROW_COL_GAP = 52 +_ROW_PAD_Y = 11 +_ROW_LABEL_SIZE = 22 +_ROW_LABEL_TRACKING = 0.5 +_ROW_VALUE_SIZE = 27 + +# Import module +_IMPORT_TOP_GAP = 16 +_IMPORT_LABEL_SIZE = 21 +_IMPORT_LABEL_TRACKING = 3 +_IMPORT_LABEL_TO_COUPLE = 10 +_WORDMARK_SIZE = 27 +_LOGO_H = 196 + +_PARAMETER_FIELDS_COLOR: tuple[str, ...] = ( + "grain_roughness", + "grain_size", + "dynamic_range", + "d_range_priority", + "color_chrome_effect", + "color_chrome_fx_blue", + "highlight", + "shadow", + "color", + "sharpness", + "high_iso_nr", + "clarity", +) +_PARAMETER_FIELDS_BW: tuple[str, ...] = ( + "grain_roughness", + "grain_size", + "dynamic_range", + "d_range_priority", + "color_chrome_effect", + "color_chrome_fx_blue", + "monochromatic_color_warm_cool", + "monochromatic_color_magenta_green", + "highlight", + "shadow", + "sharpness", + "high_iso_nr", + "clarity", +) + + +def _display_value(value: str) -> str: + return value.replace("-", _MINUS) + + +@attrs.frozen +class ContactSheetDesign(base.CardDesign): + """ + A light "paper" spec-sheet card (1080x1920): a blurred photo frame behind a + paper panel that holds the header, hero photo, a two-column key/value list of + every parameter, and a hairline-separated import module with the logo + QR. + """ + + output_size: ClassVar[tuple[int, int]] = _SIZE + requires_background_image: ClassVar[bool] = True + + @property + def template_name(self) -> str: + return "contact_sheet" + + def render( + self, + *, + recipe: models.FujifilmRecipe, + background_image: models.Image | None, + ) -> rendering.RenderedCard: + canvas = self._build_background(background_image) + draw = ImageDraw.Draw(canvas) + + panel_x = _PANEL_INSET + panel_w = _SIZE[0] - _PANEL_INSET * 2 + content_x = panel_x + _PAD_L + content_w = panel_w - _PAD_L - _PAD_R + self._draw_panel(canvas) + + y = self._draw_header(canvas, draw, recipe, content_x, _PANEL_INSET + _PAD_T) + y += _HEADER_TO_HERO + if background_image is not None: + hero_h = content_w * 2 // 3 + with PILImage.open(background_image.filepath) as photo: + hero = rendering.cover_fill(photo.convert("RGB"), content_w, hero_h) + rendering.paste_rounded(canvas, hero, (content_x, y), _HERO_RADIUS) + y += hero_h + y += _HERO_TO_ROWS + self._draw_rows(draw, recipe, content_x, content_w, y) + + self._draw_import_module(canvas, draw, recipe, content_x, content_w) + + json_str = card_queries.get_recipe_as_json(recipe=recipe) + return rendering.RenderedCard( + canvas=canvas.convert("RGB"), + json_str=json_str, + embed_exif=background_image is None, + ) + + def _build_background(self, background_image: models.Image | None) -> PILImage.Image: + width, height = _SIZE + if background_image is None: + base_img = rendering.build_gradient(width, height).convert("RGBA") + else: + with PILImage.open(background_image.filepath) as img: + filled = rendering.cover_fill(img.convert("RGB"), width, height) + blurred = filled.filter(ImageFilter.GaussianBlur(_BG_BLUR)) + base_img = ImageEnhance.Brightness(blurred).enhance(_BG_BRIGHTNESS).convert("RGBA") + scrim = PILImage.new("RGBA", (width, height), _SCRIM) + base_img.alpha_composite(scrim) + return base_img + + def _draw_panel(self, canvas: PILImage.Image) -> None: + x0 = _PANEL_INSET + y0 = _PANEL_INSET + x1 = _SIZE[0] - _PANEL_INSET + y1 = _SIZE[1] - _PANEL_INSET + ImageDraw.Draw(canvas).rounded_rectangle( + [(x0, y0), (x1 - 1, y1 - 1)], radius=_PANEL_RADIUS, fill=(*_PAPER, 255) + ) + + def _draw_header( + self, + canvas: PILImage.Image, + draw: ImageDraw.ImageDraw, + recipe: models.FujifilmRecipe, + content_x: int, + top: int, + ) -> int: + eyebrow_font = rendering.load_space_mono(_EYEBROW_SIZE) + title_font = rendering.load_archivo(_TITLE_SIZE, weight=800) + block_h = rendering.line_height(eyebrow_font) + _EYEBROW_TO_TITLE + rendering.line_height(title_font) + + accent_y = top + (block_h - _ACCENT_H) // 2 + draw.rounded_rectangle( + [(content_x, accent_y), (content_x + _ACCENT_W, accent_y + _ACCENT_H)], + radius=_ACCENT_RADIUS, + fill=_RED, + ) + + text_x = content_x + _ACCENT_W + _ACCENT_GAP + rendering.draw_tracked_text( + draw, (text_x, top), self._eyebrow_text(recipe), + font=eyebrow_font, fill=_EYEBROW, tracking=_EYEBROW_TRACKING, + ) + title_y = top + rendering.line_height(eyebrow_font) + _EYEBROW_TO_TITLE + rendering.draw_tracked_text( + draw, (text_x, title_y), recipe.name or recipe.film_simulation, + font=title_font, fill=_INK, tracking=_TITLE_TRACKING, + ) + return top + block_h + + def _eyebrow_text(self, recipe: models.FujifilmRecipe) -> str: + parts = ["FILM RECIPE"] + if card_queries.is_monochromatic(recipe): + parts.append("B&W") + return " · ".join(parts).upper() + + def _rows(self, recipe: models.FujifilmRecipe) -> list[tuple[str, str]]: + sensors = card_queries.get_sensor_names(recipe) + red = _display_value(f"{recipe.white_balance_red:+d}") + blue = _display_value(f"{recipe.white_balance_blue:+d}") + rows: list[tuple[str, str]] = [ + ("Film Simulation", recipe.film_simulation), + ("Sensors", ", ".join(sensors) if sensors else "—"), + ("White Balance", recipe.white_balance), + ("WB Shift", f"R {red} · B {blue}"), + ] + fields = _PARAMETER_FIELDS_BW if card_queries.is_monochromatic(recipe) else _PARAMETER_FIELDS_COLOR + for line in card_queries.get_recipe_field_lines(recipe=recipe, fields=fields, label_style="long"): + rows.append((line.label, _display_value(line.value))) + return rows + + def _draw_rows( + self, + draw: ImageDraw.ImageDraw, + recipe: models.FujifilmRecipe, + content_x: int, + content_w: int, + top: int, + ) -> None: + rows = self._rows(recipe) + label_font = rendering.load_space_mono(_ROW_LABEL_SIZE) + value_font = rendering.load_archivo(_ROW_VALUE_SIZE, weight=700) + col_w = (content_w - _ROW_COL_GAP) // _ROW_COLS + row_h = _ROW_PAD_Y * 2 + rendering.line_height(value_font) + baseline_offset = _ROW_PAD_Y + value_font.getmetrics()[0] + + for index, (label, value) in enumerate(rows): + col = index % _ROW_COLS + grid_row = index // _ROW_COLS + cell_x = content_x + col * (col_w + _ROW_COL_GAP) + cell_y = top + grid_row * row_h + baseline = cell_y + baseline_offset + rendering.draw_tracked_text( + draw, (cell_x, baseline), label.upper(), + font=label_font, fill=_MUTED_LABEL, tracking=_ROW_LABEL_TRACKING, anchor="ls", + ) + draw.text((cell_x + col_w, baseline), value, font=value_font, fill=_INK, anchor="rs") + hairline_y = cell_y + row_h - 1 + draw.line([(cell_x, hairline_y), (cell_x + col_w, hairline_y)], fill=_HAIRLINE, width=1) + + def _draw_import_module( + self, + canvas: PILImage.Image, + draw: ImageDraw.ImageDraw, + recipe: models.FujifilmRecipe, + content_x: int, + content_w: int, + ) -> None: + label_font = rendering.load_space_mono(_IMPORT_LABEL_SIZE, bold=True) + wordmark_font = rendering.load_archivo(_WORDMARK_SIZE, weight=900) + qr = rendering.make_qr(card_queries.get_recipe_as_json(recipe=recipe)).convert("RGB") + with PILImage.open(rendering.STACKED_LOGO_PATH) as logo_src: + logo_rgba = logo_src.convert("RGBA") + logo_w = int(_LOGO_H * logo_rgba.width / logo_rgba.height) + logo = logo_rgba.resize((logo_w, _LOGO_H), PILImage.Resampling.LANCZOS) + + label = "IMPORT RECIPE WITH " + label_w = self._tracked_width(draw, label, label_font, _IMPORT_LABEL_TRACKING) + wordmark_w = self._tracked_width(draw, "filmcase", wordmark_font, 0) + label_h = max(rendering.line_height(label_font), rendering.line_height(wordmark_font)) + couple_w = logo_w + qr.width + couple_h = max(_LOGO_H, qr.height) + + module_h = label_h + _IMPORT_LABEL_TO_COUPLE + couple_h + content_bottom = _SIZE[1] - _PANEL_INSET - _PAD_B + top = content_bottom - module_h + + # Full-width hairline separating the module from the rows above. + draw.line( + [(content_x, top - _IMPORT_TOP_GAP), (content_x + content_w, top - _IMPORT_TOP_GAP)], + fill=_HAIRLINE, + width=1, + ) + + # Centered label row. + label_x = content_x + (content_w - (label_w + wordmark_w)) // 2 + end_x = rendering.draw_tracked_text( + draw, (label_x, top), label, font=label_font, fill=_MUTED_LABEL, tracking=_IMPORT_LABEL_TRACKING, + ) + rendering.draw_filmcase_wordmark(draw, (end_x, top), font=wordmark_font, film_color=_RED, case_color=_INK) + + # Logo + QR couple, centered, directly on the paper (no pill). + couple_x = content_x + (content_w - couple_w) // 2 + couple_y = top + label_h + _IMPORT_LABEL_TO_COUPLE + canvas.alpha_composite(logo, (couple_x, couple_y + (couple_h - _LOGO_H) // 2)) + canvas.paste(qr, (couple_x + logo_w, couple_y + (couple_h - qr.height) // 2)) + + def _tracked_width( + self, + draw: ImageDraw.ImageDraw, + text: str, + font: ImageFont.FreeTypeFont, + tracking: float, + ) -> int: + return int(sum(draw.textlength(char, font=font) + tracking for char in text)) diff --git a/src/domain/recipes/cards/rendering.py b/src/domain/recipes/cards/rendering.py index a933e96..40b4362 100644 --- a/src/domain/recipes/cards/rendering.py +++ b/src/domain/recipes/cards/rendering.py @@ -58,6 +58,14 @@ def load_space_mono(size: int, *, bold: bool = False) -> ImageFont.FreeTypeFont: return ImageFont.truetype(str(path), size) +def line_height(font: ImageFont.FreeTypeFont) -> int: + """ + Return the font's vertical line height in pixels (ascent + descent). + """ + ascent, descent = font.getmetrics() + return ascent + descent + + def draw_tracked_text( draw: ImageDraw.ImageDraw, xy: tuple[float, float], diff --git a/tests/integration/domain/recipes/cards/test_contact_sheet_design.py b/tests/integration/domain/recipes/cards/test_contact_sheet_design.py new file mode 100644 index 0000000..d061f71 --- /dev/null +++ b/tests/integration/domain/recipes/cards/test_contact_sheet_design.py @@ -0,0 +1,83 @@ +from pathlib import Path + +import pytest +from PIL import Image as PILImage + +from src.domain.recipes.cards import queries as card_queries +from src.domain.recipes.cards.designs import contact_sheet +from tests.factories import FujifilmRecipeFactory + + +def _photo(tmp_path: Path) -> object: + path = tmp_path / "photo.jpg" + PILImage.new("RGB", (900, 600), (120, 60, 40)).save(str(path), format="JPEG") + + class _Image: + filepath = str(path) + + return _Image() + + +class TestContactSheetDesignMetadata: + def test_template_name(self) -> None: + assert contact_sheet.ContactSheetDesign().template_name == "contact_sheet" + + def test_output_size_is_portrait(self) -> None: + assert contact_sheet.ContactSheetDesign().output_size == (1080, 1920) + + def test_requires_a_background_image(self) -> None: + assert contact_sheet.ContactSheetDesign().requires_background_image is True + + +@pytest.mark.django_db +class TestContactSheetDesignRender: + def test_renders_portrait_rgb_canvas(self, tmp_path: Path) -> None: + recipe = FujifilmRecipeFactory(film_simulation="Classic Chrome") + + rendered = contact_sheet.ContactSheetDesign().render(recipe=recipe, background_image=_photo(tmp_path)) + + assert rendered.canvas.size == (1080, 1920) + assert rendered.canvas.mode == "RGB" + + def test_qr_round_trips(self, tmp_path: Path) -> None: + recipe = FujifilmRecipeFactory(film_simulation="Velvia") + + rendered = contact_sheet.ContactSheetDesign().render(recipe=recipe, background_image=_photo(tmp_path)) + out = tmp_path / "card.jpg" + rendered.canvas.save(str(out), format="JPEG", quality=92) + + decoded = card_queries.get_qr_recipe_from_image(image_path=str(out)) + assert decoded.film_simulation == "Velvia" + + def test_rows_lead_with_the_shared_summary_fields(self, tmp_path: Path) -> None: + recipe = FujifilmRecipeFactory(film_simulation="Classic Chrome") + + rows = contact_sheet.ContactSheetDesign()._rows(recipe) + + assert [label for label, _ in rows[:4]] == [ + "Film Simulation", + "Sensors", + "White Balance", + "WB Shift", + ] + + def test_bw_rows_include_tone_fields_and_omit_color(self, tmp_path: Path) -> None: + from decimal import Decimal + recipe = FujifilmRecipeFactory( + film_simulation="Acros Yellow", + monochromatic_color_warm_cool=Decimal("0"), + monochromatic_color_magenta_green=Decimal("0"), + ) + + labels = [label for label, _ in contact_sheet.ContactSheetDesign()._rows(recipe)] + + assert "BW Warm/Cool" in labels + assert "Color" not in labels + + def test_falls_back_to_gradient_without_photo(self) -> None: + recipe = FujifilmRecipeFactory(film_simulation="Classic Chrome") + + rendered = contact_sheet.ContactSheetDesign().render(recipe=recipe, background_image=None) + + assert rendered.canvas.size == (1080, 1920) + assert rendered.embed_exif is True From 8245b911339f4e6ecffb9935fa53d6fae43081cc Mon Sep 17 00:00:00 2001 From: Gosku Date: Sat, 25 Jul 2026 17:53:42 +1000 Subject: [PATCH 07/15] Add design tabs to the recipe card modal Let users pick between the Classic, Aperture, and Contact Sheet designs via htmx tabs in the create-card modal. Each tab swaps in only that design's options (Classic keeps label style / background effect / info side; the photo-centric designs just describe themselves) and refreshes the live preview. The gradient background option is hidden for the photo-required designs, which auto-select an image. The preview/create views and the use cases now resolve the design from a single 'design' parameter via _resolve_design; a new RecipeCardDesignOptions view serves each tab's controls. Co-Authored-By: Claude Opus 4.8 --- src/interfaces/recipes/urls.py | 1 + src/interfaces/recipes/views.py | 73 +++++--- .../card_design_options/aperture.html | 8 + .../partials/card_design_options/classic.html | 64 +++++++ .../card_design_options/contact_sheet.html | 7 + .../recipes/partials/recipe_card_modal.html | 170 +++++++++++------- .../recipes/partials/recipe_card_result.html | 2 +- .../test_create_recipe_card_view.py | 46 +++++ .../functional/test_recipe_card_modal_view.py | 15 ++ 9 files changed, 298 insertions(+), 88 deletions(-) create mode 100644 src/interfaces/templates/recipes/partials/card_design_options/aperture.html create mode 100644 src/interfaces/templates/recipes/partials/card_design_options/classic.html create mode 100644 src/interfaces/templates/recipes/partials/card_design_options/contact_sheet.html diff --git a/src/interfaces/recipes/urls.py b/src/interfaces/recipes/urls.py index 1132504..36616a2 100644 --- a/src/interfaces/recipes/urls.py +++ b/src/interfaces/recipes/urls.py @@ -23,6 +23,7 @@ path("recipes//set-name/", views.SetRecipeName.as_view(), name="set-recipe-name"), path("recipes//set-cover-image//", views.SetRecipeCoverImage.as_view(), name="set-recipe-cover-image"), path("recipes//card/partial/modal/", views.RecipeCardModal.as_view(), name="recipe-card-modal"), + path("recipes/card/partial/design-options/", views.RecipeCardDesignOptions.as_view(), name="recipe-card-design-options"), path("recipes//card/partial/preview/", views.RecipeCardPreview.as_view(), name="recipe-card-preview"), path("recipes//card/preview/file/", views.RecipeCardPreviewFile.as_view(), name="recipe-card-preview-file"), path("recipes//card/partial/create/", views.CreateRecipeCard.as_view(), name="create-recipe-card"), diff --git a/src/interfaces/recipes/views.py b/src/interfaces/recipes/views.py index 0c113a2..57ef1a3 100644 --- a/src/interfaces/recipes/views.py +++ b/src/interfaces/recipes/views.py @@ -35,8 +35,10 @@ from src.domain.recipes import graph as recipe_graph from src.domain.recipes import operations as recipe_operations from src.domain.recipes import queries as recipe_queries +from src.domain.recipes.cards.designs import aperture as aperture_design from src.domain.recipes.cards.designs import base as card_designs from src.domain.recipes.cards.designs import classic as classic_design +from src.domain.recipes.cards.designs import contact_sheet as contact_sheet_design def _recipe_explorer_filters_from_request(request: http.HttpRequest) -> dict[str, list[str]]: @@ -727,19 +729,27 @@ def _serialize_field(f: recipe_queries.FieldValue) -> dict[str, str | None]: }) -def _resolve_design( - *, - label_style: str, - bg_effect: str, - info_side: str, -) -> card_designs.CardDesign: +_CARD_DESIGN_NAMES: tuple[str, ...] = ("classic", "aperture", "contact_sheet") +_DEFAULT_CARD_DESIGN = "classic" + + +def _resolve_design(params: "http.QueryDict") -> card_designs.CardDesign: """ - Build the CardDesign for the classic card from the modal's option values. + Build the CardDesign selected in the modal from the request parameters. + + The ``design`` parameter chooses the design; the classic design also reads + its label-style / background-effect / info-side options. Unknown designs + fall back to the classic default. """ + design = params.get("design", _DEFAULT_CARD_DESIGN) + if design == "aperture": + return aperture_design.ApertureDesign() + if design == "contact_sheet": + return contact_sheet_design.ContactSheetDesign() return classic_design.ClassicDesign( - label_style="long" if label_style == "long" else "short", - background_effect="none" if bg_effect == "sharp" else "blur", - info_side="right" if info_side == "right" else "left", + label_style="long" if params.get("label_style", "long") == "long" else "short", + background_effect="none" if params.get("bg_effect", "blur") == "sharp" else "blur", + info_side="right" if params.get("info_side", "left") == "right" else "left", ) @@ -800,6 +810,30 @@ def get(self, request: http.HttpRequest, recipe_id: int) -> http.HttpResponse: ) +_CARD_DESIGN_OPTION_TEMPLATES: dict[str, str] = { + "classic": "recipes/partials/card_design_options/classic.html", + "aperture": "recipes/partials/card_design_options/aperture.html", + "contact_sheet": "recipes/partials/card_design_options/contact_sheet.html", +} + + +class RecipeCardDesignOptions(generic.View): + """ + Render the option controls for one card design (the htmx tab content). + + Each design shows only its own options: the classic design offers label + style, background effect, and info side; the photo-centric designs have no + extra knobs and just describe themselves. + """ + + def get(self, request: http.HttpRequest) -> http.HttpResponse: + design = request.GET.get("design", _DEFAULT_CARD_DESIGN) + template = _CARD_DESIGN_OPTION_TEMPLATES.get( + design, _CARD_DESIGN_OPTION_TEMPLATES[_DEFAULT_CARD_DESIGN] + ) + return shortcuts.render(request, template, {}) + + class RecipeCardPreview(generic.View): """ Generate and display a preview of a recipe card. @@ -808,11 +842,7 @@ class RecipeCardPreview(generic.View): def get(self, request: http.HttpRequest, recipe_id: int) -> http.HttpResponse: image_id_raw = request.GET.get("image_id") image_id = int(image_id_raw) if image_id_raw else None - design = _resolve_design( - label_style=request.GET.get("label_style", "long"), - bg_effect=request.GET.get("bg_effect", "blur"), - info_side=request.GET.get("info_side", "left"), - ) + design = _resolve_design(request.GET) try: preview_path = preview_recipe_card_uc.preview_recipe_card( recipe_id=recipe_id, @@ -833,6 +863,7 @@ def get(self, request: http.HttpRequest, recipe_id: int) -> http.HttpResponse: "preview_path": str(preview_path), "recipe_id": recipe_id, "image_id": image_id, + "design": request.GET.get("design", _DEFAULT_CARD_DESIGN), "label_style": request.GET.get("label_style", "long"), "bg_effect": request.GET.get("bg_effect", "blur"), "info_side": request.GET.get("info_side", "left"), @@ -850,11 +881,7 @@ class RecipeCardPreviewFile(generic.View): def get(self, request: http.HttpRequest, recipe_id: int) -> http.FileResponse: image_id_raw = request.GET.get("image_id") image_id = int(image_id_raw) if image_id_raw else None - design = _resolve_design( - label_style=request.GET.get("label_style", "long"), - bg_effect=request.GET.get("bg_effect", "blur"), - info_side=request.GET.get("info_side", "left"), - ) + design = _resolve_design(request.GET) try: preview_path = preview_recipe_card_uc.preview_recipe_card( recipe_id=recipe_id, @@ -885,11 +912,7 @@ def setup(self, request: http.HttpRequest, *args: object, **kwargs: object) -> N def post(self, request: http.HttpRequest, recipe_id: int) -> http.HttpResponse: image_id_raw = request.POST.get("image_id") image_id = int(image_id_raw) if image_id_raw else None - design = _resolve_design( - label_style=request.POST.get("label_style", "long"), - bg_effect=request.POST.get("bg_effect", "blur"), - info_side=request.POST.get("info_side", "left"), - ) + design = _resolve_design(request.POST) try: card = create_recipe_card_uc.create_recipe_card( recipe_id=recipe_id, diff --git a/src/interfaces/templates/recipes/partials/card_design_options/aperture.html b/src/interfaces/templates/recipes/partials/card_design_options/aperture.html new file mode 100644 index 0000000..9433faf --- /dev/null +++ b/src/interfaces/templates/recipes/partials/card_design_options/aperture.html @@ -0,0 +1,8 @@ +

+

Aperture

+

+ Dark, story-format (9:16) card with frosted-glass parameter tiles. Uses the + selected photo as a full-bleed blurred background with a hero image, so a + photo is required. +

+
diff --git a/src/interfaces/templates/recipes/partials/card_design_options/classic.html b/src/interfaces/templates/recipes/partials/card_design_options/classic.html new file mode 100644 index 0000000..57791c3 --- /dev/null +++ b/src/interfaces/templates/recipes/partials/card_design_options/classic.html @@ -0,0 +1,64 @@ +
+
+ +
+
+ + +
+
+ + +
+
+
+ +
+ +
+
+ + +
+
+ + +
+
+
+
+ +
+
+ +
+
+ + +
+
+ + +
+
+
+ +
diff --git a/src/interfaces/templates/recipes/partials/card_design_options/contact_sheet.html b/src/interfaces/templates/recipes/partials/card_design_options/contact_sheet.html new file mode 100644 index 0000000..e5e42bb --- /dev/null +++ b/src/interfaces/templates/recipes/partials/card_design_options/contact_sheet.html @@ -0,0 +1,7 @@ +
+

Contact Sheet

+

+ Light "paper" spec-sheet (9:16) listing every parameter in two columns, over + a blurred photo frame. Uses the selected photo, so a photo is required. +

+
diff --git a/src/interfaces/templates/recipes/partials/recipe_card_modal.html b/src/interfaces/templates/recipes/partials/recipe_card_modal.html index f9217d5..a6a2604 100644 --- a/src/interfaces/templates/recipes/partials/recipe_card_modal.html +++ b/src/interfaces/templates/recipes/partials/recipe_card_modal.html @@ -245,6 +245,50 @@ color: #bbb; font-size: 0.85rem; } + + .card-design-tabs { + display: flex; + gap: 0.5rem; + margin-bottom: 1.5rem; + } + + .card-design-tab { + flex: 1; + padding: 0.6rem 0.75rem; + border: 2px solid #e0e0e0; + border-radius: 8px; + background: #fff; + color: #555; + font-size: 0.85rem; + font-weight: 600; + cursor: pointer; + transition: border-color 0.15s, background 0.15s, color 0.15s; + } + + .card-design-tab:hover { border-color: #ccc; } + + .card-design-tab.active { + border-color: var(--color-accent); + background: var(--color-accent-light); + color: var(--color-accent); + } + + .card-design-note { + padding: 0.25rem 0 1rem; + } + + .card-design-note-title { + font-size: 0.9rem; + font-weight: 700; + color: #222; + margin-bottom: 0.35rem; + } + + .card-design-note-text { + font-size: 0.8rem; + line-height: 1.5; + color: #777; + }
@@ -259,7 +303,7 @@ {% if images %}