- לתאר את ארכיטקטורת ה-pipeline: רשימת SKU ב-CSV → תמונות-reference → template פר-קטגוריה → קריאת batch ל-API → תיקיית QA — ולהבין למה הסדר הזה קריטי לעקביות
- להפעיל batch אמיתי דרך fal.ai (async/queue) או Replicate (מבחר מודלים): 4-6 תמונות לקריאה ב-2K, עם קריאות אסינכרוניות (asynchronous — קריאות שלא חוסמות את התהליך ומחזירות תשובה כשמוכנות) שמעבדות עשרות SKU במקביל
- לשלוט בעלות: לבחור resolution לפי ערוץ (2K ברירת-מחדל ל-PDP — Product Detail Page, דף פרטי מוצר בחנות; 1K ל-thumbnails/social; 4K רק ל-hero) ולהוסיף שכבת cache (~60% hit-rate = ~60% חיסכון)
- להפיק חיתוכי ערוץ ממקור 2K אחד (1:1 marketplace, 4:5 Instagram, 9:16 stories) ולהריץ batch על מיני-קטלוג של 10 SKU מ-template אחד, ולבדוק עקביות בין כל המוצרים
- פרקים קודמים: פרק 1 (תפיסת קטלוג — ארבעת תפקידי-התמונה, 200 SKU x 5 תמונות), פרק 2 (בחירת מנוע — Nano Banana Pro/2, Seedream 4.5/5.0 Lite, GPT Image 2; מנוע אחד לחנות), פרק 3 (packshot נקי — reference, cutout, softbox, הגנת תווית), פרק 4 (multi-reference ~6 זוויות + template פר-קטגוריה + נעילת seed — חובה)
- מה תצטרכו: חשבון פעיל ב-fal.ai או Replicate (כרטיס אשראי תקף; תקציב התחלתי של $10-20 לבדיקות), מנוע AI שנבחר בפרק 2 (Nano Banana 2 / Seedream 5.0 Lite / Nano Banana Pro), template פר-קטגוריה מוכן מפרק 4, 10-15 references של מוצרים אמיתיים, גיליון Google Sheets או CSV פשוט לרשימת SKUs
- זמן משוער: 110-140 דקות קריאה, הרצת batch ראשון, והפקת מיני-קטלוג של 10 SKU
לאורך 6 פרקי הקורס, אתם בונים מיני-קטלוג חי של 10-15 מוצרים (SKU) — packshot לבן תקני + 2-3 זוויות עקביות + תמונת lifestyle אחת + חיתוכים לרשתות — שכולם נראים כמו צילום אחד, ולצידו שני נכסים לשימוש חוזר: template פר-קטגוריה ומסמך pipeline/QA/compliance.
איפה אתם עכשיו בפרויקט: בפרק 4 בניתם template פר-קטגוריה קפוא — נוסחה של תאורה+רקע+קומפוזיציה+אסתטיקה — ובדקתם אותו על 3-5 מוצרים ידנית. ה-template הזה הוא הקלט של הפרק הזה. אנחנו הופכים אותו מ-prompt-למוצר-אחד למנוע שמריץ 10, 50, 200 מוצרים באותה איכות ובאותה עקביות — בלי לכתוב prompt חדש 200 פעמים.
מה הלאה: בפרק 6 (QA + compliance + production) ניקח את תיקיית ה-QA מה-batch של פרק 5, נעביר כל תמונה בשער בדיקה (תוויות, צבע, scale, ריאליזם), נחליט keep / regenerate / hire-photographer לכל אחת, ונעטוף את הכל במטריצת compliance: Amazon (נאמנות + disclosure), Shopify (מותר ללא disclosure), EU AI Act (לא להסיר provenance — חתימת מקור דיגיטלית שמוכיחה שהתמונה נוצרה ב-AI). ה-batch של היום הוא הקלט; ה-QA + compliance של פרק 6 הם ה-output.
- מיני-קטלוג batch של 10 SKU: 10 מוצרים שונים, כל אחד עם packshot + 2 זוויות + lifestyle, כולם מ-template פר-קטגוריה אחד — שמורים ב-
05-batch/[קטגוריה]/[SKU]/עם שמות ברורים (packshot.png, angle-1.png, angle-2.png, lifestyle.png) - מסמך ארכיטקטורת pipeline: Google Doc תחת "05 — Batch Pipeline" עם 5 הסעיפים (CSV, references, template, batch call, QA folder), סקריפט מינימלי מותאם, והחלטות ה-resolution לפי ערוץ
- טבלת תקציב batch בשקלים: חישוב של עלות 200 SKU x 5 תמונות לפי resolution נבחר + cache layer, ב-$ וב-₪ (לפי שער ~3.7 ₪/$ נכון לאמצע 2026)
- סט חיתוכי ערוץ לכל SKU: תיקייה
05-batch/[קטגוריה]/[SKU]/crops/עם 1:1, 4:5, 9:16 — כולם ממקור 2K אחד, בלי להפיק מחדש - לוג batch אחד: קובץ
batch-log.mdשמתעד את הקריאה הראשונה: מודל, prompts שנשלחו, מספר תמונות שחזרו, זמן עיבוד, עלות בפועל, בעיות שעלו
- Batch (אצווה)
- הפקה של מספר תמונות בקריאה אחת. במקום 10 קריאות נפרדות (אחת לכל מוצר) — קריאה אחת שמחזירה 10 תמונות. חוסך זמן רשת, תור, ו-overhead.
- Pipeline (צינור עיבוד)
- רצף אוטומטי של צעדים: A → B → C → D. ב-pipeline שלנו: CSV → references → template → API → QA. כל צעד קלט של הבא. אם צעד אחד נשבר — כל ה-pipeline נעצר.
- API (Application Programming Interface)
- ממשק תכנות שמאפשר לכם לקרוא למודל AI בלי להיכנס לאתר. שולחים prompt + תמונות, מקבלים תמונות בחזרה. זה מה שהופך batch לאפשרי.
- CSV (Comma-Separated Values)
- קובץ טקסט פשוט שמכיל טבלה — שורה לכל מוצר, עמודות ל-SKU, שם, reference path, וכו'. אפשר לפתוח ב-Google Sheets ולייצא כ-CSV. זה הקלט של ה-pipeline.
- Async / queue (אסינכרוני / תור)
- קריאה שלא מחכה לתשובה. שולחים 50 קריאות, מקבלים request ID, ובודקים מאוחר יותר מה סיים. זה מה שמאפשר לעבד עשרות SKU במקביל במקום אחד-אחד.
- fal.ai
- פלטפורמת inference (הפעלת מודלים) שמריצה מודלי AI כשירות. יש להם queue נוח, תמחור פשוט, ותמיכה רחבה במודלים (Nano Banana Pro/2, Seedream 4.5/5.0 Lite, GPT Image 2, Flux).
- Replicate
- פלטפורמת inference מתחרה ל-fal. יש להם את המבחר הרחב ביותר של מודלים קהילתיים, אבל ה-UX שלהם פחות מלוטשת בעבודת batch ארוכה.
- Cache layer (שכבת מטמון)
- שכבה ששומרת תוצאות של קריאות חוזרות. במקום לשלם על כל תמונה — בודקים קודם אם התמונה הזו כבר הופקה. hit-rate (אחוז פגיעות במטמון) של 60% = חיסכון של 60% מהעלות.
- Aspect ratio (יחס גובה-רוחב)
- הפרופורציה של התמונה. 1:1 ריבוע (מרקטפלייס), 4:5 (Instagram feed), 9:16 (stories ו-reels), 16:9 (דסקטופ), 2.39:1 (cinematic). כל ערוץ מעדיף aspect ratio שונה.
- GA מול Preview (Generally Available מול Preview)
- מצבי זמינות של פיצ'רים ב-Vertex AI / Gemini API. GA = זמין, יציב, נתמך. Preview = ניסיוני, עלול להשתנות, לעיתים ללא SLA. לבנות pipeline על GA; לא לבנות על Preview.
- Catalog refresh (רענון קטלוג)
- הפקה-מחדש של תמונות ישנות באיכות נמוכה (צילום טלפון ישן, תאורה גרועה, רקע עמוס) לתמונות אחידות באותו template. חוסך צילום מחדש של מאות מוצרים.
מ-ידני ל-engine — למה batch הוא ה-differentiator
עד עכשיו עבדתם במצב שאני קורא לו "single-shot workflow" (זרימת עבודה חד-קריאתית): מוצר → reference → prompt → הרצה → בדיקה → תיקון → שמירה. עובד. איטי. ברגע שיש לכם 30+ מוצרים, המצב הזה נשבר: כל תמונה לוקחת 5-15 דקות, ו-30 מוצרים = 2.5-7.5 שעות של עבודה ידנית. ב-200 מוצרים זה כבר לא ריאלי בכלל.
ה-batch pipeline הוא לא רק "לעשות את אותו דבר מהר יותר". זה סוג אחר של עבודה. במקום 200 קריאות ידניות, יש לכם engine — מנוע חוזר שמריץ את אותו template על כל המוצרים, באותה איכות, באותה עקביות, בלי לשכוח prompt באמצע, בלי לטעות ב-seed, בלי לפספס resolution.
המעבר מידני ל-engine הוא ההבדל בין חנות שיכולה להפיק 30 מוצרים בשבוע לחנות שיכולה להפיק 200. ולא רק בכמות — בעקביות. ה-template הוא אותו template לכל ה-200; היד עלולה לרעוד בקריאה ה-87.
פתחו את הקטלוג שלכם. ספרו כמה מוצרים יש לכם בלי תמונה ראשית, או עם תמונה באיכות נמוכה. הכפילו את המספר ב-5 (packshot + 2 זוויות + lifestyle + 1 חיתוך). זה מספר התמונות שאתם צריכים. עכשיו העריכו: כמה תמונות אתם מפיקים בשבוע בעבודה ידנית? 5? 10? 15? חלקו: סך-הצורך חלקי סך-ההפקה = מספר שבועות. תוצאה צפויה: מספר שמטריד אתכם. ה-batch pipeline הוא הדרך לקצר אותו.
ארכיטקטורת ה-pipeline — הצינור שמחבר הכל
לפני שנוגעים בקוד, חשוב להבין את חמשת הצעדים של ה-pipeline ולמה הסדר שלהם קריטי. כל צעד הוא קלט של הבא; אם צעד אחד נשבר — כל השרשרת נשברת.
צעד 1 — CSV של SKUs
קובץ טבלה פשוט. שורה אחת לכל מוצר. עמודות מינימליות: sku (קוד ייחודי), name (שם המוצר), category (לאיזה template הוא שייך), reference_paths (רשימת 6 נתיבי תמונות reference, מופרדים ב-|), output_dir (לאן לשמור את התוצאה). אפשר גם עמודות של angles_count ו-lifestyle_background אם רוצים גמישות.
למה CSV ולא JSON או Excel? כי CSV הוא הפורמט שהכי קל לקרוא בכל שפה ובכל סביבה. אפשר לפתוח ב-Google Sheets, לייצא, לקרוא ב-Python, ב-Node, ב-Bash, ובכלי no-code. אם אתם מגיעים מ-Shopify, ה-CSV של המוצרים שלכם כבר קיים — אתם רק צריכים להוסיף לו עמודת reference_paths.
צעד 2 — תמונות reference לכל SKU
תיקייה עם references מסודרות: references/[SKU]/img-1.jpg עד img-6.jpg. 6 תמונות לכל מוצר, מאותן 6 זוויות שלמדנו בפרק 3-4. חשוב: אותו שמות-קבצים לכל SKU (img-1 עד img-6). זה מאפשר לסקריפט לטעון אוטומטית בלי לחשוב.
צעד 3 — template פר-קטגוריה (קפוא)
ה-template מפרק 4 — נוסחה של subject + angle + lighting + surface + composition + brand-aesthetic — נשמר בקובץ טקסט פשוט: templates/[category].txt. הסקריפט קורא את הקובץ, מחליף את ה-subject בשם המוצר מה-CSV, ושולח. ה-template הוא קבוע — לא נוגעים בו בכל batch. אם רוצים לשנות — פותחים template חדש ולא משנים את הקיים.
צעד 4 — קריאת batch ל-API
הלב של ה-pipeline. הסקריפט עובר על כל שורה ב-CSV, בונה prompt מה-template + subject + reference paths, שולח קריאה ל-API של המנוע (Nano Banana 2 / Seedream 5.0 Lite דרך fal או Replicate), ומקבל חזרה תמונות. לרוב 4-6 תמונות בקריאה אחת (המודלים המובילים תומכים ב-n parameter שמגדיר כמה תמונות להחזיר).
צעד 5 — תיקיית QA
התוצאות נשמרות ב-qa/[category]/[SKU]/ עם שמות ברורים. רק אחרי שעברו את ה-QA (פרק 6) הן עולות לחנות. תיקיית ה-QA היא ה-buffer (מאגר ביניים) בין הייצור לפרסום — והיא הסיבה שאפשר להריץ batch של 200 תמונות בלי לחשוש שמשהו פגום יעלה לחנות.
תרשים הזרימה
┌─────────────┐ ┌──────────────┐ ┌──────────────┐
│ CSV/ │───▶│ references/ │───▶│ templates/ │
│ Google │ │ [SKU]/ │ │ [category]. │
│ Sheets │ │ img-1..6.jpg │ │ txt │
└─────────────┘ └──────────────┘ └──────────────┘
│ │
│ ┌───────────────────────────┘
▼ ▼
┌─────────────────────────────────────────┐
│ SCRIPT (20-30 lines) │
│ for row in csv: │
│ prompt = template(row.subject) │
│ images = api(row.references, prompt)│
│ save(images, row.output_dir) │
└─────────────────────────────────────────┘
│
▼
┌───────────────────────┐
│ qa/[cat]/[SKU]/ │
│ packshot.png │
│ angle-1.png │
│ angle-2.png │
│ lifestyle.png │
└───────────────────────┘
│
▼ (פרק 6)
┌───────────────────────┐
│ חנות Shopify/Amazon │
└───────────────────────┘
פתחו Google Sheets חדש. תנו לו שם 05-batch-pipeline. צרו 5 עמודות: sku, name, category, reference_paths (כתבו references/[sku]/img-1.jpg|img-2.jpg|...|img-6.jpg), output_dir. מלאו 10 שורות של מוצרים אמיתיים מהחנות שלכם. הורידו כ-CSV דרך File → Download → Comma-separated values. שמרו ב-05-batch/catalog.csv. תוצאה צפויה: 10 שורות, כל אחת עם 6 references מתועדות. זה הקלט של ה-pipeline.
fal.ai מול Replicate — היכן כל אחד מנצח
יש שתי פלטפורמות-על (aggregators) שמריצות batch של מודלי תמונה בקלות: fal.ai ו-Replicate. שתיהן תומכות ב-Nano Banana Pro/2, Seedream 4.5/5.0 Lite, GPT Image 2, ועוד. ההבדל הוא לא במחיר (דומה) אלא ב-UX ובארכיטקטורה.
fal.ai — ה-queue/async king
fal.ai בנויה סביב queue (תור): שולחים 50 בקשות בבת-אחת, מקבלים 50 request_id, ואז בודקים את הסטטוס בלולאה. זה אידיאלי ל-batch גדול. ה-API שלהם מתועד היטב, יש להם pricing פשוט פר-תמונה (~$0.08 לתמונת 1K Nano Banana 2), ויש גם playground אינטראקטיבי לבדיקות. ההמלצה למתחילים: התחילו ב-fal. ה-UX ברור יותר, ה-error messages מועילים, והמסמכים טובים.
דוגמה לקריאת fal (פורמט JSON):
{
"model": "fal-ai/nano-banana-2",
"input": {
"prompt": "A serum bottle on a marble surface, softbox lighting, 5600K, e-commerce style. Product identical to the references.",
"image_urls": [
"https://mysite.com/refs/SKU-001/img-1.jpg",
"https://mysite.com/refs/SKU-001/img-2.jpg",
"https://mysite.com/refs/SKU-001/img-3.jpg",
"https://mysite.com/refs/SKU-001/img-4.jpg",
"https://mysite.com/refs/SKU-001/img-5.jpg",
"https://mysite.com/refs/SKU-001/img-6.jpg"
],
"num_images": 4,
"image_size": "square_hd",
"seed": 42
}
}
Replicate — המבחר הרחב
Replicate ידועה במבחר המודלים הקהילתיים הגדול ביותר — כל מודל שמישהו פרסם ב-HuggingFace, בערך, נמצא שם. זה יתרון אם אתם רוצים לנסות מודלים נישתיים (למשל מודל של תכשיטים ספציפית). החיסרון: ה-UX של ה-batch פחות מלוטשת, וה-pricing לפי שנייה-של-GPU במקום פר-תמונה — מה שאומר שאתם צריכים להבין כמה זמן המודל לוקח.
הכלל המעשי
ברירת מחדל: fal.ai ל-90% מהמקרים. אם אתם צריכים מודל קהילתי ספציפי שלא קיים ב-fal — עברו ל-Replicate לאותה עבודה. אל תערבבו באותו pipeline — מודל אחד, פלטפורמה אחת, כל הקטלוג.
מתי לעבור ל-API הרשמי של המודל
אם אתם מפיקים מעל 10,000 תמונות בחודש, ה-pricing של ה-API הרשמי (Gemini API ל-Nano Banana, OpenAI API ל-GPT Image) עלול להיות זול יותר. עד אז — fal/Replicate. המעבר הוא לא מסובך (אותם inputs, אותו output), אבל צריך להחליט מראש כי ה-billing וה-SLA שונים.
הירשמו ל-fal.ai (חינם, רק אימייל). הוסיפו כרטיס אשראי וטעינו $10 כ-credit. פתחו את ה-playground של fal-ai/nano-banana-2. העלו reference אחת של מוצר שלכם, כתבו prompt פשוט ("Same product on white background, softbox lighting"), הריצו. תוצאה צפויה: תמונה אחת תוך 3-8 שניות, וחיוב של ~$0.05-0.08 בחשבון. זה הצעד הראשון לפני batch.
קריאת batch אחת בפועל — 4-6 תמונות ב-2K
עכשיו לעבודה. קריאת batch אחת למודל נראית כך: קלט אחד (prompt + references) → פלט של 4-6 תמונות. לא 4-6 קריאות. קריאה אחת. המודל יודע לייצר מספר וריאנטים של אותו prompt בבת-אחת.
הפרמטרים הקריטיים
בכל קריאת batch יש 4 פרמטרים שמשפיעים על התוצאה, העלות, והזמן:
| פרמטר | מה הוא עושה | ברירת מחדל | השפעה |
|---|---|---|---|
num_images / n |
כמה תמונות להחזיר בקריאה | 1-4 | 4-6 sweet spot: מספיק וריאנטים לבחירה, לא יקר מדי |
image_size |
רזולוציה בפלט | 1K (1024px) | 2K (2048px) = ברירת-מחדל ל-PDP; 4K רק ל-hero |
seed |
מספר דטרמיניסטי (קובע את התוצאה) | None (רנדומלי) | seed קבוע = תוצאות דומות יותר בין הרצות; שונה = וריאציה |
num_inference_steps |
כמה צעדי דנויזינג (תהליך הפיכת רעש לתמונה) לעשות | 25-50 | יותר = איכות גבוהה יותר, זמן ארוך יותר, עלות גבוהה יותר |
למה 4-6 ולא 1, ולא 20?
1 תמונה לקריאה = 4-6 קריאות לאותו SKU = עלות גבוהה פי 4-6, זמן רב יותר, ו-overhead של רשת. בזבוז.
4-6 תמונות לקריאה = sweet spot. מספיק וריאציות כדי לבחור את הטובה ביותר ל-QA, עלות סבירה, זמן סביר. אתם תבחרו 1-2 מתוך ה-4-6, ותשמרו את השאר כגיבוי.
10-20 תמונות לקריאה = overkill. המודל מתחיל "לערבב" בין הוריאציות, האיכות יורדת, העלות עולה בלי תמורה. ב-20 תמונות אתם מקבלים בערך 4-6 שימושיות; שאר 14 הן רעש.
למה 2K ולא 1K, ולא 4K?
2K (2048px) = ברירת-מחדל ל-PDP. מספיק גדול לזום-אין (zoom-in) על תוויות, מספיק חד למרקטפלייס, מספיק קטן לא לשלם פרמיה. 90% מהחנויות צריכות 2K.
1K (1024px) = thumbnails, social, איפה שהתמונה תוצג ב-300-600px. זול יותר בערך 30-40%.
4K (4096px) = רק ל-hero shots — התמונה הראשית של המותג, banners, או קמפיינים. עולה בערך פי 2-3 מ-2K. בנו את ה-pipeline סביב 2K ורק את ה-hero — סביב 4K.
הזמן האמיתי
קריאת batch אחת (4-6 תמונות ב-2K) לוקחת 8-25 שניות ב-Nano Banana 2 / Seedream 5.0 Lite דרך fal, תלוי בעומס השרת. ב-Nano Banana Pro — 15-40 שניות. ב-GPT Image 2 — 20-50 שניות. הזמן הזה הוא לכל הקריאה, לא לכל תמונה. עם async, אתם שולחים 50 קריאות ב-30 שניות, והן חוזרות ב-3-8 דקות.
ב-fal playground, בחרו num_images=4, image_size=square_hd (= 2K), seed=42. העלו את 6 ה-references של אחד המוצרים שלכם. כתבו prompt מ-p ה-template הפר-קטגוריה שלכם. הריצו. תוצאה צפויה: 4 תמונות תוך 15-30 שניות, כולן של אותו מוצר באותו template. שימו לב: אם ה-prompt וה-seed זהים — התוצאות יהיו דומות מאוד (אותו רקע, אותה תאורה, אותה קומפוזיציה). אם ה-seed שונה — תקבלו וריאציות.
סקריפט מינימלי לבעל-חנות — בלי לכתוב קוד מאפס
אני יודע מה אתם חושבים: "אני לא מתכנת". גם אני לא הייתי, עד שהבנתי שאני לא צריך להיות. הסקריפט הזה הוא 20 שורות של Python שאפשר להעתיק-להדביק-לשנות. אין מבני-נתונים מסובכים, אין class hierarchy, אין dependency מוזר. רק: קרא CSV, לולאה, שלח ל-API, שמור.
# batch_pipeline.py — 20 שורות, מוכן להרצה
import csv, os, requests, time
API_KEY = os.environ.get("FAL_KEY") # מ-env variable
TEMPLATE = open("templates/serum.txt").read() # ה-template הפר-קטגוריה
with open("catalog.csv") as f:
for row in csv.DictReader(f):
prompt = TEMPLATE.replace("[SUBJECT]", row["name"])
refs = row["reference_paths"].split("|")
r = requests.post(
"https://fal.run/fal-ai/nano-banana-2",
headers={"Authorization": f"Key {API_KEY}"},
json={"input": {
"prompt": prompt,
"image_urls": refs,
"num_images": 4,
"image_size": "square_hd",
"seed": 42,
}},
)
result = r.json()
for i, img_url in enumerate(result["images"]):
out = f"qa/{row['category']}/{row['sku']}/angle-{i+1}.png"
os.makedirs(os.path.dirname(out), exist_ok=True)
with open(out, "wb") as fout:
fout.write(requests.get(img_url).content)
time.sleep(1) # rate limit — רוב הפלטפורמות 60 קריאות/דקה
print("done")
מה עושה הסקריפט הזה
שורה 1-3: imports — ספריות סטנדרטיות. csv לקרוא את ה-CSV, os לעבודה עם קבצים, requests לקריאות HTTP, time ל-rate limiting (הגבלת קצב — לא לשלוח יותר מדי קריאות בשנייה).
שורה 5-6: טעינת משתנים — API key מ-environment variable (לא לכתוב בקוד!), template מקובץ טקסט.
שורה 8-9: קריאת ה-CSV. csv.DictReader הופך כל שורה ל-dictionary עם שמות העמודות כמפתחות.
שורה 10-11: בניית ה-prompt — החלפת [SUBJECT] בשם המוצר מה-CSV. שאר ה-template נשאר קפוא.
שורה 12-19: שליחת הקריאה ל-fal. שימו לב למבנה: model ב-URL, input ב-body, num_images ו-image_size כפרמטרים.
שורה 20-25: שמירת התוצאות. כל תמונה נשמרת עם שם ברור (angle-1.png וכו') בתיקייה הנכונה.
שורה 26: time.sleep(1) — חשוב! רוב הפלטפורמות מגבילות ל-60 קריאות/דקה. בלי sleep — ה-API יחזיר 429 (Too Many Requests) ותצטרכו להתחיל מחדש.
איפה מריצים את זה
אפשרות 1 — מקומית. התקינו Python 3.10+, התקינו requests (pip install requests), שמרו את הקובץ, הריצו python batch_pipeline.py. עובד. דורש מחשב שלא נכבה.
אפשרות 2 — Google Colab. פתחו notebook חדש, הדביקו את הסקריפט, הריצו. חינם (עם מגבלות). טוב לבדיקות.
אפשרות 3 — Replit / GitHub Actions. עבור batch שלרוצים לרוץ על לוח-זמנים. קצת יותר מורכב, אבל אחרי שהסקריפט עובד מקומית — קל להעביר.
over-engineering — מלכודת בעלי-חנויות
הפיתוי הגדול: לבנות מערכת מורכבת. retry logic (לוגיקת ניסיון חוזר) עם exponential backoff (המתנה מתארכת בין ניסיונות), parallel processing (עיבוד מקבילי) עם asyncio, error handling (טיפול בשגיאות) מקיף, monitoring, dashboard, alerts. אל תעשו את זה. הסקריפט למעלה עובד. הוא מטפל ב-200 SKU ב-15-20 דקות. אם משהו נשבר — תראו את השגיאה בטרמינל ותריצו מחדש. ה-over-engineering הוא הבזבוז האמיתי.
צרו תיקייה חדשה 05-batch/. בתוכה: templates/serum.txt (ה-template שלכם), catalog-5.csv (5 שורות בלבד, מוצרים שיש לכם reference עבורם), ו-batch_pipeline.py (הסקריפט למעלה, מותאם). הגדירו FAL_KEY ב-environment variable שלכם. הריצו. תוצאה צפויה: בתוך 3-5 דקות, 5 תיקיות חדשות ב-qa/serum/[SKU]/, כל אחת עם 4 תמונות. זה ה-batch הראשון שלכם.
בקרת עלות — resolution לפי ערוץ
אחרי 3 תרגילים אתם כבר רואים שהתמונות עולות כסף. $0.08 לתמונת Nano Banana 2 ב-1K, $0.15 ב-4K. על 200 SKU x 5 תמונות, זה הופך מ-80$ ל-150$ רק בגלל הרזולוציה. ההחלטה על resolution היא ההחלטה התקציבית הכי גדולה שלכם — גדולה יותר מבחירת מנוע.
המטריצה: ערוץ → resolution → מחיר
| ערוץ | רזולוציה נדרשת | התאמה במודל | מחיר לתמונה (Nano Banana 2) |
|---|---|---|---|
| PDP ראשי (Shopify/Amazon) | 2048px+ | 2K (square_hd) | ~$0.067 |
| Thumbnails / search results | 512-800px | 1K (square) | ~$0.045 |
| Instagram feed | 1080x1350 | 1K + crop ל-4:5 | ~$0.045 + crop |
| Stories / Reels | 1080x1920 | 1K + crop ל-9:16 | ~$0.045 + crop |
| Hero shot / banner / campaign | 4096px+ | 4K (landscape_4k) | ~$0.151 |
| Email / newsletter | 600-800px | 1K | ~$0.045 |
העיקרון: אל תשלמו 4K על תמונה שתוצג ב-600px. זה כמו לקנות מכונית ספורט לנסיעה לסופר — יקר יותר, לא מועיל יותר. 2K ברירת-מחדל ל-PDP; 1K לכל השאר; 4K רק לבאנרים וקמפיינים.
המקרה המעשי: קטלוג שלם בתקציב
נניח חנות עם 200 SKU, רוצה לכל אחד packshot (2K), 2 זוויות (2K), lifestyle (2K), ו-3 חיתוכים (1K). זה 6 תמונות לכל SKU. הנה החישוב:
לכל SKU:
1 x packshot 2K = $0.067
2 x angles 2K = $0.134
1 x lifestyle 2K = $0.067
3 x crops 1K = $0.135
--------------------
total per SKU = $0.403
ל-200 SKU:
200 x $0.403 = $80.6
--------------------
+ cache 60% hit = $32.2 נטו
--------------------
= ~$32 (כ-120 ₪)
זאת העלות לכל הקטלוג. עם מצלם מקצועי, 200 מוצרים ב-$50 למוצר = $10,000. החיסכון הוא 99.7%. עם צלם פנים-ארצי ב-$10 למוצר = $2,000. עדיין חיסכון של 96%.
פתחו Google Sheets. צרו 4 עמודות: ערוץ, resolution, תמונות_לחודש, עלות_לחודש_$. מלאו בכל הערוצים שאתם משתמשים בהם — Shopify PDP, Amazon PDP, Instagram, Email, Banner. חשבו את העלות ב-$ לכל אחד. סכמו לעלות חודשית. תוצאה צפויה: מספר שמפתיע — רוב החנויות מגלות שהן משלמות על 4K שלא צריך. תקנו את ההקצאה לפי המטריצה למעלה.
שכבת cache — איך ~60% חיסכון נראה בפועל
הרעיון פשוט: לפני שליחת קריאה ל-API — בדוק אם כבר הפקת תמונה כזו. אם כן — החזר אותה מהמטמון (cache). אם לא — שלח קריאה ושמור במטמון. זה cache layer.
למה זה קריטי ל-batch
בקטלוג יש הרבה חזרתיות (redundancy):
- וריאנטים של אותו מוצר (חולצה ב-3 צבעים) — רקע ותאורה זהים, רק הצבע משתנה. אם תפיקו 3 קריאות עם prompt כמעט זהה, הרקע יישאר זהה. התמונה השנייה והשלישית — שמרו במטמון.
- חיתוכים מאותו מקור (1:1, 4:5, 9:16 מתמונת 2K) — זה אותו מקור בדיוק. החיתוך עצמו לא דורש קריאה חדשה, הוא רק crop.
- רענון עונתי (אותו מוצר, רקע חורף/קיץ) — רוב המוצר זהה, רק הסביבה משתנה.
- תמונות bundle (2-3 מוצרים בסצנה אחת) — המוצר הבודד כבר הופק, רק צריך להרכיב אותו עם אחרים.
המספרים האמיתיים
בקטלוג טיפוסי של 200 SKU עם 5 תמונות לכל אחד, החזרתיות היא ~50-70%. משמע: ~60% מהקריאות שאתם תשלחו בלי cache — כבר הופקו בעבר. אם תוסיפו cache layer עם hit-rate של 60% — אתם חוסכים 60% מהעלות. על $80 לקטלוג — זה $32 במקום $80. על 12 קטלוגים בשנה — זה $580 במקום $960. חיסכון של $580 — שווה עלות ה-setup.
איך מימשים cache layer
ה-cache הוא בעצם key-value store (אחסון של מפתח→ערך): מפתח הוא hash של ה-prompt+references+seed, הערך הוא URL התמונה (או התמונה עצמה). לפני קריאה — חשב hash, בדוק אם קיים. אם כן — החזר. אם לא — שלח ושמור.
# cache.py — 8 שורות של cache layer
import hashlib, json, os
CACHE_FILE = "cache/images.json"
def get_cached(prompt, refs, seed):
key = hashlib.md5(
json.dumps([prompt, refs, seed], sort_keys=True).encode()
).hexdigest()
if os.path.exists(CACHE_FILE):
cache = json.load(open(CACHE_FILE))
return cache.get(key)
return None
def save_to_cache(prompt, refs, seed, image_urls):
key = hashlib.md5(
json.dumps([prompt, refs, seed], sort_keys=True).encode()
).hexdigest()
cache = (json.load(open(CACHE_FILE)) if os.path.exists(CACHE_FILE) else {})
cache[key] = image_urls
json.dump(cache, open(CACHE_FILE, "w"))
זה cache "טיפש" — קובץ JSON אחד. עובד עד 10,000 תמונות. אחרי זה — תעברו ל-Redis (מסד נתונים in-memory) או ל-S3 (storage) + metadata DB. לרוב החנויות — קובץ JSON מספיק.
cache invalidation (מתי לרענן)
ה-cache תקף כל עוד הקלט זהה. אם שיניתם את ה-template — הקריאות החדשות הן hashes חדשים, לא מתנגשות עם הישנות. אם שיניתם את ה-reference image (צילמתם מחדש) — גם hash חדש. אין צורך "לרענן" cache — הוא מתעדכן אוטומטית כשהקלט משתנה.
קחו את הסקריפט שלכם מהסעיף הקודם. הוסיפו את הפונקציות get_cached ו-save_to_cache מלמעלה. לפני כל קריאה — בדקו cache. אחרי קריאה — שמרו. הריצו על אותו 5 SKUs פעמיים. תוצאה צפויה: ריצה ראשונה — 5 קריאות API, ~$0.20. ריצה שנייה — 0 קריאות API, $0. זה ה-cache בפעולה. עכשיו הריצו שוב עם SKU אחד שונה — תראו שרק 1 קריאה יוצאת.
תקצוב batch בשקלים — מ-token pricing לעלות אמיתית
המחירים של המודלים מופיעים באתרים בדולרים, אבל אתם חושבים בשקלים. ההמרה פשוטה, אבל יש כמה דקויות שכדאי להכיר לפני שבונים תקציב.
שער ההמרה — ומתי הוא משנה
באמצע 2026, שער הדולר לשקל הוא בערך 3.7 ₪/$. אבל זה לא המספר שצריך לתקצב לפיו. המספר שצריך לתקצב לפיו הוא שער הכרטיס שלכם + עמלת המרה + מע"מ. כרטיסי אשראי ישראלים גובים עמלת המרה של 1-3.5%, ומע"מ על שירותים דיגיטליים מחוץ לישראל הוא סיפור מורכב (חלק מהפלטפורמות מוסיפות מע"מ ישראלי, חלק לא). כלל אצבע מעשי: תקצבו לפי 4.0 ₪/$ — זה נותן לכם margin של 8% מעל ההמרה הבנקאית.
המחירון המעשי (ב-₪, לפי 4.0 ₪/$)
| מודל | 1K | 2K | 4K | מקור |
|---|---|---|---|---|
| Nano Banana 2 (Gemini 3.1 Flash Image) | ₪0.27 | ₪0.40 | ₪0.60 | fal.ai |
| Nano Banana Pro (Gemini 3 Pro Image) | ₪0.54 | ₪0.96 | ₪1.20+ | Gemini API |
| Seedream 5.0 Lite (ByteDance) | ₪0.10-0.14 | ₪0.18 | ₪0.30 | APIMart, Vercel, Atlas Cloud |
| Seedream 4.5 (ByteDance) | ₪0.12-0.16 | ₪0.20 | ₪0.35 | fal.ai |
| GPT Image 2 (OpenAI) | ₪0.21 | ₪0.80 | — | OpenAI API |
הטעות הנפוצה — לחשב ממספרי "per-image" בבלוגים
בלוגים רבים מפרסמים "Nano Banana Pro עולה $0.039 לתמונה". זה המחיר הנמוך ביותר (1K ריבוע, ללא multi-reference). בפועל, אתם עובדים עם 6 references, 2K, ו-multi-image — והמחיר עולה ל-$0.10-0.15 לתמונה. תקצבו לפי המחיר בתרחיש האמיתי שלכם, לא לפי המחיר המינימלי.
המקרה: קטלוג של 200 SKU בשקלים
חישוב מלא — מודל Nano Banana 2, mix של 2K ל-PDP ו-1K לחיתוכים, עם cache 60%:
לכל SKU (6 תמונות):
1 x packshot 2K = ₪0.40
2 x angles 2K = ₪0.80
1 x lifestyle 2K = ₪0.40
3 x crops 1K = ₪0.81
-------------------
total per SKU = ₪2.41
ל-200 SKU (ללא cache):
200 x ₪2.41 = ₪482
עם cache 60% hit:
40% x ₪482 = ₪193 נטו
-------------------
= ~₪193 (~$48)
₪193 לקטלוג שלם של 200 מוצרים. עם צלם ב-₪50/מוצר = ₪10,000. חיסכון של 98%.
תקציב חודשי מעשי
לחנות שמעלה 30 מוצרים חדשים בחודש, עם 6 תמונות לכל אחד, בלי cache (חנות חדשה, אין עדיין מה לשמור):
- 30 SKU x 6 תמונות = 180 תמונות/חודש
- ב-2K mix: ~₪72/חודש
- ב-4K לכל התמונות: ~₪180/חודש (לא מומלץ)
- ב-Nano Banana Pro (הכי יקר): ~₪170/חודש
- ב-Seedream 5.0 Lite (הכי זול): ~₪36/חודש
זה תקציב שמתאים לכל חנות, גם לחנות שרק מתחילה. בלי over-engineering, בלי enterprise plan, בלי מינוי חודשי — רק pay-per-image בפלטפורמה כמו fal.
בעלי חנויות רבים מתחילים batch על 200 SKU בלי לחשב את העלות מראש. באמצע ה-batch הם מגלים שהם ב-₪400 ולא ב-₪100. תיקון: תמיד להריץ 5 SKUs ראשונים, לחשב את העלות ל-SKU, להכפיל ב-200, להחליט אם זה בתקציב. אם לא — להחליף resolution / מודל / להוסיף cache לפני הריצה הגדולה.
פתחו גיליון חדש ב-Google Sheets. כותרות: פריט, כמות, רזולוציה, מחיר_לתמונה_₪, סה"כ_₪. מלאו: 200 SKU, 6 תמונות לכל SKU, mix של 2K ו-1K לפי המטריצה. חשבו את הסכום הגולמי, ואז החילו 40% (כי cache חוסך 60%). תוצאה צפויה: מספר ב-₪. תדעו עכשיו כמה עולה הקטלוג שלכם — לפני שאתם מתחייבים.
חיתוכי ערוץ — ממקור 2K אחד לכל הפלטפורמות
זה ה-trick שחוסך הכי הרבה זמן וכסף ב-pipeline. לא צריך להפיק תמונה נפרדת לכל ערוץ. מפיקים תמונה אחת ב-2K (ריבוע, עם קצת רווח מסביב למוצר) וממנה חותכים (crop) את כל ה-proportions שצריך.
ה-proportions העיקריים ב-e-commerce
| פלטפורמה | Aspect ratio | שימוש |
|---|---|---|
| Shopify / Amazon / eBay / Etsy | 1:1 (ריבוע) | תמונה ראשית ב-PDP, search results |
| Instagram feed | 4:5 (אנכי) | פוסטים, carousel |
| Instagram stories / Reels / TikTok | 9:16 (מאונך מלא) | סטוריז, סרטונים קצרים |
| Facebook feed | 4:5 (אנכי) | פוסטים |
| YouTube thumbnail | 16:9 (אופקי) | תמונה ממוזערת של סרטון |
| Banner / website hero | 16:9 או 21:9 | באנרים באתר |
למה לא להפיק כל אחד בנפרד?
כל הפקה נוספת = עלות נוספת. אם תפיקו 1:1 + 4:5 + 9:16 כל אחד בקריאה נפרדת למודל, תשלמו 3x. בנוסף — המודל לא תמיד מייצר את אותו מוצר בדיוק בכל ה-proportions (הוא רואה את ההוראה 4:5 ומשנה את הקומפוזיציה). החיתוך מתמונה אחת נותן לכם אותה תמונה בדיוק בכל ה-proportions.
איך עושים את החיתוך נכון
צעד 1 — תכננו את הקומפוזיציה לריבוע 2K. המוצר במרכז, רווח של 20-30% מסביב (כדי שיהיה מקום לחתוך בלי לאבד את המוצר).
צעד 2 — חתכו לכל aspect ratio. החיתוך צריך לשמור על המוצר במרכז ה-frame של ה-proportion החדש. עבור 4:5 — חיתוך מהאמצע, מעט יותר גובה. עבור 9:16 — חיתוך צר מהאמצע, הרבה יותר גובה. עבור 16:9 — חיתוך רחב, פחות גובה.
צעד 3 — שמרו בתיקייה נפרדת. crops/[SKU]/1x1.png, 4x5.png, 9x16.png. ה-pipeline הראשי מייצר את ה-2K; סקריפט חיתוך קטן (5 שורות) מייצר את השאר.
הסקריפט לחיתוך
# crop.py — 8 שורות, מקבל תיקיית qa/[cat]/[sku]/ ויוצר crops/
from PIL import Image
import os, glob
for source in glob.glob("qa/*/*/packshot.png"):
sku_dir = os.path.dirname(source)
img = Image.open(source)
w, h = img.size
out = f"{sku_dir}/crops"
os.makedirs(out, exist_ok=True)
# 1:1 — ריבוע מהאמצע
s = min(w, h)
img.crop(((w-s)//2, (h-s)//2, (w+s)//2, (h+s)//2)).save(f"{out}/1x1.png")
# 4:5 — חיתוך אנכי
target_w_4x5 = int(h * 4 / 5)
img.crop(((w-target_w_4x5)//2, 0, (w+target_w_4x5)//2, h)).save(f"{out}/4x5.png")
# 9:16 — חיתוך צר-ארוך
target_w_9x16 = int(h * 9 / 16)
img.crop(((w-target_w_9x16)//2, 0, (w+target_w_9x16)//2, h)).save(f"{out}/9x16.png")
מתי כן צריך להפיק מחדש ל-proportion
אם המוצר עצמו ארוך מאוד (שרשרת, מקל הליכה, רולר) — החיתוך 9:16 יקצר אותו. במקרה כזה, הפיקו גרסה 9:16 ייעודית עם prompt שמדגיש "vertical composition, full product visible top to bottom". עבור רוב המוצרים הסטנדרטיים — חיתוך מספיק.
קחו את ה-packshot.png מה-batch הראשון שלכם. התקינו Pillow (pip install pillow). הריצו את הסקריפט למעלה על SKU אחד. בדקו: (1) האם המוצר במרכז בכל crop? (2) האם הוא נראה טבעי (לא חתוך)? (3) האם ה-proportions נכונים (4:5, 9:16)? תוצאה צפויה: תיקייה crops/ עם 3 קבצים. זה הבסיס לפרסום בכל הפלטפורמות.
bundle / set shots — כמה SKU בסצנה אחת
לפעמים אתם רוצים תמונה אחת עם כמה מוצרים ביחד: ערכת מוצרים (קרם + טונר + סרום ביחד), סט רהיטים (ספה + שולחן + מנורה), או אוסף מוצרים ב-banner של החנות. זה bundle / set shot.
הטכניקה — multi-reference מורחבת
במקום 6 references של אותו מוצר — מזינים 6 references של 6 מוצרים שונים, וב-prompt מבקשים "all 6 products arranged on the marble surface, softbox lighting". המודל ישמור על כל אחד מהמוצרים בזהותו (עד 14 אובייקטים, לפי התיעוד של Nano Banana Pro/2) וירכיב אותם בסצנה אחת.
למה זה שימושי
- עמודי collection: "הקולקציה החורפית שלנו" — 6 מוצרים בתמונה אחת. הלקוח רואה את כל הסט, נכנס לחנות לראות כל אחד לעומק.
- banners: ה-banner הראשי של החנות — מוצר מוביל + 2-3 מוצרים משלימים. תמונה אחת מספרת סיפור.
- cross-sell: "קנית קרם? הנה הטונר והסרום שעובדים איתו יפה". תמונה אחת עם 3 מוצרים = upsell ויזואלי.
- קיטים וערכות: "ערכת טיפוח מלאה" — 5 מוצרים ביחד, במחיר ערכה. תמונה אחת = ה-look-and-feel של הערכה.
האתגר — עקביות בין המוצרים
ככל שיש יותר מוצרים בתמונה, כך קשה יותר למודל לשמור על כולם. ב-3 מוצרים — מצוין. ב-5 — טוב. ב-8+ — מתחיל לערבב, לשנות גוונים, "לאבד" מוצרים. המלצה: עד 5 מוצרים לכל bundle. אם צריך יותר — פצלו ל-2 תמונות.
prompt template ל-bundle
Subject: [PRODUCT-1], [PRODUCT-2], [PRODUCT-3], [PRODUCT-4]
Composition: arranged in a [composition style — flat lay, hero stack, side by side]
Surface: [surface — marble, oak, linen, white seamless]
Lighting: [lighting — softbox, three-point, golden hour]
Style: [brand aesthetic — minimalist, warm, editorial, e-commerce]
Arrangement: [arrangement notes — spaced, overlapping, pyramid, grid]
Negative: no fake reflections, no extra products not in references, no style drift between products
ה-batch flow ל-bundles
ב-CSV, צרו עמודה נוספת bundle_partner_skus (מופרד ב-|). אם השדה ריק — מוצר בודד. אם מלא — הסקריפט אוסף את כל ה-references של ה-SKUs המשותפים, מייצר prompt template, ושולח קריאה אחת.
בחרו 3 מוצרים מהחנות שלכם שהגיוני ביחד (למשל: קרם + טונר + סרום מאותו מותג). העלו 6 references של הראשון, 6 של השני, 6 של השלישי — סה"כ 18 תמונות. כתבו prompt שמבקש את 3 המוצרים מסודרים על אותו משטח. הריצו. תוצאה צפויה: 4 תמונות שבהן 3 המוצרים מופיעים ביחד, נראים כמו צילום אחד, וכל אחד מזוהה בנפרד. אם רק 2 מופיעים או אחד "נעלם" — חזרו עם prompt שמדגיש "all 3 products must be visible and identifiable".
catalog refresh — רענון קטלוג ישן בלי לצלם מחדש
לרוב החנויות יש קטלוג ישן — תמונות מ-2018-2022, צילום טלפון, תאורה לא-אחידה, רקעים עמוסים. צילום מחדש של 200 מוצרים = בלתי-אפשרי תקציבית. catalog refresh פותר את זה: לוקחים את התמונות הישנות, מעלים אותן כ-reference, ומבקשים מהמודל "same product, new background, studio lighting".
הזרימה
קלט: תמונה ישנה (אפילו באיכות בינונית) של המוצר על רקע לא-מקצועי. פלט: תמונה חדשה על רקע נקי, באותו template כמו שאר הקטלוג.
המודל מזהה את המוצר מה-reference (גם אם הוא באיכות בינונית) ומייצר אותו מחדש על רקע חדש. זה כמו "לקחת את המוצר מהעולם הישן ולשים אותו בעולם החדש".
ההבדל מ-multi-reference רגיל
ב-multi-reference רגיל (פרק 4) העלינו 6 זוויות נקיות. ב-catalog refresh, לפעמים יש רק 1-2 תמונות, והן באיכות בינונית. זה עובד, אבל פחות טוב. המודל מסתמך על מה שיש — ואם ה-reference מטושטשת או חשוכה, התוצאה תהיה פחות מדויקת. לכן catalog refresh עובד הכי טוב על מוצרים שה-reference שלהם מספיק ברורה — גם אם לא מושלמת.
תהליך העבודה
- מיינו את הקטלוג הישן. סמנו תמונות "לרענון" (רקע עמוס, תאורה גרועה, רזולוציה נמוכה) לעומת "להשאיר" (תמונות טובות שכבר קיימות).
- העלו ל-CSV. עמודה נוספת
old_image_pathעם הנתיב לתמונה הישנה. - prompt מותאם. "Same product as in the reference (old photo). New background: [white seamless / marble / oak]. Studio lighting, e-commerce style. Match the product exactly — same color, same label, same proportions."
- batch. אותו pipeline, רק עם reference אחת במקום 6, ו-prompt שמתייחס ל"reference photo".
- QA קפדני. catalog refresh הוא הסיכון הגבוה ביותר לפגמים — בדקו כל תמונה לעומק.
למה catalog refresh הוא חוסך-כסף אמיתי
צילום מחדש של 200 מוצרים = $2,000-10,000. Catalog refresh דרך batch = $80-150. חיסכון של 95-99%. וזה לא רק חיסכון — זה שיפור איכות. הקטלוג שלכם ייראה אחיד (אותו template), מקצועי (תאורת סטודיו), ועדכני (2026-style).
מצאו 3 תמונות ישנות בקטלוג שלכם (או חפשו ב-Google תמונות של מוצרים דומים). העלו כל אחת בנפרד לפלטפורמה. כתבו prompt: "Same product as in the reference. New background: white seamless. Studio softbox lighting, 5600K. E-commerce style. Match the product exactly." הריצו batch של 4 תמונות לכל אחד. תוצאה צפויה: 12 תמונות חדשות של מוצרים "ישנים" על רקע נקי. חלק מהצבעים או הפרטים עלולים להיות קצת שונים — זה הסיכון של catalog refresh. רק תוצרים שעוברים QA = להעלות.
מלכודת ה-cohesion — למה batch מתפזר בלי נעילה
המלכודת הגדולה ביותר ב-batch pipeline. אתם מריצים batch על 50 SKU מ-template אחד, ומקבלים 50 תמונות — אבל כל אחת נראית כמו צילום אחר. רקע שונה, תאורה שונה, סגנון שונה. כל העקביות מפרק 4 נמחקה.
למה זה קורה? כי בלי נעילה מספיק, המודל "מתפזר" — כל קריאה מקבלת הקשר קצת אחר, ומייצרת תוצאה קצת אחרת.
חמש דרגות הנעילה — מחלשה לחזקה
1. רק template זהה. כל ה-SKUs מקבלים את אותו template. חלש — זה הבסיס המינימלי.
2. + seed קבוע. אותו seed לכל הקריאות. חזק יותר — נועל את ה"רנדומיזציה" של המודל.
3. + 6 references זהות של רקע. לא רק references של המוצר — גם reference image אחת של הרקע (ה-moodboard, לוח השראה). חזק יותר — נועל את הרקע.
4. + prompt זהה מילה במילה. אסור לשנות שום מילה בין SKU ל-SKU, רק את subject. חזק יותר — נועל את הסגנון.
5. + אותו num_inference_steps ואותו image_size. אסור שונות בפרמטרים. חזק ביותר — נועל את ההפעלה עצמה.
המתכון המעשי ל-batch עקבי
אני ממליץ להשתמש בדרגה 3-4 לרוב המקרים. הנה הקוד שמבטיח זאת:
# בתוך הסקריפט, לפני כל קריאה:
SEED = 42 # אותו seed לכל ה-SKUs
BG_REFERENCE = "templates/bg-marble.jpg" # reference של הרקע
STEPS = 30 # אותו מספר steps
SIZE = "square_hd" # אותה רזולוציה
# ה-prompt בנוי כך שרק subject משתנה
prompt = f"""[TEMPLATE_FULL_TEXT]
Subject: {row['name']}
Preserve the background and lighting from the BG_REFERENCE exactly.
Same product as in the 6 references, not inspired by them."""
הסימן המעשי לכשל cohesion
אחרי הריצה, פתחו 3 תמונות רנדומליות מהקטלוג זו לצד זו. שאלו: "האם הן נראות כמו צילום של אותה חנות באותו בוקר?". אם התשובה "לא" — ה-cohesion נשבר. חזרו לבדוק: (1) האם ה-template זהה? (2) האם ה-seed זהה? (3) האם הרקע references זהות? אחת מהן כנראה לא נכונה.
בעל חנות מתחיל את ה-batch הראשון. רץ על 20 SKU. מקבל 80 תמונות. פותח אותן בעין — רואה שהן "כאילו" דומות, אבל לא ממש. חלק מהרקעים כהים יותר, חלק בהירים יותר, חלק עם זוויות אחרות. תיקון: תמיד seed קבוע. אם אתם רוצים וריאציות — השתנו את ה-prompt, לא את ה-seed. seed=42 לכל ה-SKUs של אותה קטגוריה. seed=43 לקטגוריה אחרת. seed=44 ל-lifestyle. הסדר הזה נותן לכם שליטה.
פתחו את 5 התיקיות מה-Do Now הקודם. העתיקו את ה-packshot.png מכל אחת לגיליון חדש ב-Google Slides (או PowerPoint) כך שכולן מוצגות ביחד. הסתכלו. שאלו: "האם זה נראה כמו 5 תמונות מאותו shoot?". תוצאה צפויה: אם כן — ה-cohesion שלכם טוב. אם לא — זהו את המוצר הבעייתי ובדקו: prompt שונה? seed שונה? references לא-אחידות? תקנו והריצו שוב רק עליו.
GA מול Preview — לא לבנות pipeline על חול
לפני שאתם בונים pipeline ל-200 SKU, חשוב להבין את מצבי הזמינות של הפיצ'רים בפלטפורמות. כל פיצ'ר חדש בעולם ה-AI מתחיל ב-Preview (ניסיוני) ועובר ל-GA (Generally Available — זמין ויציב). ההבדל קריטי.
מה ההבדל
Preview: זמין לשימוש, אבל: (1) עלול להשתנות בלי התראה; (2) עלול להיסגר; (3) ללא SLA (Service Level Agreement — התחייבות לזמינות ואיכות); (4) לפעמים רק לחלק מהמשתמשים. GA: זמין לכולם, יציב, נתמך, עם SLA.
המקרה הקלאסי — 4K ב-Vertex AI
ב-Vertex AI (הפלטפורמה של Google Cloud), רזולוציית 4K ל-Nano Banana Pro היא Preview נכון לאמצע 2026. זה אומר: היא עובדת, אבל אין לה תאריך GA רשמי. אם תבנו את כל ה-pipeline שלכם על 4K, ייתכן שבעוד חודש-חודשיים היא תיסגר או תשתנה. תיקון: תכננו על 2K (GA) והשתמשו ב-4K רק למקרים ספציפיים.
הרשימה המעשית (אמצע 2026)
| פיצ'ר | סטטוס | מומלץ לבנות עליו? |
|---|---|---|
| Nano Banana Pro 1K / 2K | GA | כן |
| Nano Banana Pro 4K (Vertex) | Preview | לא — רק למקרים ספציפיים |
| Nano Banana 2 1K / 2K / 4K (fal) | GA | כן |
| Seedream 4.5 / 5.0 Lite | GA | כן |
| GPT Image 2 (OpenAI) | GA (April 2026) | כן |
| video-file input (Nano Banana 2) | Preview | לא — מסוכן ל-pipeline |
הכלל: "GA לפני Preview"
אם פיצ'ר הוא Preview — אל תבנו עליו pipeline. תכננו שתוכלו לעבור בקלות לחלופה GA אם ה-Preview נסגר. זה לא אומר לא להשתמש — זה אומר לא לבנות תלות קריטית.
היכנסו לאתר של המודל שבחרתם (Gemini / fal / Replicate). חפשו "GA" או "Preview" ליד הרזולוציות שאתם מתכננים להשתמש בהן. אם הכל GA — סמנו V במסמך ה-pipeline שלכם. אם יש Preview — רשמו ליד "Preview — לא לבנות עליו את ה-pipeline". תוצאה צפויה: מסמך שמתעד בדיוק על מה ה-pipeline שלכם בנוי, ומאפשר לכם (או למישהו אחר) לזהות מהר חלקים שעלולים להשתנות.
תרגילים — 3 תוצרים שעוזבים אתכם עם הפרק
שלושת התרגילים האלה בונים את ה-batch pipeline הראשון שלכם end-to-end: CSV → references → template → batch API → תיקיית QA. כל תרגיל מייצר קובץ שישמש אתכם בפרק 6 ובקטלוג האמיתי.
המטרה: להריץ batch אמיתי על 10 מוצרים מקטגוריה אחת, ולבדוק עקביות בין כולם. זה ה-batch הראשון שלכם — והוא הבסיס לכל מה שיבוא אחר-כך.
צעד א — הכנת ה-CSV. צרו קובץ catalog-10.csv עם 10 שורות של מוצרים מאותה קטגוריה. עמודות: sku, name, category, reference_paths (6 נתיבים מופרדים ב-|), output_dir. אם אין לכם 10 מוצרים אמיתיים — חפשו באינטרנט 10 תמונות נקיות של מוצרים דומים (למשל: 10 סרומים שונים מאותו מותג).
צעד ב — הכנת references. לכל אחד מ-10 ה-SKUs, צרו תיקייה references/[SKU]/ עם 6 תמונות בזוויות הסטנדרטיות. אם חסרות — הורידו מ-Google Images, חתכו ל-1024x1024, שמרו בשמות img-1.jpg עד img-6.jpg.
צעד ג — העתקת הסקריפט. קחו את batch_pipeline.py מהסעיף הקודם. התאימו: שם הקובץ, שם ה-template, שורת ה-API. הריצו על 10 ה-SKUs.
צעד ד — בדיקת תוצאות. פתחו את 10 התיקיות ב-qa/. עברו על 4 התמונות של כל SKU. בדקו: (1) האם המוצר זהה ל-reference? (2) האם הרקע אחיד בין ה-SKUs? (3) האם התאורה אחידה? (4) האם יש outliers (חריגים — תמונה שנראית שונה מהשאר)?
תוצאה צפויה: 10 תיקיות, כל אחת עם 4 תמונות (= 40 תמונות). 36-38 מתוכן צפויות להיות טובות; 2-4 עלולות להיות outliers (צבע שונה, רקע שונה, מוצר מעוות). זה batch ראשון סביר. outlier-rate של 5-10% הוא נורמלי ל-batch ראשון.
המטרה: לתעד את ה-pipeline שבניתם בצורה שמישהו אחר (או אתם בעוד חודש) יוכל להריץ בלי לשאול שאלות. זה המסמך שיהפוך את ה-batch מ-experiment לכלי-עבודה.
צעד א — פתיחת Google Doc. תנו לו שם "05 — Batch Pipeline". צרו 7 כותרות: (1) ארכיטקטורה (2) CSV schema (3) References structure (4) Template per category (5) Batch call (6) Cache layer (7) QA handoff.
צעד ב — מילוי הסעיפים. תעתקו מהפרק: (1) תרשים הזרימה. (2) דוגמת CSV עם 3 שורות. (3) מבנה התיקיות. (4) ה-template שלכם במלואו. (5) דוגמת קריאת API. (6) הקוד של ה-cache. (7) רשימת הבדיקות ל-QA.
צעד ג — התאמת הסקריפט. קחו את הסקריפט הסטנדרטי. הוסיפו: (1) cache layer מהסעיף הקודם. (2) logging — שורה אחת לכל SKU שמתעדת זמן ועלות. (3) error handling — try/except סביב קריאת ה-API, ושמירה של SKUs שנכשלו לקובץ failed.csv. (4) cache key שמבוסס על hash של prompt+refs+seed, לא על URL.
תוצאה צפויה: מסמך שמישהו אחר (עובד, ספק, שותף) יכול לקרוא ולהריץ את ה-pipeline בלי לדעת מה אתם עשיתם. + סקריפט מותאם שעובד על הקטלוג שלכם.
המטרה: לבנות את הטבלה שמגדירה את התקציב החודשי שלכם ל-batch. בלי הטבלה הזאת — אתם עובדים בלי לדעת כמה זה עולה. איתה — יש לכם גבול ברור.
צעד א — פתיחת גיליון תקציב. צרו Google Sheets חדש בשם "05 — Batch Budget". עמודות: פריט, מודל, resolution, תמונות_לחודש, מחיר_לתמונה_$, מחיר_לתמונה_₪, סה"כ_חודשי_₪.
צעד ב — מילוי לפי הקטלוג שלכם. שורה אחת לכל שימוש: 30 PDP חדשים בחודש (2K mix, ~$0.067), 60 זוויות (2K, ~$0.067), 30 lifestyle (2K, ~$0.067), 90 crops (1K, ~$0.045), 4 hero shots (4K, ~$0.151), 20 bundle shots (2K, ~$0.10).
צעד ג — חישוב. לכל שורה — מחיר x כמות. סכום לעלות חודשית. המירו ל-₪ לפי 4.0 ₪/$. הוסיפו שורה "cache 60% hit" שמכפילה את הסכום ב-0.4. זה הסכום הנטו.
צעד ד — תרחיש ל-200 SKU. צרו טבלה נוספת: "200 SKU x 5 תמונות = 1,000 תמונות". חשבו לפי mix של 60% 2K + 40% 1K. עלות גולמית, עלות עם cache 60%, עלות נטו.
תוצאה צפויה: טבלה בת 2 חלקים — תקציב חודשי שוטף + תרחיש קטלוג מלא של 200 SKU. המספרים יפתיעו אתכם — כנראה לכיוון הזול. ₪150-300 לחודש עבור חנות פעילה, ~₪200-500 לרענון קטלוג שלם של 200 SKU. זו ההוצאה האמיתית של ה-pipeline.
טעויות נפוצות
ארבע טעויות שחוזרות על עצמן אצל כל מי שמתחיל batch pipeline. כולן ניתנות לתיקון — אם מזהים אותן מוקדם.
בעל חנות מתחיל batch, פותח ChatGPT, מבקש "כתוב לי מערכת batch מלאה עם retry, async, parallel, monitoring, dashboard". ה-AI כותב 300 שורות של קוד מורכב. בעל החנות מנסה להריץ — נתקל ב-12 שגיאות, מבלה 4 שעות על debugging (איתור באגים), ומתייאש. תיקון: הסקריפט של 20 שורות למעלה עובד. 200 SKU ב-15 דקות. אם משהו נשבר — תראו את השגיאה ותריצו מחדש. אל תבנו enterprise (ארגון מתוחכם) לחנות שלכם. ה-over-engineering הוא הבזבוז.
בעל חנות רואה ש-4K "נראה הכי טוב" ובוחר ב-4K לכל התמונות. על 200 SKU x 6 תמונות = 1,200 תמונות ב-4K, זה $180 במקום $80. זה פי 2.25. תיקון: 2K לכל ה-PDP. 1K לחיתוכים ול-thumbs. 4K רק ל-4-5 hero shots בחודש. רוב הלקוחות לא יראו את ההבדל בין 2K ל-4K על מסך של 13 אינץ'.
בעל חנות משנה את ה-prompt מעט בין SKU ל-SKU (מילה פה, מילה שם). המודל רואה שינויים קטנים, מגיב בתוצאות שונות. הקטלוג יוצא לא-עקבי. תיקון: template קפוא — מילה במילה — ורק subject משתנה. seed קבוע — אותו מספר לכל ה-SKUs באותה קטגוריה. אם אתם רוצים וריאציות — צרו template חדש עם seed חדש, אל תשנו תוך כדי batch.
בעל חנות עם 200 SKU, מתוכם 80 הם וריאנטים של אותו מוצר (חולצות ב-4 צבעים, מכנסיים ב-5 מידות), מריץ batch בלי cache. משלם $80 כשיכול היה לשלם $32. תיקון: תמיד להוסיף cache layer. גם אם זה 10 שורות קוד. חיסכון של 60% בעלות = חיסכון של $580 בשנה לחנות בינונית.
Work Routine — שגרת batch
batch pipeline הוא לא חד-פעמי. כל מוצר חדש, כל קטגוריה חדשה, כל רענון — דורש batch חדש. שגרה קבועה הופכת את זה מאירוע מלחיץ לתהליך צפוי.
יומי (15 דקות, בתחילת היום): בדקו את תיקיית qa/ בעבור תוצרים שחזרו מהריצה של אתמול. עברו על 3-4 תמונות במהירות (15 שניות לכל אחת) — outlier (חריג) או תקין? סמנו תקינים בירוק, חריגים באדום. חריגים → רשימה לריצה חוזרת.
שבועי (90 דקות, יום קבוע): (1) קחו את כל המוצרים החדשים שנכנסו לחנות בשבוע האחרון. (2) הוסיפו אותם ל-CSV. (3) ודאו references קיימות (או צלמו reference לכל אחד — 5 דקות כל אחד). (4) הריצו batch. (5) עברו על ה-QA folder. (6) העלו את התקינים לחנות. (7) תעדו את העלות בגיליון התקציב.
חודשי (3 שעות, ב-1 לחודש): (1) סקרו 20 תמונות רנדומליות מהקטלוג. האם הן עדיין תואמות את ה-template? (2) זהו תמונות "לרענון" — רקע עמוס, תאורה לא-אחידה, רזולוציה נמוכה. (3) הוסיפו ל-CSV עם refresh=true. (4) הריצו batch רענון. (5) בדקו את התקציב החודשי מול ביצוע בפועל. (6) בדקו אם ה-template עדיין רלוונטי, או שצריך לעדכן (מוצרים חדשים, צבעים חדשים, רקעים חדשים).
רבעוני (חצי יום, פעם ברבעון): (1) עברו על כל ה-templates לכל הקטגוריות. (2) זהו קטגוריות בהן ה-template ישן. (3) בדקו — יש מודלים חדשים? יש טרנדים חדשים בעיצוב? (4) שדרגו templates במידת הצורך (ושמרו את הישנים — לא מוחקים, רק מוסיפים). (5) ערכו audit מלא של הקטלוג.
מילון מונחי הפרק
- Batch (אצווה)
- הפקה של מספר תמונות בקריאה אחת. במקום N קריאות — קריאה אחת שמחזירה N תמונות.
- Pipeline (צינור עיבוד)
- רצף אוטומטי של צעדים — A → B → C → D. ב-pipeline שלנו: CSV → references → template → API → QA.
- API (Application Programming Interface)
- ממשק תכנות שמאפשר לקרוא למודל AI בלי להיכנס לאתר. שולחים prompt + תמונות, מקבלים תמונות.
- CSV
- קובץ טקסט פשוט שמכיל טבלה. שורה לכל מוצר, עמודות לפי הצורך. ניתן לפתיחה ב-Google Sheets.
- Async / queue
- קריאה שלא מחכה לתשובה. שולחים בקשה, מקבלים request_id, בודקים סטטוס אחר כך.
- fal.ai
- פלטפורמת inference (הפעלת מודלים) עם queue נוח, תמחור פשוט, ומבחר רחב.
- Replicate
- פלטפורמת inference עם המבחר הרחב ביותר של מודלים קהילתיים.
- Cache layer
- שכבה ששומרת תוצאות של קריאות חוזרות. hit-rate של 60% = חיסכון של 60% מהעלות.
- Hit-rate (אחוז פגיעות במטמון)
- אחוז הקריאות שנמצאו ב-cache ולא דרשו קריאה חדשה ל-API. hit-rate 60% = 60% חיסכון.
- Aspect ratio (יחס גובה-רוחב)
- פרופורציה של תמונה: 1:1, 4:5, 9:16, 16:9, וכו'. כל פלטפורמה מעדיפה aspect ratio שונה.
- GA מול Preview
- מצבי זמינות של פיצ'ר. GA = זמין ויציב. Preview = ניסיוני, עלול להשתנות.
- Catalog refresh
- הפקה-מחדש של תמונות ישנות באמצעות reference ישן. חוסך צילום מחדש.
- Bundle / set shot
- תמונה אחת עם מספר מוצרים ביחד. שימושי לעמודי collection, banners, וערכות.
- Outlier (חריג)
- תמונה ב-batch שנראית שונה מהשאר — צבע, רקע, תאורה. outlier-rate סביר ל-batch ראשון: 5-10%.
- Token-based pricing
- תמחור לפי tokens (יחידות טקסט/תמונה) שהמודל מעבד, לא לפי תמונה בודדת. דורש חישוב מקדים.
- Per-image pricing
- תמחור קבוע לכל תמונה, ללא קשר ל-tokens. קל יותר לתקצוב, נפוץ ב-fal וב-Replicate.
- rate limit (הגבלת קצב)
- מגבלת מספר הקריאות ל-API בפרק זמן נתון. רוב הפלטפורמות: 60 קריאות/דקה. צריך sleep בסקריפט.
- Batch pipeline הוא ה-engine, לא ה-prompt. המעבר מעבודה ידנית על מוצר-אחד לזרימה אוטומטית על מאות מוצרים הוא ההבדל בין חנות שיכולה להפיק 30 תמונות בשבוע לחנות שיכולה להפיק 200. זה לא prompt חדש — זה אותו template, בקנה-מידה אחר.
- ארכיטקטורת ה-pipeline: CSV → references → template → API → QA. חמשת הצעדים בסדר הזה, כל אחד קלט של הבא. אם צעד נשבר — כל השרשרת נעצרת. תתעדו את הזרימה ב-Google Doc לפני שאתם מריצים.
- fal.ai מנצחת ב-90% מהמקרים. queue/async נוח, UX ברור, תיעוד טוב, תמחור פשוט. Replicate רק אם צריך מודל קהילתי ספציפי שלא קיים ב-fal. אל תערבבו פלטפורמות באותו pipeline.
- 4-6 תמונות ב-2K הוא ה-sweet spot. מספיק וריאציות לבחירה, לא overkill. רזולוציה מתאימה ל-PDP, לא יקרה מדי. 4K רק ל-hero, 1K לחיתוכים.
- Cache layer חוסך ~60% מהעלות. 10 שורות קוד. בלי זה — אתם משלמים פעמיים על אותה תמונה. במיוחד קריטי בוריאנטים (צבע/מידה) ובחיתוכי ערוץ.
- תקצוב batch בשקלים: ₪150-300/חודש לחנות פעילה, ₪200-500 לרענון 200 SKU. בלי over-engineering, בלי enterprise plan, בלי מינוי חודשי. pay-per-image בפלטפורמה. המספרים האלה קטנים משמעותית מצלם.
- חיתוכי ערוץ ממקור 2K אחד. לא מפיקים מחדש 1:1, 4:5, 9:16 — חותכים מתמונת 2K אחת. אותה תמונה בדיוק, כל הפלטפורמות, עלות אפסית.
- נעילת cohesion: template קפוא + seed קבוע + bg reference + prompt זהה מילה במילה. ארבע דרגות נעילה. בלי זה — הקטלוג יוצא לא-עקבי, גם אם ה-template נכון.
אם תוציאו רק פעולה אחת מהפרק הזה השבוע — שתהיה זאת: בנו את ה-CSV של 10 ה-SKUs שלכם, הריצו batch אחד עליהם, ופתחו את כל 40 התמונות ב-Google Slides. לא תכנון. לא תיאוריה. רק 10 שורות ב-CSV, סקריפט של 20 שורות, והרצה אחת. הצצה ב-40 התמונות ביחד היא הרגע שבו אתם מבינים מה batch pipeline עושה — רואים בעיניים איך 10 מוצרים שונים יוצאים באותו עולם ויזואלי, איך ה-template "ננעל" על כולם, איך ה-outliers קופצים מיד. זה ההבדל בין לדעת "מה זה batch" לבין להרגיש את הכוח שלו. אחרי batch אחד — אתם כבר לא תחזרו לעבוד ידני. כי העתיד של קטלוג הוא לא 200 פעמים prompt חדש. העתיד הוא engine שעובד. תבנו את ה-engine שלכם.
- מהם 5 הצעדים של ארכיטקטורת ה-pipeline, ולמה הסדר שלהם קריטי? (רמז: CSV → references → template → API → QA. כל צעד הוא קלט של הבא; אם אחד נשבר — כולם נשברים.)
- מתי תבחרו fal.ai ומתי Replicate? מתי תעברו ל-API הרשמי של המודל? (רמז: fal ברירת-מחדל ל-90% מהמקרים. Replicate רק למודלים קהילתיים ספציפיים. API רשמי מעל 10,000 תמונות/חודש.)
- מדוע 4-6 תמונות לכל קריאת batch הוא ה-sweet spot, ולא 1, 10, או 20? (רמז: 1 = יקר ואיטי; 4-6 = מספיק וריאציות לבחירה, עלות סבירה; 10+ = המודל מתחיל "לערבב" וריאציות, האיכות יורדת.)
- איך cache layer חוסך כסף, ומה ה-hit-rate המעשי בקטלוג טיפוסי? (רמז: cache בודק אם התמונה כבר הופקה לפני שליחה. בקטלוג טיפוסי hit-rate של 50-70%, חיסכון ממוצע של 60%.)
- מהם 4 דרגות הנעילה ל-cohesion ב-batch, ולמה בלי נעילה הקטלוג מתפזר? (רמז: template קפוא + seed קבוע + bg reference + prompt זהה מילה במילה. בלי זה, המודל רואה הקשר קצת אחר בכל קריאה, ומייצר תוצאות שונות.)
בפרק 6 (QA + compliance + production — להעלות לחנות בלי לחטוף דגל) ניקח את תיקיית ה-QA מה-batch של פרק 5, נעביר כל תמונה בשער בדיקה (zoom על תוויות, התאמת צבע למוצר האמיתי, scale, השתקפויות), נחליט keep / regenerate / hire-photographer לכל אחת — ונעטוף את הכל במטריצת compliance: Amazon (נאמנות למוצר שנשלח, disclosure ל-AI מעבר למינורי), Shopify (תמונות AI מותרות, ללא disclosure), EU AI Act (לא להסיר SynthID/C2PA — חתימת מקור דיגיטלית). ה-batch של היום הוא הקלט; ה-QA + compliance של פרק 6 הם ה-output. בלי QA — אתם בסיכון של דגלי-פלטפורמה, החזרות, וחשיפה משפטית.
- אני יודע לתאר את ארכיטקטורת ה-pipeline (CSV → references → template → API → QA) ולהסביר למה הסדר קריטי
- יש לי חשבון פעיל ב-fal.ai (או Replicate) עם credit של $10-20 טעון
- בניתי CSV של 10 SKUs עם 5 עמודות: sku, name, category, reference_paths, output_dir
- יש לי references מסודרות ב-
references/[SKU]/img-1.jpgעדimg-6.jpgלכל אחד מ-10 ה-SKUs - העתקתי את הסקריפט
batch_pipeline.pyשל 20 שורות והתאמתי אותו לחשבון שלי - הרצתי batch ראשון על 5 SKUs וקיבלתי 20 תמונות בתיקיית
qa/ - הוספתי cache layer (8 שורות) לסקריפט, ואימתי שהריצה השנייה על אותם SKUs לא יוצרת קריאות API חדשות
- אני מבין את המטריצה ערוץ → resolution → מחיר, ותיקצבתי batch לפי 2K ב-PDP, 1K בחיתוכים, 4K רק ל-hero
- בניתי גיליון "05 — Batch Budget" עם תקציב חודשי ותרחיש 200 SKU בשקלים (₪)
- הוספתי סקריפט חיתוך (
crop.py) שיוצר 1:1, 4:5, 9:16 מתוך ה-2K packshot, ובדקתי על SKU אחד - אני יודע לזהות את 4 דרגות הנעילה ל-cohesion (template קפוא, seed קבוע, bg reference, prompt זהה מילה במילה) ולהחיל אותן בכל batch
- תיעדתי ב-Google Doc "05 — Batch Pipeline" את 7 הסעיפים (ארכיטקטורה, CSV schema, references structure, template, batch call, cache layer, QA handoff)
- בדקתי את סטטוס ה-GA/Preview של המודל והרזולוציות שאני מתכנן להשתמש בהן — אני לא בונה pipeline על פיצ'ר Preview
- יש לי work-routine ברורה: יומי (15 דקות QA), שבועי (90 דקות batch), חודשי (3 שעות catalog refresh), רבעוני (חצי יום audit)