5 שלב הבנייה

ה-Batch Pipeline — קטלוג חנות שלם דרך API

עד עכשיו עבדתם על מוצר אחד בכל פעם — צילום reference, הרצה, בדיקה, תיקון. זה עובד. אבל ברגע שהחנות שלכם עוברת את 30-50 מוצרים, העבודה הידנית הופכת לצוואר-בקבוק שחונק את הצמיחה. בפרק הזה תלמדו להפוך את כל מה שבנינו — multi-reference, template פר-קטגוריה, נעילת seed — לזרימה אוטומטית שמריצה עשרות מוצרים בבת-אחת: CSV של SKUs (Stock Keeping Units, יחידות מלאי ייחודיות — כל מוצר/וריאנט הוא SKU נפרד) → רשימת references → template קפוא → קריאת batch ל-API → תיקיית QA. ה-batch pipeline הוא לא prompt חדש — זה אותו template, אותם references, אותה נעילת seed, רק בקנה-מידה של חנות אמיתית. בסוף הפרק תריצו batch על מיני-קטלוג של 10 SKU מ-template אחד, ותראו איך 10 מוצרים שונים יוצאים באותו עולם ויזואלי — בלי לכתוב prompt חדש 10 פעמים.

מה תוכלו לעשות אחרי הפרק הזה
לפני שמתחילים
הפרויקט שלך

לאורך 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 קריאות נפרדות (אחת לכל מוצר) — קריאה אחת שמחזירה 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. חוסך צילום מחדש של מאות מוצרים.
בינוני 8 דקות batch differentiator

מ-ידני ל-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.

Do Now — 6 דקות (להבין את הצוואר-בקבוק שלכם)

פתחו את הקטלוג שלכם. ספרו כמה מוצרים יש לכם בלי תמונה ראשית, או עם תמונה באיכות נמוכה. הכפילו את המספר ב-5 (packshot + 2 זוויות + lifestyle + 1 חיתוך). זה מספר התמונות שאתם צריכים. עכשיו העריכו: כמה תמונות אתם מפיקים בשבוע בעבודה ידנית? 5? 10? 15? חלקו: סך-הצורך חלקי סך-ההפקה = מספר שבועות. תוצאה צפויה: מספר שמטריד אתכם. ה-batch pipeline הוא הדרך לקצר אותו.

מתחיל 10 דקות ארכיטקטורה 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  │
        └───────────────────────┘
Do Now — 12 דקות (בניית ה-CSV הראשון)

פתחו 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.

בינוני 8 דקות fal Replicate

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 שונים.

Do Now — 10 דקות (חשבון fal.ai ראשון)

הירשמו ל-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.

בינוני 10 דקות batch call async

קריאת 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 דקות.

Do Now — 8 דקות (קריאת batch ראשונה)

ב-fal playground, בחרו num_images=4, image_size=square_hd (= 2K), seed=42. העלו את 6 ה-references של אחד המוצרים שלכם. כתבו prompt מ-p ה-template הפר-קטגוריה שלכם. הריצו. תוצאה צפויה: 4 תמונות תוך 15-30 שניות, כולן של אותו מוצר באותו template. שימו לב: אם ה-prompt וה-seed זהים — התוצאות יהיו דומות מאוד (אותו רקע, אותה תאורה, אותה קומפוזיציה). אם ה-seed שונה — תקבלו וריאציות.

בינוני 15 דקות script no-code

סקריפט מינימלי לבעל-חנות — בלי לכתוב קוד מאפס

אני יודע מה אתם חושבים: "אני לא מתכנת". גם אני לא הייתי, עד שהבנתי שאני לא צריך להיות. הסקריפט הזה הוא 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 הוא הבזבוז האמיתי.

Do Now — 25 דקות (הרצת הסקריפט הראשון על 5 SKUs)

צרו תיקייה חדשה 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 הראשון שלכם.

מתחיל 8 דקות עלות resolution

בקרת עלות — 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%.

Do Now — 5 דקות (למלא את המטריצה שלכם)

פתחו Google Sheets. צרו 4 עמודות: ערוץ, resolution, תמונות_לחודש, עלות_לחודש_$. מלאו בכל הערוצים שאתם משתמשים בהם — Shopify PDP, Amazon PDP, Instagram, Email, Banner. חשבו את העלות ב-$ לכל אחד. סכמו לעלות חודשית. תוצאה צפויה: מספר שמפתיע — רוב החנויות מגלות שהן משלמות על 4K שלא צריך. תקנו את ההקצאה לפי המטריצה למעלה.

בינוני 7 דקות cache חיסכון

שכבת cache — איך ~60% חיסכון נראה בפועל

הרעיון פשוט: לפני שליחת קריאה ל-API — בדוק אם כבר הפקת תמונה כזו. אם כן — החזר אותה מהמטמון (cache). אם לא — שלח קריאה ושמור במטמון. זה cache layer.

למה זה קריטי ל-batch

בקטלוג יש הרבה חזרתיות (redundancy):

המספרים האמיתיים

בקטלוג טיפוסי של 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 — הוא מתעדכן אוטומטית כשהקלט משתנה.

Do Now — 15 דקות (cache layer מעשי)

קחו את הסקריפט שלכם מהסעיף הקודם. הוסיפו את הפונקציות get_cached ו-save_to_cache מלמעלה. לפני כל קריאה — בדקו cache. אחרי קריאה — שמרו. הריצו על אותו 5 SKUs פעמיים. תוצאה צפויה: ריצה ראשונה — 5 קריאות API, ~$0.20. ריצה שנייה — 0 קריאות API, $0. זה ה-cache בפעולה. עכשיו הריצו שוב עם SKU אחד שונה — תראו שרק 1 קריאה יוצאת.

מתחיל 8 דקות תקציב שקלים

תקצוב 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 (חנות חדשה, אין עדיין מה לשמור):

זה תקציב שמתאים לכל חנות, גם לחנות שרק מתחילה. בלי over-engineering, בלי enterprise plan, בלי מינוי חודשי — רק pay-per-image בפלטפורמה כמו fal.

טעות נפוצה: לבנות pipeline בלי לדעת כמה זה יעלה ב-end

בעלי חנויות רבים מתחילים batch על 200 SKU בלי לחשב את העלות מראש. באמצע ה-batch הם מגלים שהם ב-₪400 ולא ב-₪100. תיקון: תמיד להריץ 5 SKUs ראשונים, לחשב את העלות ל-SKU, להכפיל ב-200, להחליט אם זה בתקציב. אם לא — להחליף resolution / מודל / להוסיף cache לפני הריצה הגדולה.

Do Now — 10 דקות (לבנות תקציב batch בשקלים)

פתחו גיליון חדש ב-Google Sheets. כותרות: פריט, כמות, רזולוציה, מחיר_לתמונה_₪, סה"כ_₪. מלאו: 200 SKU, 6 תמונות לכל SKU, mix של 2K ו-1K לפי המטריצה. חשבו את הסכום הגולמי, ואז החילו 40% (כי cache חוסך 60%). תוצאה צפויה: מספר ב-₪. תדעו עכשיו כמה עולה הקטלוג שלכם — לפני שאתם מתחייבים.

מתחיל 7 דקות חיתוכים aspect ratio

חיתוכי ערוץ — ממקור 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". עבור רוב המוצרים הסטנדרטיים — חיתוך מספיק.

Do Now — 10 דקות (חיתוך crops ל-SKU אחד)

קחו את ה-packshot.png מה-batch הראשון שלכם. התקינו Pillow (pip install pillow). הריצו את הסקריפט למעלה על SKU אחד. בדקו: (1) האם המוצר במרכז בכל crop? (2) האם הוא נראה טבעי (לא חתוך)? (3) האם ה-proportions נכונים (4:5, 9:16)? תוצאה צפויה: תיקייה crops/ עם 3 קבצים. זה הבסיס לפרסום בכל הפלטפורמות.

בינוני 6 דקות bundle set shots

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) וירכיב אותם בסצנה אחת.

למה זה שימושי

האתגר — עקביות בין המוצרים

ככל שיש יותר מוצרים בתמונה, כך קשה יותר למודל לשמור על כולם. ב-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, ושולח קריאה אחת.

Do Now — 20 דקות (bundle ראשון של 3 מוצרים)

בחרו 3 מוצרים מהחנות שלכם שהגיוני ביחד (למשל: קרם + טונר + סרום מאותו מותג). העלו 6 references של הראשון, 6 של השני, 6 של השלישי — סה"כ 18 תמונות. כתבו prompt שמבקש את 3 המוצרים מסודרים על אותו משטח. הריצו. תוצאה צפויה: 4 תמונות שבהן 3 המוצרים מופיעים ביחד, נראים כמו צילום אחד, וכל אחד מזוהה בנפרד. אם רק 2 מופיעים או אחד "נעלם" — חזרו עם prompt שמדגיש "all 3 products must be visible and identifiable".

מתחיל 7 דקות catalog refresh רענון

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 שלהם מספיק ברורה — גם אם לא מושלמת.

תהליך העבודה

  1. מיינו את הקטלוג הישן. סמנו תמונות "לרענון" (רקע עמוס, תאורה גרועה, רזולוציה נמוכה) לעומת "להשאיר" (תמונות טובות שכבר קיימות).
  2. העלו ל-CSV. עמודה נוספת old_image_path עם הנתיב לתמונה הישנה.
  3. 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."
  4. batch. אותו pipeline, רק עם reference אחת במקום 6, ו-prompt שמתייחס ל"reference photo".
  5. QA קפדני. catalog refresh הוא הסיכון הגבוה ביותר לפגמים — בדקו כל תמונה לעומק.

למה catalog refresh הוא חוסך-כסף אמיתי

צילום מחדש של 200 מוצרים = $2,000-10,000. Catalog refresh דרך batch = $80-150. חיסכון של 95-99%. וזה לא רק חיסכון — זה שיפור איכות. הקטלוג שלכם ייראה אחיד (אותו template), מקצועי (תאורת סטודיו), ועדכני (2026-style).

Do Now — 12 דקות (catalog refresh ל-3 מוצרים)

מצאו 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 = להעלות.

בינוני 7 דקות cohesion נעילה

מלכודת ה-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 בלי לנעול את ה-seed

בעל חנות מתחיל את ה-batch הראשון. רץ על 20 SKU. מקבל 80 תמונות. פותח אותן בעין — רואה שהן "כאילו" דומות, אבל לא ממש. חלק מהרקעים כהים יותר, חלק בהירים יותר, חלק עם זוויות אחרות. תיקון: תמיד seed קבוע. אם אתם רוצים וריאציות — השתנו את ה-prompt, לא את ה-seed. seed=42 לכל ה-SKUs של אותה קטגוריה. seed=43 לקטגוריה אחרת. seed=44 ל-lifestyle. הסדר הזה נותן לכם שליטה.

Do Now — 10 דקות (בדיקת cohesion ב-batch הראשון שלכם)

פתחו את 5 התיקיות מה-Do Now הקודם. העתיקו את ה-packshot.png מכל אחת לגיליון חדש ב-Google Slides (או PowerPoint) כך שכולן מוצגות ביחד. הסתכלו. שאלו: "האם זה נראה כמו 5 תמונות מאותו shoot?". תוצאה צפויה: אם כן — ה-cohesion שלכם טוב. אם לא — זהו את המוצר הבעייתי ובדקו: prompt שונה? seed שונה? references לא-אחידות? תקנו והריצו שוב רק עליו.

בינוני 6 דקות GA Preview

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 נסגר. זה לא אומר לא להשתמש — זה אומר לא לבנות תלות קריטית.

Do Now — 5 דקות (בדיקת סטטוס המודל שלכם)

היכנסו לאתר של המודל שבחרתם (Gemini / fal / Replicate). חפשו "GA" או "Preview" ליד הרזולוציות שאתם מתכננים להשתמש בהן. אם הכל GA — סמנו V במסמך ה-pipeline שלכם. אם יש Preview — רשמו ליד "Preview — לא לבנות עליו את ה-pipeline". תוצאה צפויה: מסמך שמתעד בדיוק על מה ה-pipeline שלכם בנוי, ומאפשר לכם (או למישהו אחר) לזהות מהר חלקים שעלולים להשתנות.

תרגילים 3 תוצרים 180 דקות

תרגילים — 3 תוצרים שעוזבים אתכם עם הפרק

שלושת התרגילים האלה בונים את ה-batch pipeline הראשון שלכם end-to-end: CSV → references → template → batch API → תיקיית QA. כל תרגיל מייצר קובץ שישמש אתכם בפרק 6 ובקטלוג האמיתי.

תרגיל 1 — מיני-קטלוג של 10 SKU מ-batch (60 דקות)

המטרה: להריץ 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 ראשון.

תרגיל 2 — מסמך pipeline מלא + סקריפט מותאם (60 דקות)

המטרה: לתעד את ה-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 בלי לדעת מה אתם עשיתם. + סקריפט מותאם שעובד על הקטלוג שלכם.

תרגיל 3 — טבלת תקציב batch בשקלים + חישוב ל-200 SKU (60 דקות)

המטרה: לבנות את הטבלה שמגדירה את התקציב החודשי שלכם ל-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.

טעויות 4 טעויות

טעויות נפוצות

ארבע טעויות שחוזרות על עצמן אצל כל מי שמתחיל batch pipeline. כולן ניתנות לתיקון — אם מזהים אותן מוקדם.

טעות נפוצה: לחשוב שצריך לכתוב מערכת מורכבת

בעל חנות מתחיל batch, פותח ChatGPT, מבקש "כתוב לי מערכת batch מלאה עם retry, async, parallel, monitoring, dashboard". ה-AI כותב 300 שורות של קוד מורכב. בעל החנות מנסה להריץ — נתקל ב-12 שגיאות, מבלה 4 שעות על debugging (איתור באגים), ומתייאש. תיקון: הסקריפט של 20 שורות למעלה עובד. 200 SKU ב-15 דקות. אם משהו נשבר — תראו את השגיאה ותריצו מחדש. אל תבנו enterprise (ארגון מתוחכם) לחנות שלכם. ה-over-engineering הוא הבזבוז.

טעות נפוצה: לשלם 4K על כל הקטלוג

בעל חנות רואה ש-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 אינץ'.

טעות נפוצה: להריץ batch בלי לנעול את ה-template/seed

בעל חנות משנה את ה-prompt מעט בין SKU ל-SKU (מילה פה, מילה שם). המודל רואה שינויים קטנים, מגיב בתוצאות שונות. הקטלוג יוצא לא-עקבי. תיקון: template קפוא — מילה במילה — ורק subject משתנה. seed קבוע — אותו מספר לכל ה-SKUs באותה קטגוריה. אם אתם רוצים וריאציות — צרו template חדש עם seed חדש, אל תשנו תוך כדי batch.

טעות נפוצה: לדלג על שכבת cache בקטלוג עם הרבה חזרתיות

בעל חנות עם 200 SKU, מתוכם 80 הם וריאנטים של אותו מוצר (חולצות ב-4 צבעים, מכנסיים ב-5 מידות), מריץ batch בלי cache. משלם $80 כשיכול היה לשלם $32. תיקון: תמיד להוסיף cache layer. גם אם זה 10 שורות קוד. חיסכון של 60% בעלות = חיסכון של $580 בשנה לחנות בינונית.

שגרה work-routine

Work Routine — שגרת batch

batch pipeline הוא לא חד-פעמי. כל מוצר חדש, כל קטגוריה חדשה, כל רענון — דורש batch חדש. שגרה קבועה הופכת את זה מאירוע מלחיץ לתהליך צפוי.

Work Routine — שגרת 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 מלא של הקטלוג.

מילון glossary

מילון מונחי הפרק

מילון מונחים — batch pipeline
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 בסקריפט.
סיכום הפרק — 7 לקחים שייקחו אתכם הלאה
  1. Batch pipeline הוא ה-engine, לא ה-prompt. המעבר מעבודה ידנית על מוצר-אחד לזרימה אוטומטית על מאות מוצרים הוא ההבדל בין חנות שיכולה להפיק 30 תמונות בשבוע לחנות שיכולה להפיק 200. זה לא prompt חדש — זה אותו template, בקנה-מידה אחר.
  2. ארכיטקטורת ה-pipeline: CSV → references → template → API → QA. חמשת הצעדים בסדר הזה, כל אחד קלט של הבא. אם צעד נשבר — כל השרשרת נעצרת. תתעדו את הזרימה ב-Google Doc לפני שאתם מריצים.
  3. fal.ai מנצחת ב-90% מהמקרים. queue/async נוח, UX ברור, תיעוד טוב, תמחור פשוט. Replicate רק אם צריך מודל קהילתי ספציפי שלא קיים ב-fal. אל תערבבו פלטפורמות באותו pipeline.
  4. 4-6 תמונות ב-2K הוא ה-sweet spot. מספיק וריאציות לבחירה, לא overkill. רזולוציה מתאימה ל-PDP, לא יקרה מדי. 4K רק ל-hero, 1K לחיתוכים.
  5. Cache layer חוסך ~60% מהעלות. 10 שורות קוד. בלי זה — אתם משלמים פעמיים על אותה תמונה. במיוחד קריטי בוריאנטים (צבע/מידה) ובחיתוכי ערוץ.
  6. תקצוב batch בשקלים: ₪150-300/חודש לחנות פעילה, ₪200-500 לרענון 200 SKU. בלי over-engineering, בלי enterprise plan, בלי מינוי חודשי. pay-per-image בפלטפורמה. המספרים האלה קטנים משמעותית מצלם.
  7. חיתוכי ערוץ ממקור 2K אחד. לא מפיקים מחדש 1:1, 4:5, 9:16 — חותכים מתמונת 2K אחת. אותה תמונה בדיוק, כל הפלטפורמות, עלות אפסית.
  8. נעילת cohesion: template קפוא + seed קבוע + bg reference + prompt זהה מילה במילה. ארבע דרגות נעילה. בלי זה — הקטלוג יוצא לא-עקבי, גם אם ה-template נכון.
Just One Thing — אם תזכרו רק דבר אחד מהפרק הזה

אם תוציאו רק פעולה אחת מהפרק הזה השבוע — שתהיה זאת: בנו את ה-CSV של 10 ה-SKUs שלכם, הריצו batch אחד עליהם, ופתחו את כל 40 התמונות ב-Google Slides. לא תכנון. לא תיאוריה. רק 10 שורות ב-CSV, סקריפט של 20 שורות, והרצה אחת. הצצה ב-40 התמונות ביחד היא הרגע שבו אתם מבינים מה batch pipeline עושה — רואים בעיניים איך 10 מוצרים שונים יוצאים באותו עולם ויזואלי, איך ה-template "ננעל" על כולם, איך ה-outliers קופצים מיד. זה ההבדל בין לדעת "מה זה batch" לבין להרגיש את הכוח שלו. אחרי batch אחד — אתם כבר לא תחזרו לעבוד ידני. כי העתיד של קטלוג הוא לא 200 פעמים prompt חדש. העתיד הוא engine שעובד. תבנו את ה-engine שלכם.

Check Yourself — 5 שאלות לבדיקה
  1. מהם 5 הצעדים של ארכיטקטורת ה-pipeline, ולמה הסדר שלהם קריטי? (רמז: CSV → references → template → API → QA. כל צעד הוא קלט של הבא; אם אחד נשבר — כולם נשברים.)
  2. מתי תבחרו fal.ai ומתי Replicate? מתי תעברו ל-API הרשמי של המודל? (רמז: fal ברירת-מחדל ל-90% מהמקרים. Replicate רק למודלים קהילתיים ספציפיים. API רשמי מעל 10,000 תמונות/חודש.)
  3. מדוע 4-6 תמונות לכל קריאת batch הוא ה-sweet spot, ולא 1, 10, או 20? (רמז: 1 = יקר ואיטי; 4-6 = מספיק וריאציות לבחירה, עלות סבירה; 10+ = המודל מתחיל "לערבב" וריאציות, האיכות יורדת.)
  4. איך cache layer חוסך כסף, ומה ה-hit-rate המעשי בקטלוג טיפוסי? (רמז: cache בודק אם התמונה כבר הופקה לפני שליחה. בקטלוג טיפוסי hit-rate של 50-70%, חיסכון ממוצע של 60%.)
  5. מהם 4 דרגות הנעילה ל-cohesion ב-batch, ולמה בלי נעילה הקטלוג מתפזר? (רמז: template קפוא + seed קבוע + bg reference + prompt זהה מילה במילה. בלי זה, המודל רואה הקשר קצת אחר בכל קריאה, ומייצר תוצאות שונות.)
מה הלאה — פרק 6

בפרק 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 — אתם בסיכון של דגלי-פלטפורמה, החזרות, וחשיפה משפטית.

Checklist — 14 פעולות להשלמת הפרק