diff --git a/.env.example b/.env.example index 4c7cbfc..b023ab9 100644 --- a/.env.example +++ b/.env.example @@ -8,7 +8,11 @@ GEMINI_TEXT_MODEL=gemini-2.5-flash-lite IMAGE_PROVIDER=openai OPENAI_API_KEY=your_openai_api_key_here OPENAI_IMAGE_MODEL=gpt-image-1 +# Bouquet preview (generating flow) OPENAI_IMAGE_SIZE=1024x1024 +# Flower catalog batch (scripts/generate-flower-catalog.js) — portrait cards +OPENAI_IMAGE_CATALOG_SIZE=1024x1536 +OPENAI_IMAGE_CATALOG_QUALITY=low GEMINI_IMAGE_MODEL=gemini-3.1-flash-image # Kakao REST API (shop search for /map) @@ -25,3 +29,9 @@ SUPABASE_STORAGE_BUCKET=flower-bouquets # Dev seed button: shown only when `npm run dev` (production build hides it). # To mute during local dev, set DEV_SEED_MUTED = true in DevSeedButton.svelte. # Replace static/dev/bouquet-{s,m,l}.jpg with real photos for richer UI previews. + +# Flower catalog (result cards) — one-time batch, not per user request: +# npm run generate:flowers -- --dry-run +# npm run generate:flowers -- --missing-only +# npm run generate:flowers -- --ids 7,14 +# Output: static/flowers/{flowerDB.id}.png diff --git a/package.json b/package.json index ef37c50..52a6f4f 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,8 @@ "preview": "vite preview", "prepare": "svelte-kit sync || echo ''", "lint": "prettier --check . && eslint .", - "format": "prettier --write ." + "format": "prettier --write .", + "generate:flowers": "node scripts/generate-flower-catalog.js" }, "devDependencies": { "@eslint/compat": "^2.0.4", diff --git a/scripts/generate-flower-catalog.js b/scripts/generate-flower-catalog.js new file mode 100644 index 0000000..244f490 --- /dev/null +++ b/scripts/generate-flower-catalog.js @@ -0,0 +1,172 @@ +/** + * flowerDB 카탈로그 이미지 batch 생성 (1회 실행 → static/flowers/{id}.png) + * + * 사용: + * npm run generate:flowers -- --dry-run + * npm run generate:flowers -- --missing-only + * npm run generate:flowers -- --ids 7,14,18 + * npm run generate:flowers -- --force --ids 14 + */ + +import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs'; +import { dirname, join } from 'node:path'; +import { fileURLToPath } from 'node:url'; +import OpenAI from 'openai'; +import { flowerDB } from '../src/lib/server/flowerFlow/flowerDB.js'; +import { + buildFlowerCardPrompt, + getPromptNameForFlower +} from '../src/lib/flowerFlow/flowerCatalogPrompt.js'; + +const __dirname = dirname(fileURLToPath(import.meta.url)); +const ROOT = join(__dirname, '..'); +const OUT_DIR = join(ROOT, 'static', 'flowers'); + +/** @param {string} flag */ +function hasFlag(flag) { + return process.argv.includes(flag); +} + +/** @param {string} flag */ +function readFlagValue(flag) { + const index = process.argv.indexOf(flag); + if (index === -1) return null; + return process.argv[index + 1] ?? null; +} + +function loadEnvFile() { + const envPath = join(ROOT, '.env'); + if (!existsSync(envPath)) return; + + for (const line of readFileSync(envPath, 'utf8').split('\n')) { + const trimmed = line.trim(); + if (!trimmed || trimmed.startsWith('#')) continue; + + const separator = trimmed.indexOf('='); + if (separator === -1) continue; + + const key = trimmed.slice(0, separator).trim(); + const value = trimmed.slice(separator + 1).trim(); + // .env 값을 항상 우선 (터미널에 남은 옛 OPENAI_API_KEY 덮어씀) + if (key) { + process.env[key] = value; + } + } +} + +/** @param {string} value */ +function parseIdList(value) { + return value + .split(',') + .map((part) => Number(part.trim())) + .filter((id) => Number.isInteger(id) && id > 0); +} + +/** @param {number} ms */ +function wait(ms) { + return new Promise((resolve) => setTimeout(resolve, ms)); +} + +/** + * @param {string} prompt + * @returns {Promise} + */ +async function generateFlowerPng(prompt) { + const apiKey = process.env.OPENAI_API_KEY; + if (!apiKey) { + throw new Error('OPENAI_API_KEY is not configured (.env)'); + } + + const size = process.env.OPENAI_IMAGE_CATALOG_SIZE || '1024x1536'; + const quality = process.env.OPENAI_IMAGE_CATALOG_QUALITY || 'low'; + + const client = new OpenAI({ apiKey }); + const response = await client.images.generate({ + model: process.env.OPENAI_IMAGE_MODEL || 'gpt-image-1', + prompt, + size, + quality, + n: 1 + }); + + const image = response.data?.[0]; + if (image?.b64_json) { + return Buffer.from(image.b64_json, 'base64'); + } + + if (image?.url) { + const imageResponse = await fetch(image.url); + return Buffer.from(await imageResponse.arrayBuffer()); + } + + throw new Error('OpenAI image model did not return image data'); +} + +async function main() { + loadEnvFile(); + + const dryRun = hasFlag('--dry-run'); + const force = hasFlag('--force'); + const missingOnly = hasFlag('--missing-only'); + const delayMs = Number(readFlagValue('--delay') ?? 2000); + const idsArg = readFlagValue('--ids'); + + /** @type {typeof flowerDB} */ + let targets = [...flowerDB]; + + if (idsArg) { + const ids = new Set(parseIdList(idsArg)); + targets = targets.filter((flower) => ids.has(flower.id)); + } + + if (missingOnly) { + targets = targets.filter((flower) => !existsSync(join(OUT_DIR, `${flower.id}.png`))); + } + + if (targets.length === 0) { + console.log('생성할 꽃이 없습니다.'); + return; + } + + mkdirSync(OUT_DIR, { recursive: true }); + + const size = process.env.OPENAI_IMAGE_CATALOG_SIZE || '1024x1536'; + const quality = process.env.OPENAI_IMAGE_CATALOG_QUALITY || 'low'; + console.log(`대상: ${targets.length}종 · ${size} · quality=${quality}${dryRun ? ' (dry-run)' : ''}`); + + for (const flower of targets) { + const outPath = join(OUT_DIR, `${flower.id}.png`); + const promptName = getPromptNameForFlower(flower); + const prompt = buildFlowerCardPrompt(promptName); + + if (existsSync(outPath) && !force) { + console.log(`skip id=${flower.id} ${flower.name} (already exists)`); + continue; + } + + console.log(`\nid=${flower.id} ${flower.name}`); + console.log(`promptName: ${promptName}`); + console.log(`prompt: ${prompt}`); + + if (dryRun) continue; + + try { + const bytes = await generateFlowerPng(prompt); + writeFileSync(outPath, bytes); + console.log(`saved → static/flowers/${flower.id}.png`); + } catch (err) { + console.error(`failed id=${flower.id}:`, err instanceof Error ? err.message : err); + } + + if (delayMs > 0) { + await wait(delayMs); + } + } + + console.log('\n완료.'); +} + +main().catch((err) => { + console.error(err); + process.exit(1); +}); diff --git a/src/lib/flowerFlow/flowerCatalogPrompt.js b/src/lib/flowerFlow/flowerCatalogPrompt.js new file mode 100644 index 0000000..2fdd96f --- /dev/null +++ b/src/lib/flowerFlow/flowerCatalogPrompt.js @@ -0,0 +1,49 @@ +/** OpenAI flower card batch — 프롬프트 이름·템플릿 (flowerDB 레코드는 수정하지 않음) */ + +/** @type {Record} id → 프롬프트에 넣을 영문 꽃 이름 */ +export const PROMPT_NAME_OVERRIDES = { + 33: 'red spider lily', + 36: 'bird of paradise flower', + 40: 'wax flower', + 41: 'caspia statice', + 47: 'craspedia billy balls', + 49: "queen anne's lace", + 50: 'nigella love-in-a-mist', + 60: 'statice limonium', + 62: 'strawflower helichrysum', + 64: 'chinese lantern physalis', + 65: 'globe amaranth gomphrena', + 74: 'pussy willow branch', + 80: 'foxtail millet stem', + 83: 'silver grass miscanthus' +}; + +/** + * DB display name → 프롬프트용 이름 (괄호 앞, lowercase) + * @param {string} name + */ +export function normalizeFlowerPromptName(name) { + const primary = name.split('(')[0].trim(); + return primary.toLowerCase(); +} + +/** + * @param {{ id: number, name: string }} flower + */ +export function getPromptNameForFlower(flower) { + return PROMPT_NAME_OVERRIDES[flower.id] ?? normalizeFlowerPromptName(flower.name); +} + +/** + * @param {string} flowerName — getPromptNameForFlower 결과 + */ +export function buildFlowerCardPrompt(flowerName) { + return ( + `A single ${flowerName} flower stem, isolated object, transparent background, ` + + `realistic botanical style, front-facing, centered composition, ` + + `full stem visible from base to bloom, flower head in upper third of frame, ` + + `stem centered vertically, consistent catalog framing for all species, ` + + `no vase, no bouquet, no hand, no text, soft natural lighting, consistent scale, ` + + `PNG asset for UI card` + ); +} diff --git a/src/lib/flowerFlow/flowerImagePaths.js b/src/lib/flowerFlow/flowerImagePaths.js new file mode 100644 index 0000000..7d8d239 --- /dev/null +++ b/src/lib/flowerFlow/flowerImagePaths.js @@ -0,0 +1,13 @@ +/** flowerDB id → result 꽃 카드용 정적 이미지 경로 (런타임 AI 생성 없음) */ + +export const FLOWER_IMAGE_BASE = '/flowers'; +export const FLOWER_IMAGE_PLACEHOLDER = `${FLOWER_IMAGE_BASE}/placeholder.svg`; + +/** @param {number} id flowerDB id (1–93) */ +export function getFlowerImageSrc(id) { + if (!Number.isFinite(id) || id < 1) { + return FLOWER_IMAGE_PLACEHOLDER; + } + + return `${FLOWER_IMAGE_BASE}/${id}.png`; +} diff --git a/static/flowers/1.png b/static/flowers/1.png new file mode 100644 index 0000000..bcd38fd Binary files /dev/null and b/static/flowers/1.png differ diff --git a/static/flowers/10.png b/static/flowers/10.png new file mode 100644 index 0000000..b43a0d3 Binary files /dev/null and b/static/flowers/10.png differ diff --git a/static/flowers/11.png b/static/flowers/11.png new file mode 100644 index 0000000..d5eb15b Binary files /dev/null and b/static/flowers/11.png differ diff --git a/static/flowers/12.png b/static/flowers/12.png new file mode 100644 index 0000000..77c3802 Binary files /dev/null and b/static/flowers/12.png differ diff --git a/static/flowers/13.png b/static/flowers/13.png new file mode 100644 index 0000000..0c1d67e Binary files /dev/null and b/static/flowers/13.png differ diff --git a/static/flowers/14.png b/static/flowers/14.png new file mode 100644 index 0000000..2785fa7 Binary files /dev/null and b/static/flowers/14.png differ diff --git a/static/flowers/15.png b/static/flowers/15.png new file mode 100644 index 0000000..809d207 Binary files /dev/null and b/static/flowers/15.png differ diff --git a/static/flowers/16.png b/static/flowers/16.png new file mode 100644 index 0000000..a6e074a Binary files /dev/null and b/static/flowers/16.png differ diff --git a/static/flowers/17.png b/static/flowers/17.png new file mode 100644 index 0000000..b944013 Binary files /dev/null and b/static/flowers/17.png differ diff --git a/static/flowers/18.png b/static/flowers/18.png new file mode 100644 index 0000000..fabff9f Binary files /dev/null and b/static/flowers/18.png differ diff --git a/static/flowers/19.png b/static/flowers/19.png new file mode 100644 index 0000000..e0dada7 Binary files /dev/null and b/static/flowers/19.png differ diff --git a/static/flowers/2.png b/static/flowers/2.png new file mode 100644 index 0000000..26ad3ef Binary files /dev/null and b/static/flowers/2.png differ diff --git a/static/flowers/20.png b/static/flowers/20.png new file mode 100644 index 0000000..71211f4 Binary files /dev/null and b/static/flowers/20.png differ diff --git a/static/flowers/21.png b/static/flowers/21.png new file mode 100644 index 0000000..bd6bb2e Binary files /dev/null and b/static/flowers/21.png differ diff --git a/static/flowers/22.png b/static/flowers/22.png new file mode 100644 index 0000000..89ef5a2 Binary files /dev/null and b/static/flowers/22.png differ diff --git a/static/flowers/23.png b/static/flowers/23.png new file mode 100644 index 0000000..1d854df Binary files /dev/null and b/static/flowers/23.png differ diff --git a/static/flowers/24.png b/static/flowers/24.png new file mode 100644 index 0000000..98a2e11 Binary files /dev/null and b/static/flowers/24.png differ diff --git a/static/flowers/25.png b/static/flowers/25.png new file mode 100644 index 0000000..3f07b0c Binary files /dev/null and b/static/flowers/25.png differ diff --git a/static/flowers/26.png b/static/flowers/26.png new file mode 100644 index 0000000..7b9d2c6 Binary files /dev/null and b/static/flowers/26.png differ diff --git a/static/flowers/27.png b/static/flowers/27.png new file mode 100644 index 0000000..aa21051 Binary files /dev/null and b/static/flowers/27.png differ diff --git a/static/flowers/28.png b/static/flowers/28.png new file mode 100644 index 0000000..c37150c Binary files /dev/null and b/static/flowers/28.png differ diff --git a/static/flowers/29.png b/static/flowers/29.png new file mode 100644 index 0000000..78e4bb1 Binary files /dev/null and b/static/flowers/29.png differ diff --git a/static/flowers/3.png b/static/flowers/3.png new file mode 100644 index 0000000..c986d9c Binary files /dev/null and b/static/flowers/3.png differ diff --git a/static/flowers/30.png b/static/flowers/30.png new file mode 100644 index 0000000..d115f8b Binary files /dev/null and b/static/flowers/30.png differ diff --git a/static/flowers/31.png b/static/flowers/31.png new file mode 100644 index 0000000..cf0007b Binary files /dev/null and b/static/flowers/31.png differ diff --git a/static/flowers/32.png b/static/flowers/32.png new file mode 100644 index 0000000..577e843 Binary files /dev/null and b/static/flowers/32.png differ diff --git a/static/flowers/33.png b/static/flowers/33.png new file mode 100644 index 0000000..dfd1787 Binary files /dev/null and b/static/flowers/33.png differ diff --git a/static/flowers/34.png b/static/flowers/34.png new file mode 100644 index 0000000..4455a6f Binary files /dev/null and b/static/flowers/34.png differ diff --git a/static/flowers/35.png b/static/flowers/35.png new file mode 100644 index 0000000..a1e6bb8 Binary files /dev/null and b/static/flowers/35.png differ diff --git a/static/flowers/36.png b/static/flowers/36.png new file mode 100644 index 0000000..9df2e99 Binary files /dev/null and b/static/flowers/36.png differ diff --git a/static/flowers/37.png b/static/flowers/37.png new file mode 100644 index 0000000..73fc563 Binary files /dev/null and b/static/flowers/37.png differ diff --git a/static/flowers/38.png b/static/flowers/38.png new file mode 100644 index 0000000..b1a7443 Binary files /dev/null and b/static/flowers/38.png differ diff --git a/static/flowers/39.png b/static/flowers/39.png new file mode 100644 index 0000000..a9be8dd Binary files /dev/null and b/static/flowers/39.png differ diff --git a/static/flowers/4.png b/static/flowers/4.png new file mode 100644 index 0000000..916cb3c Binary files /dev/null and b/static/flowers/4.png differ diff --git a/static/flowers/40.png b/static/flowers/40.png new file mode 100644 index 0000000..aab4efb Binary files /dev/null and b/static/flowers/40.png differ diff --git a/static/flowers/41.png b/static/flowers/41.png new file mode 100644 index 0000000..0dc540a Binary files /dev/null and b/static/flowers/41.png differ diff --git a/static/flowers/42.png b/static/flowers/42.png new file mode 100644 index 0000000..3887abc Binary files /dev/null and b/static/flowers/42.png differ diff --git a/static/flowers/43.png b/static/flowers/43.png new file mode 100644 index 0000000..1326677 Binary files /dev/null and b/static/flowers/43.png differ diff --git a/static/flowers/44.png b/static/flowers/44.png new file mode 100644 index 0000000..54b8afb Binary files /dev/null and b/static/flowers/44.png differ diff --git a/static/flowers/45.png b/static/flowers/45.png new file mode 100644 index 0000000..e8f00e5 Binary files /dev/null and b/static/flowers/45.png differ diff --git a/static/flowers/46.png b/static/flowers/46.png new file mode 100644 index 0000000..9a1d0ee Binary files /dev/null and b/static/flowers/46.png differ diff --git a/static/flowers/47.png b/static/flowers/47.png new file mode 100644 index 0000000..3472019 Binary files /dev/null and b/static/flowers/47.png differ diff --git a/static/flowers/48.png b/static/flowers/48.png new file mode 100644 index 0000000..7cbbaef Binary files /dev/null and b/static/flowers/48.png differ diff --git a/static/flowers/49.png b/static/flowers/49.png new file mode 100644 index 0000000..310185f Binary files /dev/null and b/static/flowers/49.png differ diff --git a/static/flowers/5.png b/static/flowers/5.png new file mode 100644 index 0000000..f275587 Binary files /dev/null and b/static/flowers/5.png differ diff --git a/static/flowers/50.png b/static/flowers/50.png new file mode 100644 index 0000000..20c981f Binary files /dev/null and b/static/flowers/50.png differ diff --git a/static/flowers/51.png b/static/flowers/51.png new file mode 100644 index 0000000..33c024c Binary files /dev/null and b/static/flowers/51.png differ diff --git a/static/flowers/52.png b/static/flowers/52.png new file mode 100644 index 0000000..e0857c9 Binary files /dev/null and b/static/flowers/52.png differ diff --git a/static/flowers/53.png b/static/flowers/53.png new file mode 100644 index 0000000..0fb1a21 Binary files /dev/null and b/static/flowers/53.png differ diff --git a/static/flowers/54.png b/static/flowers/54.png new file mode 100644 index 0000000..675afd0 Binary files /dev/null and b/static/flowers/54.png differ diff --git a/static/flowers/55.png b/static/flowers/55.png new file mode 100644 index 0000000..18d3dda Binary files /dev/null and b/static/flowers/55.png differ diff --git a/static/flowers/56.png b/static/flowers/56.png new file mode 100644 index 0000000..80d9df4 Binary files /dev/null and b/static/flowers/56.png differ diff --git a/static/flowers/57.png b/static/flowers/57.png new file mode 100644 index 0000000..4e54f39 Binary files /dev/null and b/static/flowers/57.png differ diff --git a/static/flowers/58.png b/static/flowers/58.png new file mode 100644 index 0000000..af7d4ac Binary files /dev/null and b/static/flowers/58.png differ diff --git a/static/flowers/59.png b/static/flowers/59.png new file mode 100644 index 0000000..5382997 Binary files /dev/null and b/static/flowers/59.png differ diff --git a/static/flowers/6.png b/static/flowers/6.png new file mode 100644 index 0000000..8fe8d1a Binary files /dev/null and b/static/flowers/6.png differ diff --git a/static/flowers/60.png b/static/flowers/60.png new file mode 100644 index 0000000..50902ab Binary files /dev/null and b/static/flowers/60.png differ diff --git a/static/flowers/61.png b/static/flowers/61.png new file mode 100644 index 0000000..de11ad7 Binary files /dev/null and b/static/flowers/61.png differ diff --git a/static/flowers/62.png b/static/flowers/62.png new file mode 100644 index 0000000..62521ee Binary files /dev/null and b/static/flowers/62.png differ diff --git a/static/flowers/63.png b/static/flowers/63.png new file mode 100644 index 0000000..affead7 Binary files /dev/null and b/static/flowers/63.png differ diff --git a/static/flowers/64.png b/static/flowers/64.png new file mode 100644 index 0000000..885906f Binary files /dev/null and b/static/flowers/64.png differ diff --git a/static/flowers/65.png b/static/flowers/65.png new file mode 100644 index 0000000..4b623a8 Binary files /dev/null and b/static/flowers/65.png differ diff --git a/static/flowers/66.png b/static/flowers/66.png new file mode 100644 index 0000000..7b136eb Binary files /dev/null and b/static/flowers/66.png differ diff --git a/static/flowers/67.png b/static/flowers/67.png new file mode 100644 index 0000000..2d0b917 Binary files /dev/null and b/static/flowers/67.png differ diff --git a/static/flowers/68.png b/static/flowers/68.png new file mode 100644 index 0000000..36111f5 Binary files /dev/null and b/static/flowers/68.png differ diff --git a/static/flowers/69.png b/static/flowers/69.png new file mode 100644 index 0000000..64a4a5c Binary files /dev/null and b/static/flowers/69.png differ diff --git a/static/flowers/7.png b/static/flowers/7.png new file mode 100644 index 0000000..afd683f Binary files /dev/null and b/static/flowers/7.png differ diff --git a/static/flowers/70.png b/static/flowers/70.png new file mode 100644 index 0000000..b4f87fc Binary files /dev/null and b/static/flowers/70.png differ diff --git a/static/flowers/71.png b/static/flowers/71.png new file mode 100644 index 0000000..3982ac5 Binary files /dev/null and b/static/flowers/71.png differ diff --git a/static/flowers/72.png b/static/flowers/72.png new file mode 100644 index 0000000..ac803ab Binary files /dev/null and b/static/flowers/72.png differ diff --git a/static/flowers/73.png b/static/flowers/73.png new file mode 100644 index 0000000..c2682c4 Binary files /dev/null and b/static/flowers/73.png differ diff --git a/static/flowers/74.png b/static/flowers/74.png new file mode 100644 index 0000000..fcb6f20 Binary files /dev/null and b/static/flowers/74.png differ diff --git a/static/flowers/75.png b/static/flowers/75.png new file mode 100644 index 0000000..d0ccf76 Binary files /dev/null and b/static/flowers/75.png differ diff --git a/static/flowers/76.png b/static/flowers/76.png new file mode 100644 index 0000000..f48a72a Binary files /dev/null and b/static/flowers/76.png differ diff --git a/static/flowers/77.png b/static/flowers/77.png new file mode 100644 index 0000000..6fefda4 Binary files /dev/null and b/static/flowers/77.png differ diff --git a/static/flowers/78.png b/static/flowers/78.png new file mode 100644 index 0000000..e1111c8 Binary files /dev/null and b/static/flowers/78.png differ diff --git a/static/flowers/79.png b/static/flowers/79.png new file mode 100644 index 0000000..4afbf65 Binary files /dev/null and b/static/flowers/79.png differ diff --git a/static/flowers/8.png b/static/flowers/8.png new file mode 100644 index 0000000..fba9f77 Binary files /dev/null and b/static/flowers/8.png differ diff --git a/static/flowers/80.png b/static/flowers/80.png new file mode 100644 index 0000000..a6d152e Binary files /dev/null and b/static/flowers/80.png differ diff --git a/static/flowers/81.png b/static/flowers/81.png new file mode 100644 index 0000000..894d981 Binary files /dev/null and b/static/flowers/81.png differ diff --git a/static/flowers/82.png b/static/flowers/82.png new file mode 100644 index 0000000..552dd3d Binary files /dev/null and b/static/flowers/82.png differ diff --git a/static/flowers/83.png b/static/flowers/83.png new file mode 100644 index 0000000..6db4bd7 Binary files /dev/null and b/static/flowers/83.png differ diff --git a/static/flowers/84.png b/static/flowers/84.png new file mode 100644 index 0000000..a6560c6 Binary files /dev/null and b/static/flowers/84.png differ diff --git a/static/flowers/85.png b/static/flowers/85.png new file mode 100644 index 0000000..b3352aa Binary files /dev/null and b/static/flowers/85.png differ diff --git a/static/flowers/86.png b/static/flowers/86.png new file mode 100644 index 0000000..5185f00 Binary files /dev/null and b/static/flowers/86.png differ diff --git a/static/flowers/87.png b/static/flowers/87.png new file mode 100644 index 0000000..36716d6 Binary files /dev/null and b/static/flowers/87.png differ diff --git a/static/flowers/88.png b/static/flowers/88.png new file mode 100644 index 0000000..31fb8bd Binary files /dev/null and b/static/flowers/88.png differ diff --git a/static/flowers/89.png b/static/flowers/89.png new file mode 100644 index 0000000..09d0189 Binary files /dev/null and b/static/flowers/89.png differ diff --git a/static/flowers/9.png b/static/flowers/9.png new file mode 100644 index 0000000..ef8caa4 Binary files /dev/null and b/static/flowers/9.png differ diff --git a/static/flowers/90.png b/static/flowers/90.png new file mode 100644 index 0000000..9b696a1 Binary files /dev/null and b/static/flowers/90.png differ diff --git a/static/flowers/91.png b/static/flowers/91.png new file mode 100644 index 0000000..249ab96 Binary files /dev/null and b/static/flowers/91.png differ diff --git a/static/flowers/92.png b/static/flowers/92.png new file mode 100644 index 0000000..23bce59 Binary files /dev/null and b/static/flowers/92.png differ diff --git a/static/flowers/93.png b/static/flowers/93.png new file mode 100644 index 0000000..425568c Binary files /dev/null and b/static/flowers/93.png differ diff --git a/static/flowers/placeholder.svg b/static/flowers/placeholder.svg new file mode 100644 index 0000000..dc80d50 --- /dev/null +++ b/static/flowers/placeholder.svg @@ -0,0 +1,7 @@ + + + + + + +