# העלאת מדיה מקומית — לקוח וסטודנט

החבילה כוללת את אותו קוד כללי לשני הקהלים. אין בה טוקן, מזהי YS, נתיב סודי או שירות אחסון ציבורי. הסוכן מכין קופי ובריף חזותי; תמונה מקורית או לוגו מגיעים מהלקוח או מכלי תמונה שחובר ואושר בנפרד. טקסט עברי מוסיפים בשכבת עיצוב נפרדת, לא מבקשים ממודל תמונה לצייר אותו.

1. בחרו קובץ PNG, JPEG או GIF עד 10MiB. לפני שימוש חי הריצו מתוך שורש החבילה: `python3 -B -m tools.upload_local_media_v1 --dry-run --file /path/to/approved-image.png`. הפקודה מחזירה סוג, גודל ו־SHA-256 בלבד; היא אינה מעלה דבר.
2. הציגו לבעל העסק את הנכס, החשבון, הדף, מסלול הליד, הקריאייטיב והתקציב. ההסכמה נוגעת לקובץ המסוים ולפעולה המסוימת. שינוי בקובץ משנה את ה־SHA ומבטל את ההתאמה לאישור.
3. במארח שיש לו כבר credential session מורשה ושומר אישור עצמאי, אפשר לקרוא ל־`MetaLocalMediaUploader.upload_image` עם מזהי חשבון ועסק מאושרים, SHA הקובץ ו־`before_dispatch`. המתאם קורא קודם את זהות החשבון והעסק, מעלה פעם אחת ל־`act_<account>/adimages`, ואז קורא חזרה את ה־hash בספריית אותו חשבון. כשל/timeout אחרי ה־POST הוא תוצאה לא ודאית: בודקים את ספריית החשבון לפני כל ניסיון נוסף.
4. `propose_image_plan` מכניס את ה־image hash המאומת למפרט קריאייטיב מוצע בלבד. מציגים מחדש את התוכנית ואת ה־digest לאישור; אין העלאת מודעה או שימוש באישור הישן אוטומטית. יצירת קמפיין/קבוצת מודעות/מודעה עוברת בנפרד במסלול PAUSED עם קריאה חוזרת לכל שלב.

ה־CLI בגרסה זו מבצע **בדיקת קובץ מקומית בלבד**. נתיב ההעלאה האמיתי הוא API של Python למארח מורשה, ונבדק ב־fixtures ללא רשת; לא נבדק כאן מול חשבון מטא חי. אין להזין טוקן בארגומנטים, בצ׳אט או בקובץ החבילה. אם מארח MCP מסוים מציע העלאת `LOCAL_FILE` ומחזיר image hash או video ID, אפשר להשתמש בו רק אחרי בדיקת יכולת, הרשאות, חשבון ושיוך המדיה באותו חשבון. זמינות MCP אינה תכונה מובטחת של החבילה.

**וידאו:** נתיב upload ועיבוד וידאו לא מומש ולא אומת בחבילה הנקייה. ניתן להכין קובץ ובריף לווידאו, אך אין להעביר video ID למודעה עד שהמארח תומך בהעלאה, סטטוס העיבוד הושלם ושיוך המדיה לחשבון נקרא חזרה. אין להציג בדיקת קובץ או קוד מקור כהוכחת העלאה חיה.
