nixamp 0.77.0 → 0.78.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (86) hide show
  1. package/backtoschool/dist/assets/{ar-Cj5WpObc.js → ar-CYu0byMf.js} +1 -1
  2. package/backtoschool/dist/assets/{cs-DOYgXvWh.js → cs-BTTM7DeB.js} +1 -1
  3. package/backtoschool/dist/assets/{da-CmgimT0P.js → da-iixezQtd.js} +1 -1
  4. package/backtoschool/dist/assets/{de-D_AUWuE3.js → de-Sx3acevR.js} +1 -1
  5. package/backtoschool/dist/assets/{es-B4QfiG7X.js → es-ByCnw8ja.js} +1 -1
  6. package/backtoschool/dist/assets/{fi-Clf9SZn5.js → fi-BCeFoeH5.js} +1 -1
  7. package/backtoschool/dist/assets/{fr-DpLIxvgd.js → fr-Nz5hMzAE.js} +1 -1
  8. package/backtoschool/dist/assets/{hi-a9HR1j7t.js → hi-x5-IG1rl.js} +1 -1
  9. package/backtoschool/dist/assets/hls-CydbS6hn.js +42 -0
  10. package/backtoschool/dist/assets/hls-OR5FY6YP-O3qhTXm4.js +1 -0
  11. package/backtoschool/dist/assets/{hu-CXw_ATKN.js → hu-QqIkGcMe.js} +1 -1
  12. package/backtoschool/dist/assets/{id-B8GHWT99.js → id-OVwO1Uoi.js} +1 -1
  13. package/backtoschool/dist/assets/index-Dgqs6yM_.js +112 -0
  14. package/backtoschool/dist/assets/{it-D8K-Cjn9.js → it-CmssY5Ut.js} +1 -1
  15. package/backtoschool/dist/assets/mpegts-RQlLEU1A.js +3 -0
  16. package/backtoschool/dist/assets/mpegts-Y2FARLFE-y49QH7a5.js +1 -0
  17. package/backtoschool/dist/assets/{nl-BTHM_tIM.js → nl-VkQxlPku.js} +1 -1
  18. package/backtoschool/dist/assets/{ru-cwqVc7z_.js → ru-Dk8FAbDx.js} +1 -1
  19. package/backtoschool/dist/assets/{sv-De7KSFg-.js → sv-CNs1UySx.js} +1 -1
  20. package/backtoschool/dist/assets/{uk-COyId2km.js → uk-BDB1YayY.js} +1 -1
  21. package/backtoschool/dist/assets/{vi-3djg7AGj.js → vi-DnEIKzy7.js} +1 -1
  22. package/backtoschool/dist/assets/{zh-DNAab67I.js → zh-B_atHA4S.js} +1 -1
  23. package/backtoschool/dist/index.html +1 -1
  24. package/dist/ai-label.d.ts +3 -0
  25. package/dist/ai-label.js +392 -10
  26. package/dist/partyline.d.ts +41 -201
  27. package/dist/partyline.js +65 -601
  28. package/dist/veo-studio.d.ts +22 -0
  29. package/dist/veo-studio.js +64 -3
  30. package/package.json +13 -12
  31. package/src/ai-label.ts +391 -9
  32. package/src/partyline.ts +88 -671
  33. package/src/veo-studio.ts +68 -4
  34. package/web/dist/assets/{ar-DvGjcQ2J.js → ar-Dt4ftL7_.js} +1 -1
  35. package/web/dist/assets/background.worker-F49brs4A.js +547 -0
  36. package/web/dist/assets/chunk-55GBNX64-BDcCEJUP.js +1 -0
  37. package/web/dist/assets/client-D7waX8NA.js +1 -0
  38. package/web/dist/assets/{cs-VkeGFdfN.js → cs-D7U7SQMd.js} +1 -1
  39. package/web/dist/assets/{da-BcpK9125.js → da-BcJX_2kR.js} +1 -1
  40. package/web/dist/assets/{de-DMUTObgP.js → de-rl_x2VZN.js} +1 -1
  41. package/web/dist/assets/{es-Cgv5mJmC.js → es-BGrhKZQz.js} +1 -1
  42. package/web/dist/assets/{fi-CZw6yFV4.js → fi-CY2dfbr_.js} +1 -1
  43. package/web/dist/assets/{fr-Cashl2VH.js → fr-BJkwpR_P.js} +1 -1
  44. package/web/dist/assets/{hi-nRs3DZ0Q.js → hi-BrJHlcBX.js} +1 -1
  45. package/web/dist/assets/hls-CydbS6hn.js +42 -0
  46. package/web/dist/assets/hls-OR5FY6YP-_WOdANsC.js +1 -0
  47. package/web/dist/assets/{hu-D6H6n2Li.js → hu-BULQmmjT.js} +1 -1
  48. package/web/dist/assets/{id-DB89Twrj.js → id-Dzh3ujB1.js} +1 -1
  49. package/web/dist/assets/{it-CH9caHnD.js → it-CexE1NXI.js} +1 -1
  50. package/web/dist/assets/main-CsEDH18x.js +26 -0
  51. package/web/dist/assets/mpegts-CL9RC5Ls.js +3 -0
  52. package/web/dist/assets/mpegts-Y2FARLFE-C91SD8Pl.js +1 -0
  53. package/web/dist/assets/music-ByEeUk4Z.js +1 -0
  54. package/web/dist/assets/{nl-vTvT2DVb.js → nl-BPpsDvjT.js} +1 -1
  55. package/web/dist/assets/radio-BnQ78a-O.js +1 -0
  56. package/web/dist/assets/{ru-dpgYvvQ7.js → ru-CmYwwWDR.js} +1 -1
  57. package/web/dist/assets/{station-UibBpdBh.js → station-C_6L4CDU.js} +2 -2
  58. package/web/dist/assets/{sv-gp9SyEIA.js → sv-DnY0WiF0.js} +1 -1
  59. package/web/dist/assets/{uk-DicgOcIK.js → uk-Cm0pAuQa.js} +1 -1
  60. package/web/dist/assets/{vi-m4X3bO3f.js → vi-CgKu2IlV.js} +1 -1
  61. package/web/dist/assets/{vod-CkR6hzN7.js → vod-CbSC5NFA.js} +1 -1
  62. package/web/dist/assets/{watch-BO-wMY8T.js → watch-D-ZRxfJ_.js} +1 -1
  63. package/web/dist/assets/{zh-DPnaJjYS.js → zh-DOa77AtL.js} +1 -1
  64. package/web/dist/index.html +5 -5
  65. package/web/dist/music.html +2 -2
  66. package/web/dist/radio.html +3 -3
  67. package/web/dist/station.html +3 -3
  68. package/web/dist/sw.js +32 -32
  69. package/web/dist/vod.html +3 -3
  70. package/web/dist/watch.html +3 -3
  71. package/backtoschool/dist/assets/hls-OR5FY6YP-nOjNFW0f.js +0 -1
  72. package/backtoschool/dist/assets/hls-n74Cnh8A.js +0 -42
  73. package/backtoschool/dist/assets/index-BPJoeY65.js +0 -112
  74. package/backtoschool/dist/assets/mpegts-7CN75AI2-cUtR703j.js +0 -1
  75. package/backtoschool/dist/assets/mpegts-CixmcUbS.js +0 -3
  76. package/web/dist/assets/background.worker-Hz7oaQ8X.js +0 -547
  77. package/web/dist/assets/chunk-Q2XQMA4B-OBCD3Aev.js +0 -1
  78. package/web/dist/assets/client-B_mfdrFh.js +0 -1
  79. package/web/dist/assets/hls-OR5FY6YP-B2RNEz5K.js +0 -1
  80. package/web/dist/assets/hls-n74Cnh8A.js +0 -42
  81. package/web/dist/assets/main-BS8YvXOs.js +0 -26
  82. package/web/dist/assets/mpegts-7CN75AI2-1Qj6py7N.js +0 -1
  83. package/web/dist/assets/mpegts-BcF3gJrf.js +0 -3
  84. package/web/dist/assets/music-Day-DtFd.js +0 -1
  85. package/web/dist/assets/radio-Dx44o-ug.js +0 -1
  86. /package/web/dist/assets/{chunk-Q2XQMA4B-DR1XNWCJ.css → chunk-55GBNX64-DR1XNWCJ.css} +0 -0
package/src/veo-studio.ts CHANGED
@@ -90,13 +90,29 @@ export interface VeoStudioOptions {
90
90
  falKey?: string;
91
91
  /** What a second of lip sync is counted at under the same monthly cap; deliberately high ($0.10). */
92
92
  lipsyncUsdPerSecond?: number;
93
+ /** gemini-omni-1.1-flash by default; a "veo-..." model is asked the old Veo way. */
93
94
  model?: string;
95
+ /** Omni's resolution: 360p, 720p, 1080p (the default) or 4k. */
96
+ resolution?: string;
94
97
  fetcher?: typeof fetch;
95
98
  now?: () => number;
96
99
  sleep?: (ms: number) => Promise<void>;
97
100
  }
98
101
 
99
102
  const BASE = "https://generativelanguage.googleapis.com/v1beta";
103
+ export const OMNI_MODEL = "gemini-omni-1.1-flash";
104
+ /** Seconds Omni makes for a shot: it takes no length, so a shot is reserved at this. */
105
+ const OMNI_SECONDS = 10;
106
+
107
+ /**
108
+ * What an Omni shot cost, from its token counts at Google's rates: $17.50 per
109
+ * million video tokens out, $9 per million thinking, $1.50 per million in.
110
+ * (1080p is about 8,700 video tokens a second, so a 10 s shot is about $1.52.)
111
+ */
112
+ export function omniUsd(usage: { total_input_tokens?: number; total_output_tokens?: number; total_thought_tokens?: number } | undefined): number {
113
+ if (!usage) return 0;
114
+ return ((usage.total_output_tokens ?? 0) * 17.5 + (usage.total_thought_tokens ?? 0) * 9 + (usage.total_input_tokens ?? 0) * 1.5) / 1e6;
115
+ }
100
116
 
101
117
  export class VeoStudio {
102
118
  constructor(private readonly options: VeoStudioOptions) {}
@@ -121,13 +137,22 @@ export class VeoStudio {
121
137
  /** One shot: 4, 6 or 8 seconds, 16:9 1080p, with up to three reference images (JPEG). */
122
138
  async clip(input: { prompt: string; seconds: number; references: Buffer[] }): Promise<Buffer> {
123
139
  const seconds = [4, 6, 8].includes(input.seconds) ? input.seconds : 8;
124
- const cost = seconds * this.rate;
140
+ // Omni makes about 10 s whatever is asked, so that is what is paid for.
141
+ const omni = !(this.options.model ?? OMNI_MODEL).startsWith("veo-");
142
+ const cost = (omni ? OMNI_SECONDS : seconds) * this.rate;
125
143
  const month = this.month();
126
144
  // Reserved first, in one step that will not go over: two at once cannot both squeeze under the cap.
127
145
  if (!(await this.options.ledger.reserve(month, cost, this.cap))) throw new VeoBudgetError(`this month's $${this.cap} of Veo is spent`);
128
146
  try {
129
147
  try {
130
- return await this.make(input.prompt, seconds, input.references.slice(0, 3));
148
+ const made = await this.make(input.prompt, seconds, input.references.slice(0, 3));
149
+ // Settled at what Google says it cost, when it says.
150
+ if (made.usd && made.usd > 0) {
151
+ const off = cost - made.usd;
152
+ if (off > 0) await this.options.ledger.refund(month, off).catch(() => undefined);
153
+ else if (off < 0) await this.options.ledger.reserve(month, -off, Number.POSITIVE_INFINITY).catch(() => undefined);
154
+ }
155
+ return made.bytes;
131
156
  } catch (error) {
132
157
  // Google out of quota for the day, or its prepaid credit spent: the same Veo on fal.ai.
133
158
  if (!this.options.falKey || !(error instanceof VeoRefused) || !GOOGLE_OUT.test(error.message)) throw error;
@@ -215,10 +240,49 @@ export class VeoStudio {
215
240
  return await this.falJob(key, "fal-ai/sync-lipsync/v2/pro", { video_url: videoUrl, audio_url: audioUrl }, "the lip sync");
216
241
  }
217
242
 
218
- private async make(prompt: string, seconds: number, references: Buffer[]): Promise<Buffer> {
243
+ private async make(prompt: string, seconds: number, references: Buffer[]): Promise<{ bytes: Buffer; usd?: number }> {
244
+ const model = this.options.model ?? OMNI_MODEL;
245
+ if (!model.startsWith("veo-")) return await this.omni(model, prompt, seconds, references);
246
+ return { bytes: await this.veo(model, prompt, seconds, references) };
247
+ }
248
+
249
+ /**
250
+ * Gemini Omni Flash, Google's replacement for Veo (Veo 3.1 preview was shut
251
+ * down 2026-10-22): one POST to /interactions answers with the clip inline.
252
+ * It has no length setting and makes about 10 s; the label's cutter takes
253
+ * the seconds it asked for. What it cost comes back as tokens.
254
+ */
255
+ private async omni(model: string, prompt: string, seconds: number, references: Buffer[]): Promise<{ bytes: Buffer; usd: number }> {
256
+ const send = this.options.fetcher ?? fetch;
257
+ const text = `${prompt.slice(0, 1800)} A ${seconds}-second shot.`;
258
+ const answer = await send(`${BASE}/interactions`, {
259
+ method: "POST",
260
+ headers: { "x-goog-api-key": this.options.key, "content-type": "application/json" },
261
+ signal: AbortSignal.timeout(10 * 60_000),
262
+ body: JSON.stringify({
263
+ model,
264
+ input: references.length
265
+ ? [...references.map((bytes) => ({ type: "image", data: bytes.toString("base64"), mime_type: "image/jpeg" })), { type: "text", text }]
266
+ : text,
267
+ response_format: { type: "video", aspect_ratio: "16:9", resolution: this.options.resolution ?? "1080p" },
268
+ }),
269
+ });
270
+ const body = await answer.json().catch(() => ({})) as {
271
+ status?: string; error?: { message?: string };
272
+ steps?: Array<{ type?: string; content?: Array<{ type?: string; data?: string }> }>;
273
+ usage?: { total_input_tokens?: number; total_output_tokens?: number; total_thought_tokens?: number; output_tokens_by_modality?: Array<{ modality?: string; tokens?: number }> };
274
+ };
275
+ if (!answer.ok) throw new VeoRefused(`Omni refused the shot: ${body.error?.message?.slice(0, 200) ?? `HTTP ${answer.status}`}`);
276
+ const data = body.steps?.flatMap((step) => step.content ?? []).find((one) => one.type === "video" && one.data)?.data;
277
+ if (!data) throw new VeoRefused(`Omni made nothing (${body.status ?? "no status"})`);
278
+ const bytes = Buffer.from(data, "base64");
279
+ if (bytes.length < 10_000) throw new VeoRefused("the Omni clip was empty");
280
+ return { bytes, usd: omniUsd(body.usage) };
281
+ }
282
+
283
+ private async veo(model: string, prompt: string, seconds: number, references: Buffer[]): Promise<Buffer> {
219
284
  const send = this.options.fetcher ?? fetch;
220
285
  const headers = { "x-goog-api-key": this.options.key, "content-type": "application/json" };
221
- const model = this.options.model ?? "veo-3.1-fast-generate-preview";
222
286
  const started = await send(`${BASE}/models/${model}:predictLongRunning`, {
223
287
  method: "POST",
224
288
  headers,
@@ -1 +1 @@
1
- import{t as e}from"./main-BS8YvXOs.js";var t={...e,"No parties live right now.":`لا توجد جلسات مباشرة الآن.`,"Could not refresh parties.":`تعذر تحديث الجلسات.`,"Pick a server in the directory, or paste its link here.":`اختر خادمًا من الدليل أو الصق رابطه هنا.`,"Interface language":`لغة الواجهة`,Language:`اللغة`,"Translation language":`لغة الترجمة`,"Original (auto-detect)":`الأصل (اكتشاف تلقائي)`,Play:`تشغيل`,Pause:`إيقاف مؤقت`,Stop:`إيقاف`,Next:`التالي`,Previous:`السابق`,Select:`اختيار`,"Next/Prev":`التالي/السابق`,Quit:`خروج`,"Now Playing":`قيد التشغيل`,"Spectrum Analyser":`محلل الطيف`,Playlist:`قائمة التشغيل`,Files:`الملفات`,"Open files":`فتح ملفات`,"Open folder":`فتح مجلد`,"Add to library":`إضافة إلى المكتبة`,"Replace playlist":`استبدال قائمة التشغيل`,Filter:`تصفية`,Search:`بحث`,"Nothing loaded.":`لم يُحمّل أي محتوى.`,"Empty.":`فارغ.`,"Loading…":`جارٍ التحميل…`,"Connecting…":`جارٍ الاتصال…`,Connected:`متصل`,"Not connected":`غير متصل`,"No source":`لا يوجد مصدر`,Playing:`يعمل`,Stopped:`متوقف`,Volume:`مستوى الصوت`,Seek:`موضع التشغيل`,"Full screen":`ملء الشاشة`,Download:`تنزيل`,Share:`مشاركة`,Copy:`نسخ`,"Copy link":`نسخ الرابط`,Copied:`تم النسخ`,Save:`حفظ`,Cancel:`إلغاء`,Close:`إغلاق`,Remove:`إزالة`,Delete:`حذف`,Edit:`تعديل`,Add:`إضافة`,Send:`إرسال`,Retry:`إعادة المحاولة`,Back:`رجوع`,"Next page":`الصفحة التالية`,"Previous page":`الصفحة السابقة`,"Show more":`عرض المزيد`,Panels:`اللوحات`,"Reset layout":`إعادة ضبط التخطيط`,Show:`إظهار`,Hide:`إخفاء`,Collapse:`طي`,Expand:`توسيع`,"Move up":`نقل لأعلى`,"Move down":`نقل لأسفل`,Install:`تثبيت`,"TV mode":`وضع التلفاز`,On:`مفعّل`,Off:`معطّل`,Account:`الحساب`,"Sign in":`تسجيل الدخول`,"Sign out":`تسجيل الخروج`,"Create account":`إنشاء حساب`,Email:`البريد الإلكتروني`,Password:`كلمة المرور`,"Forgot password?":`نسيت كلمة المرور؟`,"Welcome back":`مرحبًا بعودتك`,Profile:`الملف الشخصي`,Handle:`اسم المستخدم`,"Your servers":`خوادمك`,Server:`الخادم`,Connect:`اتصال`,Disconnect:`قطع الاتصال`,Directory:`الدليل`,Favourites:`المفضلة`,Follow:`متابعة`,Unfollow:`إلغاء المتابعة`,Notifications:`الإشعارات`,"Phone number":`رقم الهاتف`,"Save number":`حفظ الرقم`,Transcript:`النص المفرغ`,Captions:`الترجمة النصية`,"Translate audio":`ترجمة الصوت`,"Audio language":`لغة الصوت`,"Audio options":`خيارات الصوت`,"Keep background sound":`الاحتفاظ بأصوات الخلفية`,"Background level":`مستوى صوت الخلفية`,"Speaker voices":`أصوات المتحدثين`,"Any voice":`أي صوت`,"Male voice":`صوت رجالي`,"Female voice":`صوت نسائي`,"Original audio.":`الصوت الأصلي.`,"Buy translated audio":`شراء الصوت المترجم`,"Audio credit":`رصيد الصوت`,"Buy pass":`شراء تصريح`,Pass:`تصريح`,"Pay with":`الدفع باستخدام`,"Check payment":`التحقق من الدفع`,"Open checkout":`الانتقال للدفع`,"Free sessions":`جلسات مجانية`,"Usage rates and expiry":`الأسعار ومدة الصلاحية`,Catalogs:`الكتالوجات`,"Add catalog":`إضافة كتالوج`,"Catalog name":`اسم الكتالوج`,Link:`الرابط`,"Play link":`تشغيل الرابط`,"Go live":`بدء بث مباشر`,Publish:`نشر`,Listen:`استماع`,"Live now":`مباشر الآن`,Upcoming:`قريبًا`,Parties:`حفلات المشاهدة`,"Join party":`الانضمام للحفلة`,"Invite code":`رمز الدعوة`,Invite:`دعوة`,Chat:`الدردشة`,"Chat message":`رسالة دردشة`,People:`الأشخاص`,Speaker:`متحدث`,Speakers:`المتحدثون`,Listener:`مستمع`,Moderator:`مشرف`,"Raise hand":`رفع اليد`,"Hand raises":`الأيدي المرفوعة`,Questions:`الأسئلة`,Resources:`الموارد`,Replay:`إعادة العرض`,Schedule:`الجدول`,Event:`الفعالية`,Host:`المضيف`,About:`حول`,Stage:`المنصة`,Title:`العنوان`,Description:`الوصف`,Topic:`الموضوع`,Public:`عام`,"Anyone with the link":`أي شخص لديه الرابط`,"Invited people":`الأشخاص المدعوون`,"Who can join":`من يمكنه الانضمام`,"Date and time":`التاريخ والوقت`,"Expected length":`المدة المتوقعة`,Repeat:`تكرار`,"Does not repeat":`لا يتكرر`,"Every day":`كل يوم`,"Every week":`كل أسبوع`,Homepage:`الموقع الإلكتروني`,"Host name":`اسم المضيف`,"Profile photo URL":`رابط صورة الملف الشخصي`,"Broadcast link":`رابط البث`,"Edit event":`تعديل الفعالية`,"Save changes":`حفظ التغييرات`,"Create live":`إنشاء بث مباشر`,"Schedule class":`جدولة درس`,"Start class":`بدء الدرس`,"End event":`إنهاء الفعالية`,"End session":`إنهاء الجلسة`,"Session ended":`انتهت الجلسة`,"Event ended":`انتهت الفعالية`,Cancelled:`ملغاة`,"Replay available":`إعادة العرض متاحة`,Join:`انضمام`,"Create invite":`إنشاء دعوة`,"Invite as":`الدعوة بصفة`,"Watch now":`شاهد الآن`,"Start a room":`إنشاء غرفة`,"Recent replays":`إعادات العرض الأخيرة`,"Your account":`حسابك`,"Write with AI":`الكتابة بالذكاء الاصطناعي`,"Suggested title":`العنوان المقترح`,"Suggested description":`الوصف المقترح`,"Suggested topic":`الموضوع المقترح`,"Use these details":`استخدام هذه التفاصيل`,"Learn something live.":`تعلّم شيئًا مباشرة.`,"Screen share":`مشاركة الشاشة`,"Upload and broadcast":`رفع وبث`,Help:`مساعدة`,"Reload Player":`إعادة تحميل المشغل`,"Copy Bundled CLI Path":`نسخ مسار أداة سطر الأوامر المضمنة`,"Developer tools":`أدوات المطور`,Undo:`تراجع`,Redo:`إعادة`,Cut:`قص`,Paste:`لصق`,"Select all":`تحديد الكل`,Status:`الحالة`,"Activity log":`سجل النشاط`,Admin:`الإدارة`,"Playback controls":`عناصر التحكم بالتشغيل`,"Tracks and folders":`المقاطع والمجلدات`,"Original-language captions.":`ترجمة نصية باللغة الأصلية.`,"Skip to playback controls":`الانتقال إلى عناصر التحكم بالتشغيل`,"Skip to playlist":`الانتقال إلى قائمة التشغيل`,"Skip to transcript and translated audio":`الانتقال إلى النص المفرغ والصوت المترجم`};export{t as default};
1
+ import{t as e}from"./main-CsEDH18x.js";var t={...e,"No parties live right now.":`لا توجد جلسات مباشرة الآن.`,"Could not refresh parties.":`تعذر تحديث الجلسات.`,"Pick a server in the directory, or paste its link here.":`اختر خادمًا من الدليل أو الصق رابطه هنا.`,"Interface language":`لغة الواجهة`,Language:`اللغة`,"Translation language":`لغة الترجمة`,"Original (auto-detect)":`الأصل (اكتشاف تلقائي)`,Play:`تشغيل`,Pause:`إيقاف مؤقت`,Stop:`إيقاف`,Next:`التالي`,Previous:`السابق`,Select:`اختيار`,"Next/Prev":`التالي/السابق`,Quit:`خروج`,"Now Playing":`قيد التشغيل`,"Spectrum Analyser":`محلل الطيف`,Playlist:`قائمة التشغيل`,Files:`الملفات`,"Open files":`فتح ملفات`,"Open folder":`فتح مجلد`,"Add to library":`إضافة إلى المكتبة`,"Replace playlist":`استبدال قائمة التشغيل`,Filter:`تصفية`,Search:`بحث`,"Nothing loaded.":`لم يُحمّل أي محتوى.`,"Empty.":`فارغ.`,"Loading…":`جارٍ التحميل…`,"Connecting…":`جارٍ الاتصال…`,Connected:`متصل`,"Not connected":`غير متصل`,"No source":`لا يوجد مصدر`,Playing:`يعمل`,Stopped:`متوقف`,Volume:`مستوى الصوت`,Seek:`موضع التشغيل`,"Full screen":`ملء الشاشة`,Download:`تنزيل`,Share:`مشاركة`,Copy:`نسخ`,"Copy link":`نسخ الرابط`,Copied:`تم النسخ`,Save:`حفظ`,Cancel:`إلغاء`,Close:`إغلاق`,Remove:`إزالة`,Delete:`حذف`,Edit:`تعديل`,Add:`إضافة`,Send:`إرسال`,Retry:`إعادة المحاولة`,Back:`رجوع`,"Next page":`الصفحة التالية`,"Previous page":`الصفحة السابقة`,"Show more":`عرض المزيد`,Panels:`اللوحات`,"Reset layout":`إعادة ضبط التخطيط`,Show:`إظهار`,Hide:`إخفاء`,Collapse:`طي`,Expand:`توسيع`,"Move up":`نقل لأعلى`,"Move down":`نقل لأسفل`,Install:`تثبيت`,"TV mode":`وضع التلفاز`,On:`مفعّل`,Off:`معطّل`,Account:`الحساب`,"Sign in":`تسجيل الدخول`,"Sign out":`تسجيل الخروج`,"Create account":`إنشاء حساب`,Email:`البريد الإلكتروني`,Password:`كلمة المرور`,"Forgot password?":`نسيت كلمة المرور؟`,"Welcome back":`مرحبًا بعودتك`,Profile:`الملف الشخصي`,Handle:`اسم المستخدم`,"Your servers":`خوادمك`,Server:`الخادم`,Connect:`اتصال`,Disconnect:`قطع الاتصال`,Directory:`الدليل`,Favourites:`المفضلة`,Follow:`متابعة`,Unfollow:`إلغاء المتابعة`,Notifications:`الإشعارات`,"Phone number":`رقم الهاتف`,"Save number":`حفظ الرقم`,Transcript:`النص المفرغ`,Captions:`الترجمة النصية`,"Translate audio":`ترجمة الصوت`,"Audio language":`لغة الصوت`,"Audio options":`خيارات الصوت`,"Keep background sound":`الاحتفاظ بأصوات الخلفية`,"Background level":`مستوى صوت الخلفية`,"Speaker voices":`أصوات المتحدثين`,"Any voice":`أي صوت`,"Male voice":`صوت رجالي`,"Female voice":`صوت نسائي`,"Original audio.":`الصوت الأصلي.`,"Buy translated audio":`شراء الصوت المترجم`,"Audio credit":`رصيد الصوت`,"Buy pass":`شراء تصريح`,Pass:`تصريح`,"Pay with":`الدفع باستخدام`,"Check payment":`التحقق من الدفع`,"Open checkout":`الانتقال للدفع`,"Free sessions":`جلسات مجانية`,"Usage rates and expiry":`الأسعار ومدة الصلاحية`,Catalogs:`الكتالوجات`,"Add catalog":`إضافة كتالوج`,"Catalog name":`اسم الكتالوج`,Link:`الرابط`,"Play link":`تشغيل الرابط`,"Go live":`بدء بث مباشر`,Publish:`نشر`,Listen:`استماع`,"Live now":`مباشر الآن`,Upcoming:`قريبًا`,Parties:`حفلات المشاهدة`,"Join party":`الانضمام للحفلة`,"Invite code":`رمز الدعوة`,Invite:`دعوة`,Chat:`الدردشة`,"Chat message":`رسالة دردشة`,People:`الأشخاص`,Speaker:`متحدث`,Speakers:`المتحدثون`,Listener:`مستمع`,Moderator:`مشرف`,"Raise hand":`رفع اليد`,"Hand raises":`الأيدي المرفوعة`,Questions:`الأسئلة`,Resources:`الموارد`,Replay:`إعادة العرض`,Schedule:`الجدول`,Event:`الفعالية`,Host:`المضيف`,About:`حول`,Stage:`المنصة`,Title:`العنوان`,Description:`الوصف`,Topic:`الموضوع`,Public:`عام`,"Anyone with the link":`أي شخص لديه الرابط`,"Invited people":`الأشخاص المدعوون`,"Who can join":`من يمكنه الانضمام`,"Date and time":`التاريخ والوقت`,"Expected length":`المدة المتوقعة`,Repeat:`تكرار`,"Does not repeat":`لا يتكرر`,"Every day":`كل يوم`,"Every week":`كل أسبوع`,Homepage:`الموقع الإلكتروني`,"Host name":`اسم المضيف`,"Profile photo URL":`رابط صورة الملف الشخصي`,"Broadcast link":`رابط البث`,"Edit event":`تعديل الفعالية`,"Save changes":`حفظ التغييرات`,"Create live":`إنشاء بث مباشر`,"Schedule class":`جدولة درس`,"Start class":`بدء الدرس`,"End event":`إنهاء الفعالية`,"End session":`إنهاء الجلسة`,"Session ended":`انتهت الجلسة`,"Event ended":`انتهت الفعالية`,Cancelled:`ملغاة`,"Replay available":`إعادة العرض متاحة`,Join:`انضمام`,"Create invite":`إنشاء دعوة`,"Invite as":`الدعوة بصفة`,"Watch now":`شاهد الآن`,"Start a room":`إنشاء غرفة`,"Recent replays":`إعادات العرض الأخيرة`,"Your account":`حسابك`,"Write with AI":`الكتابة بالذكاء الاصطناعي`,"Suggested title":`العنوان المقترح`,"Suggested description":`الوصف المقترح`,"Suggested topic":`الموضوع المقترح`,"Use these details":`استخدام هذه التفاصيل`,"Learn something live.":`تعلّم شيئًا مباشرة.`,"Screen share":`مشاركة الشاشة`,"Upload and broadcast":`رفع وبث`,Help:`مساعدة`,"Reload Player":`إعادة تحميل المشغل`,"Copy Bundled CLI Path":`نسخ مسار أداة سطر الأوامر المضمنة`,"Developer tools":`أدوات المطور`,Undo:`تراجع`,Redo:`إعادة`,Cut:`قص`,Paste:`لصق`,"Select all":`تحديد الكل`,Status:`الحالة`,"Activity log":`سجل النشاط`,Admin:`الإدارة`,"Playback controls":`عناصر التحكم بالتشغيل`,"Tracks and folders":`المقاطع والمجلدات`,"Original-language captions.":`ترجمة نصية باللغة الأصلية.`,"Skip to playback controls":`الانتقال إلى عناصر التحكم بالتشغيل`,"Skip to playlist":`الانتقال إلى قائمة التشغيل`,"Skip to transcript and translated audio":`الانتقال إلى النص المفرغ والصوت المترجم`};export{t as default};