<style>
.mc-pipeline {
  display: grid; grid-template-columns: repeat(5, 1fr); gap: .35rem;
  margin: 1.5rem 0 2rem; align-items: stretch;
}
.mc-pipeline .step {
  background: var(--card-bg); border: 1px solid var(--border); border-radius: var(--radius);
  padding: .85rem .8rem; font-size: .82rem; line-height: 1.35; position: relative;
  display: flex; flex-direction: column; justify-content: center; min-height: 6rem;
}
.mc-pipeline .step .n {
  font-family: var(--font-mono); font-size: .66rem; color: var(--accent);
  margin-bottom: .3rem; letter-spacing: .03em;
}
.mc-pipeline .step::after {
  content: "←"; position: absolute; left: -1.05rem; top: 50%; transform: translateY(-50%);
  color: var(--muted); font-size: 1rem;
}
.mc-pipeline .step:last-child::after { content: ""; }
@media (max-width: 720px) {
  .mc-pipeline { grid-template-columns: 1fr; gap: .6rem; }
  .mc-pipeline .step::after { content: "↓"; left: 50%; top: auto; bottom: -1rem; transform: translateX(-50%); }
  .mc-pipeline .step:last-child::after { content: ""; }
}
ol.mc-steps { list-style: none; margin: 0 0 1rem; padding: 0; counter-reset: mcstep; }
ol.mc-steps li {
  counter-increment: mcstep; position: relative; padding-inline-start: 2.6rem;
  margin-bottom: 1rem; line-height: 1.55;
}
ol.mc-steps li::before {
  content: counter(mcstep); position: absolute; left: 0; top: -.05rem;
  width: 1.7rem; height: 1.7rem; border-radius: 50%;
  background: var(--card-bg); border: 1px solid var(--border); color: var(--accent);
  font-family: var(--font-mono); font-size: .78rem; font-weight: 600;
  display: flex; align-items: center; justify-content: center;
}
.mc-limits { display: grid; gap: .9rem; margin: 0 0 1rem; }
.mc-limit {
  background: var(--card-bg); border: 1px solid var(--border); border-radius: var(--radius);
  padding: 1.1rem 1.3rem;
}
.mc-limit .tag {
  font-family: var(--font-mono); font-size: .72rem; letter-spacing: .06em; text-transform: uppercase;
  color: var(--accent); margin-bottom: .4rem; display: block;
}
.mc-limit p { margin: 0; }
.mc-screens { display: grid; grid-template-columns: repeat(3, 1fr); gap: .8rem; margin: 1.3rem 0; }
.mc-screen {
  border: 1px solid var(--border); border-radius: var(--radius); padding: 1rem;
  background: var(--card-bg);
}
.mc-screen .num { font-family: var(--font-mono); color: var(--muted); font-size: .75rem; }
.mc-screen .name { font-weight: 600; margin-top: .25rem; }
@media (max-width: 640px) { .mc-screens { grid-template-columns: 1fr; } }
</style>

# ארכיון שבו אפשר למצוא כל הופעה

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

לרוב המקומות שאיתם עוד לא עבדנו כבר יש ערימת הקלטות ישנות שמונחת איפשהו — כמה דיסקים, תיקייה בענן, קבצים בשמות כמו `IMG_4021.MOV`. כל הופעה חדשה מוסיפה לזה עוד: אודיו ישר מהפולט, וידאו ממי שהחזיק מצלמה בקהל, תמונות מהכניסה. למצוא הופעה מסוימת פירושו שמישהו צריך לזכור באיזה ערב זה היה ולצפות בעצמו בשעות של חומר.

אנחנו ממיינים את מה שכבר הצטבר, ואז שומרים על הארכיון במצב שבו אף אחד כבר לא צריך להיות זה שזוכר.

<div class="mc-pipeline">
  <div class="step"><span class="n">קלט</span>וידאו ממצלמה, אודיו מהפולט, תמונות — בדיוק כפי שהם כבר מגיעים</div>
  <div class="step"><span class="n">קודם הכול, אחר כך רק חדש</span>מעבר אחד על כל מה שקיים, ואז בדיקה יומית לקבצים חדשים</div>
  <div class="step"><span class="n">cpu</span>Whisper-turbo: אודיו ← טקסט עם חותמות זמן</div>
  <div class="step"><span class="n">אינדקס</span>טבלה: קובץ ← אירוע</div>
  <div class="step"><span class="n">למקום</span>רשימת קבצים לכל ערב — מוכנה ל-YouTube, למבצעים או לעורך</div>
</div>

## איך זה עובד

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

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

## מה קורה כל לילה

<ol class="mc-steps">
<li>סריקת האחסון — בדיקה מול טבלת האינדקס, רק קבצים חדשים עוברים עיבוד.</li>
<li>אודיו — מהפולט או שנשלף מתוך וידאו — מזוהה לטקסט עם חותמות זמן דרך Whisper-turbo, לגמרי מקומית, בלי GPU.</li>
<li>וידאו מסומן בנקודות של שינוי סצנה אמיתי, לא פריים אחר פריים, כך שברור תוך דקה מה קרה על הבמה, בלי לצפות בהקלטה כולה.</li>
<li>קבצים מערב אחד — וידאו, אודיו, תמונות — מקובצים לאירוע אחד לפי זמן הצילום או ההקלטה.</li>
<li>טבלת האינדקס מתעדכנת: איזה אירוע, אילו קבצים, מה בוצע ומתי.</li>
</ol>

## מאגר השירים נהיה מדויק יותר בכל פעם

כבר בנינו מאגר של מילות שירים במגוון ז'אנרים: לפני הזיהוי, התוכנה אומרת למודל איזה שיר כנראה מתנגן, כך שהוא מתמודד הרבה יותר טוב עם מילים ושמות חריגים מאשר זיהוי דיבור רגיל. המאגר הזה גדל עם כל ארכיון שאנחנו מעבדים — כולל זה של המקום עצמו: ככל שנעבד יותר ערבים, הזיהוי נהיה מדויק יותר במיוחד עבור הרפרטואר הקבוע והמבצעים הקבועים שלו.

## מה תקבלו

לכל אירוע — קונצרט, סט, ערב — רואים מיד אילו וידאו, הקלטות ותמונות שייכים אליו, ומה בוצע באיזו דקה. משם אפשר:

- לחתוך שיר מסוים לפי חותמת הזמן ולהעלות אותו ל-YouTube;
- למסור למבצע את הסט שלו בלי לצפות בערב כולו;
- לשלוח חומר לעורך עם התזמון כבר מסומן;
- למצוא כל הקלטה ותמונה עם מבצע מסוים לאורך כל ההיסטוריה של המקום — לא רק ערב אחד.

## מבצעים: מאשרים פעם אחת — נמצא אוטומטית מכאן ואילך

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

בפועל: אם מבצע הופיע עשר פעמים במשך שנתיים, אישור אחד מספיק כדי שהמערכת תמצא את כל העשר — בלי לפשפש בארכיון ידנית בכל פעם שמישהו צריך את החומר שלו.

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

## מה שאנחנו כנים לגבי זה שעוד לא נבדק

<div class="mc-limits">

<div class="mc-limit">
<span class="tag">Whisper-turbo על CPU</span>
<p>הרצנו אותו על כרטיסי מסך הרבה פעמים ויודעים שגרסת CPU קיימת ועובדת עקרונית — אבל לא בדקנו אותה על המעבד הספציפי שבתוך המחשב של מקום מסוים. הימים הראשונים של כל פיילוט, כולל בדיוק העומס הזה, יראו את המספר האמיתי: כמה דקות עיבוד לוקחות לשעת הקלטה אחת על אותה מכונה ספציפית.</p>
</div>

<div class="mc-limit">
<span class="tag">רק המעבר המהיר</span>
<p>Whisper-turbo הוא מצב הזיהוי המהיר והגס; המעבר האיטי והמדויק יותר — המכויל לקולות ספציפיים — בדרך כלל דורש GPU ולא נכלל כאן. דיוק ברמת turbo מספיק לחיפוש, לחותמות זמן ולמיון לפי אירוע. אם בהמשך יידרש טקסט מדויק מילה במילה — כתוביות לפרסום, למשל — זה שלב נפרד וכבד יותר שאפשר להוסיף.</p>
</div>

<div class="mc-limit">
<span class="tag">בלי Ollama</span>
<p>התצורה הזו מדלגת בכוונה על מודל השפה המקומי שבדרך כלל כותב תקצירי מסמכים ומתאר תמונות באמת. אבל מה שהיא כן מוסרת — טקסט עם חותמות זמן וטבלת קובץ-לאירוע — הוא בדיוק סוג החומר הקומפקטי והמעובד-מראש שכל בינה מלאכותית מקוונת כללית (ChatGPT, Claude, Gemini, מה שכבר בשימוש) יודעת לעבד לבד, בלי שום כיול. תקציר של ערב, חיפוש לפי משמעות, מענה על שאלות לגבי הארכיון — כל זה נשאר אפשרי, רק שהעבודה הזו קורית דרך כלי מקוון בשלב האחרון, לא דרך הכלי המקומי שלנו.</p>
</div>

<div class="mc-limit">
<span class="tag">תיאור מה שיש בתמונה</span>
<p>בלי Ollama, המערכת לא כותבת תיאור טקסטואלי של תוכן התמונה — היא לא תגיד מה האווירה בחדר או מה יש ברקע. היא כבר מזהה מבצעים לפי פנים ומקבצת תמונות לאירועים לפי זמן הצילום — זה מספיק כדי למצוא את הערב הנכון ואת האדם הנכון, אבל לא כדי לקבל תיאור כתוב של הצילום.</p>
</div>

</div>

## ממשק נפרד וקליל יותר

עבור מקום, זה רץ כגרסת standalone עצמאית משלו — כלי צר למשימה אחת, בלי ההגדרות והמצבים הנוספים של המוצר המלא. גם הממשק משלו, בשלושה מסכים:

<div class="mc-screens">
  <div class="mc-screen"><div class="num">01</div><div class="name">חדש היום</div></div>
  <div class="mc-screen"><div class="num">02</div><div class="name">אירועים וקבצים</div></div>
  <div class="mc-screen"><div class="num">03</div><div class="name">נגן עם תמלול</div></div>
</div>

לחיצה על שורת טקסט במסך השלישי מקפיצה את הניגון לדקה הזו.

## הלאה

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