xvai-loi 0.1.59 → 0.1.61

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 (3) hide show
  1. package/co.txt +1 -1
  2. package/package.json +1 -1
  3. package/xvai-loi.js +53 -8
package/co.txt CHANGED
@@ -1 +1 @@
1
- xvaiLoi111128
1
+ xvaiLoi111242
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "xvai-loi",
3
- "version": "0.1.59",
3
+ "version": "0.1.61",
4
4
  "description": "Loi dung video (Edit Video Tu Dong) nap vao tool Google Flow qua o cam engine/oCam.ts",
5
5
  "license": "UNLICENSED",
6
6
  "type": "module",
package/xvai-loi.js CHANGED
@@ -10773,7 +10773,7 @@ dangKy("cmAnh", (g, d, tuoi, W4, H2, _n, _s, dai2) => {
10773
10773
  }
10774
10774
  return t ? n / t : 1;
10775
10775
  };
10776
- const yB = [0.66, 0.6, 0.14, 0.72].map((y) => [y, ph(y)]).sort((a2, b) => a2[1] - b[1])[0][0];
10776
+ const yB = [0.6, 0.55, 0.14, 0.66, 0.5].filter((y) => y + hK <= 0.82).map((y) => [y, ph(y)]).sort((a2, b) => a2[1] - b[1])[0][0];
10777
10777
  yK = (yB + 0.575 * 112 / 1920) * H2;
10778
10778
  xK = W4 / 2;
10779
10779
  wK2 = 0.76 * W4;
@@ -11162,9 +11162,9 @@ dangKy("cmSticker", (g, d, tuoi, W4, H2, _n, _s, dai2) => {
11162
11162
  }
11163
11163
  const B = G3.__dauMH || (G3.__dauCanh && _n ? G3.__dauCanh(d, _n, W4, H2) : null);
11164
11164
  const HV = Array.isArray(G3.__hopVe) ? G3.__hopVe : [], tk = typeof G3.__tKhung === "number" ? +G3.__tKhung.toFixed(3) : -1, chuK = [];
11165
- for (let i = HV.length - 1; i >= 0 && i >= HV.length - 60; i--) {
11165
+ for (let i = HV.length - 1; i >= 0 && i >= HV.length - 120; i--) {
11166
11166
  const h = HV[i];
11167
- if (h.t !== tk) break;
11167
+ if (h.t < tk - 0.05) break;
11168
11168
  if (/^chu|^the|^nguoi|^anh:the/.test(String(h.lop))) chuK.push([h.x0, h.y0, h.x1, h.y1]);
11169
11169
  }
11170
11170
  const AL = G3.__anhLuoi && G3.__anhLuoi.k === G3.__khungSo ? G3.__anhLuoi.L : null, coNguoiAnh = (cx, cy) => {
@@ -11694,7 +11694,7 @@ function lapCuongMe(o) {
11694
11694
  ghiL("bo", { bo: x.kieu || "chu", f: f2, d: 0 }, "trung CTA: canh AI vung CTA lap dung chu CTA may (comment / luu / tai lieu / tang): " + String(x.tu || ""));
11695
11695
  return;
11696
11696
  }
11697
- const ten2 = x.kieu + ":" + String(x.tu || "").toLocaleLowerCase("vi"), im0 = taiSan(ten2), co = !!im0 && !daAnh.has(im0) && !!daAnh.add(im0), chuK = hoa3(suaChu(sach2(x.chu || ""))).split(" ").slice(0, 4).join(" "), chu22 = hoa3(suaChu(sach2(x.chu2 || ""))).split(" ").slice(0, 4).join(" ");
11697
+ const ten2 = x.kieu + ":" + String(x.tu || "").toLocaleLowerCase("vi"), im0 = taiSan(ten2), co = !!im0 && !daAnh.has(im0) && !!daAnh.add(im0), chuK = hoa3(suaChu(sach2(x.chu || (x.kieu === "anh" || x.kieu === "vat" ? String(x.tu || "").split(/\s+/).slice(0, 3).join(" ") : "")))).split(" ").slice(0, 4).join(" "), chu22 = hoa3(suaChu(sach2(x.chu2 || ""))).split(" ").slice(0, 4).join(" ");
11698
11698
  const n0 = ung.length, n1 = loai.length, dV = co && im0.laVideo ? Math.min(2.8, Math.max(2, +im0.dai || 2.4)) : 0;
11699
11699
  if (x.kieu === "anh" && dV) {
11700
11700
  de(f2, dV, { uuTien: UT.so + 5, bo: "anh", ten: ten2, chu: chuK, chu2: chu22, keu: "whoosh", video: 1 }, 3, datAnh);
@@ -13291,13 +13291,21 @@ function veTrangTu(g, c, T, W4, H2, nen2, mo4) {
13291
13291
  if (S && (coPip || D && D[3] > D[1])) {
13292
13292
  const e = 0.015 * H2, vat = [];
13293
13293
  if (coPip) vat.push([O2.b[0] - e, O2.b[1] - e, O2.b[2] + e, O2.b[3] + e, 3]);
13294
+ {
13295
+ const HV = Array.isArray(G3.__hopVe) ? G3.__hopVe : [], tk = typeof G3.__tKhung === "number" ? +G3.__tKhung.toFixed(3) : -1;
13296
+ for (let q = HV.length - 1; q >= 0 && q >= HV.length - 80; q--) {
13297
+ const h = HV[q];
13298
+ if (h.t < tk - 0.05) break;
13299
+ if (/^icon|^logo/.test(String(h.lop))) vat.push([h.x0 * W4 - e, h.y0 * H2 - e, h.x1 * W4 + e, h.y1 * H2 + e, 2]);
13300
+ }
13301
+ }
13294
13302
  if (D && D[3] > D[1]) {
13295
13303
  const hh = D[3] - D[1];
13296
13304
  vat.push([D[0] * W4, (D[1] + 0.3 * hh) * H2, D[2] * W4, (D[1] + 0.8 * hh) * H2, 3], [D[0] * W4, (D[1] - 0.35 * hh) * H2, D[2] * W4, (D[1] + 0.3 * hh) * H2, 2], [D[0] * W4, (D[1] + 0.8 * hh) * H2, D[2] * W4, (D[3] + 0.025) * H2, 1.2]);
13297
13305
  }
13298
13306
  const phat = (y0) => vat.reduce((t, b) => t + b[4] * Math.max(0, Math.min(S[2], b[2]) - Math.max(S[0], b[0])) * Math.max(0, Math.min(S[3] + y0, b[3]) - Math.max(S[1] + y0, b[1])), 0);
13299
13307
  if (phat(0) > 0) {
13300
- if (!P3.ne || P3.neK !== (coPip ? 1 : 0)) {
13308
+ if (!P3.ne || P3.neK !== (coPip ? 1 : 0) || phat(P3.ne[1]) > 0) {
13301
13309
  let tot = 0, best = phat(0) + 1e-9 * 0;
13302
13310
  for (let y = 0.12 * H2; y + (S[3] - S[1]) <= 0.84 * H2; y += 0.01 * H2) {
13303
13311
  const d0 = y - S[1], v = phat(d0) + Math.abs(d0) * (S[2] - S[0]) * 0.02;
@@ -17516,7 +17524,7 @@ async function nhanAI(ws, onStatus) {
17516
17524
  var ganNhan = (ws, nh) => nh ? ws.map((w, i) => ({ ...w, n: w.n || (nh.k.indexOf(i) >= 0 ? 1 : 0) })) : ws;
17517
17525
 
17518
17526
  // flow-src/engine/deAI.ts
17519
- var DE_CM = 'B\u1EA1n l\xE0 \u0111\u1EA1o di\u1EC5n h\xECnh cho video d\u1ECDc ng\u1EAFn ti\u1EBFng Vi\u1EC7t, ng\u01B0\u1EDDi n\xF3i tr\u01B0\u1EDBc m\xE1y, m\u1ECDi th\u1EC3 lo\u1EA1i. \u0110\u1ECDc l\u1EDDi r\u1ED3i tr\u1EA3 \u0110\xDANG M\u1ED8T JSON, kh\xF4ng gi\u1EA3i th\xEDch: {"the_loai":"liet-ke|ke-chuyen|lap-luan|ban-hang|huong-dan|khac","co_liet_ke":true/false (true CH\u1EC8 khi ng\u01B0\u1EDDi n\xF3i l\u1EA7n l\u01B0\u1EE3t k\u1EC3 t\u1EEB 3 m\u1EE5c/b\u01B0\u1EDBc tr\u1EDF l\xEAn),"moc":"2-5 t\u1EEB NGUY\xCAN V\u0102N c\xE2u \u0111\u1EA7u n\xEAu ch\u1EE7 \u0111\u1EC1","chot":"l\u1EDDi ch\u1ED1t 3-6 t\u1EEB","nhom":"t\xEAn lo\u1EA1i m\u1EE5c (vd M\u1EB8O, B\u01AF\u1EDAC, C\xD4NG C\u1EE4) ho\u1EB7c r\u1ED7ng","muc":[{"tu":"2-4 t\u1EEB NGUY\xCAN V\u0102N n\u01A1i b\u1EAFt \u0111\u1EA7u n\xF3i m\u1EE5c","ten":"t\xEAn m\u1EE5c \u0111\xFAng ch\xEDnh t\u1EA3, \u0111\u1EE7 ch\u1EEF nh\u01B0 ng\u01B0\u1EDDi n\xF3i; t\xEAn n\u01B0\u1EDBc ngo\xE0i b\u1ECB phi\xEAn \xE2m th\xEC ghi t\xEAn g\u1ED1c","mo":"vi\u1EC7c n\xF3 l\xE0m \u2264 5 t\u1EEB","url":"https trang ch\xEDnh th\u1EE9c CH\u1EC8 khi ch\u1EAFc ch\u1EAFn, kh\xF4ng th\xEC r\u1ED7ng","kq":["\u2264 3 k\u1EBFt qu\u1EA3, m\u1ED7i c\xE1i \u2264 4 t\u1EEB, l\u1EA5y t\u1EEB l\u1EDDi"]}],"canh":[{"tu":"2-4 t\u1EEB NGUY\xCAN V\u0102N n\u01A1i h\xECnh b\u1EAFt \u0111\u1EA7u","kieu":"anh|vat|chu|so|ds","dong":["kieu ds: 2-3 \xFD nguy\xEAn v\u0103n \u2264 3 t\u1EEB, \u0111\xFAng th\u1EE9 t\u1EF1 n\xF3i"],"chu":"ch\u1EEF kho\xE1 \u2264 3 t\u1EEB IN HOA t\xF3m \xFD","chu2":"d\xF2ng ph\u1EE5 \u2264 3 t\u1EEB IN HOA ho\u1EB7c r\u1ED7ng","sac":"am|duong|trung (s\u1EAFc th\xE1i; c\xE2u ph\u1EE7 \u0111\u1ECBnh nh\u01B0 \u201Ckh\xF4ng m\u1EA5t ph\xED\u201D l\xE0 duong)","icon":"tien|dongho|canhbao|tich|bieudo|tim|lua|tenlua|bongden|qua|giohang|nha|sach|dienthoai|cup|khien|la|giot|kinhlup|sai|khong \u2014 icon nh\u1ECF G\u1EAEN TH\xCAM v\xE0o c\u1EA3nh b\u1EA5t k\u1EF3 (c\u1EA3 c\u1EA3nh anh), ch\u1ECDn khi h\u1EE3p ngh\u0129a; kh\xF4ng thay c\u1EA3nh anh","en":"kieu anh: 1 \u1EA3nh ch\u1EE5p th\u1EADt ti\u1EBFng Anh minh ho\u1EA1 \u0110\xDANG ngh\u0129a c\u1EE5m \u0111ang n\xF3i, ng\u01B0\u1EDDi Vi\u1EC7t, b\u1ED1i c\u1EA3nh v\xE0 h\xE0nh \u0111\u1ED9ng c\u1EE5 th\u1EC3, kh\xF4ng ch\u1EEF; kieu vat: 1 \u0111\u1ED3 v\u1EADt 3D ti\u1EBFng Anh; chu/so: r\u1ED7ng"}],"sua":[["c\u1EE5m nghe SAI nguy\xEAn v\u0103n 1-4 t\u1EEB","c\u1EE5m \u0110\xDANG"]]}. Quy t\u1EAFc: co_liet_ke false \u2192 muc [] v\xE0 nhom r\u1ED7ng, b\u1ECF qua m\u1ECDi quy t\u1EAFc v\u1EC1 m\u1EE5c. canh r\u1EA3i \u0111\u1EC1u 1 c\u1EA3nh m\u1ED7i 2,5-3,5 gi\xE2y l\u1EDDi, \u0111\u1ED5i h\xECnh \u0111\xFAng c\u1EE5m t\u1EEB; anh cho b\u1ED1i c\u1EA3nh, c\u1EA3m x\xFAc, \u1EA9n d\u1EE5; vat cho \u0111\u1ED3 v\u1EADt, bi\u1EC3u t\u01B0\u1EE3ng; chu cho c\xE2u \u0111\u1EAFt; so cho con s\u1ED1 c\xF3 trong l\u1EDDi; ds khi l\u1EDDi k\u1EC3 2-3 th\u1EE9 li\u1EC1n nhau. S\u1ED1 anh \u2248 1 m\u1ED7i 6-7 gi\xE2y l\u1EDDi (t\u1ED1i \u0111a 24, KH\xD4NG gi\u1EA3m v\xEC \u0111\xE3 c\xF3 icon), vat \u2264 5, r\u1EA3i \u0110\u1EC0U \u0111\u1EA7u/gi\u1EEFa/cu\u1ED1i (ph\u1EA7n cu\u1ED1i c\u0169ng c\xF3 anh). 3-4 c\u1EA3nh anh \u0111\u1EA7u minh ho\u1EA1 \u0111\xFAng ch\u1EE7 \u0111\u1EC1 c\xE2u m\u1EDF. C\xF3 li\u1EC7t k\xEA: m\u1ED7i m\u1EE5c c\xF3 \u2265 1 anh ho\u1EB7c vat minh ho\u1EA1, kh\xF4ng \u0111\u1EB7t c\u1EA3nh \u0111\xFAng ch\u1ED7 b\u1EAFt \u0111\u1EA7u m\u1EE5c. Kh\xF4ng b\u1ECBa con s\u1ED1. sua = m\u1ECDi ch\u1ED7 nghe nh\u1EA7m t\xEAn ri\xEAng, thu\u1EADt ng\u1EEF, ch\xEDnh t\u1EA3, t\u1ED1i \u0111a 30. L\u1EDDi n\xF3i: ';
17527
+ var DE_CM = 'B\u1EA1n l\xE0 \u0111\u1EA1o di\u1EC5n h\xECnh cho video d\u1ECDc ng\u1EAFn ti\u1EBFng Vi\u1EC7t, ng\u01B0\u1EDDi n\xF3i tr\u01B0\u1EDBc m\xE1y, m\u1ECDi th\u1EC3 lo\u1EA1i. \u0110\u1ECDc l\u1EDDi r\u1ED3i tr\u1EA3 \u0110\xDANG M\u1ED8T JSON, kh\xF4ng gi\u1EA3i th\xEDch: {"the_loai":"liet-ke|ke-chuyen|lap-luan|ban-hang|huong-dan|khac","co_liet_ke":true/false (true CH\u1EC8 khi ng\u01B0\u1EDDi n\xF3i l\u1EA7n l\u01B0\u1EE3t k\u1EC3 t\u1EEB 3 m\u1EE5c/b\u01B0\u1EDBc tr\u1EDF l\xEAn),"moc":"2-5 t\u1EEB NGUY\xCAN V\u0102N c\xE2u \u0111\u1EA7u n\xEAu ch\u1EE7 \u0111\u1EC1","chot":"l\u1EDDi ch\u1ED1t 3-6 t\u1EEB","nhom":"t\xEAn lo\u1EA1i m\u1EE5c (vd M\u1EB8O, B\u01AF\u1EDAC, C\xD4NG C\u1EE4) ho\u1EB7c r\u1ED7ng","muc":[{"tu":"2-4 t\u1EEB NGUY\xCAN V\u0102N n\u01A1i b\u1EAFt \u0111\u1EA7u n\xF3i m\u1EE5c","ten":"t\xEAn m\u1EE5c \u0111\xFAng ch\xEDnh t\u1EA3, \u0111\u1EE7 ch\u1EEF nh\u01B0 ng\u01B0\u1EDDi n\xF3i; t\xEAn n\u01B0\u1EDBc ngo\xE0i b\u1ECB phi\xEAn \xE2m th\xEC ghi t\xEAn g\u1ED1c","mo":"vi\u1EC7c n\xF3 l\xE0m \u2264 5 t\u1EEB","url":"https trang ch\xEDnh th\u1EE9c CH\u1EC8 khi ch\u1EAFc ch\u1EAFn, kh\xF4ng th\xEC r\u1ED7ng","kq":["\u2264 3 k\u1EBFt qu\u1EA3, m\u1ED7i c\xE1i \u2264 4 t\u1EEB, l\u1EA5y t\u1EEB l\u1EDDi"]}],"canh":[{"tu":"2-4 t\u1EEB NGUY\xCAN V\u0102N n\u01A1i h\xECnh b\u1EAFt \u0111\u1EA7u","kieu":"anh|vat|chu|so|ds","dong":["kieu ds: 2-3 \xFD nguy\xEAn v\u0103n \u2264 3 t\u1EEB, \u0111\xFAng th\u1EE9 t\u1EF1 n\xF3i"],"chu":"ch\u1EEF kho\xE1 \u2264 3 t\u1EEB IN HOA t\xF3m \xFD \u2014 B\u1EAET BU\u1ED8C \u1EDF M\u1ECCI c\u1EA3nh, k\u1EC3 c\u1EA3 anh v\xE0 vat","chu2":"d\xF2ng ph\u1EE5 \u2264 3 t\u1EEB IN HOA ho\u1EB7c r\u1ED7ng","sac":"am|duong|trung (s\u1EAFc th\xE1i; c\xE2u ph\u1EE7 \u0111\u1ECBnh nh\u01B0 \u201Ckh\xF4ng m\u1EA5t ph\xED\u201D l\xE0 duong)","icon":"tien|dongho|canhbao|tich|bieudo|tim|lua|tenlua|bongden|qua|giohang|nha|sach|dienthoai|cup|khien|la|giot|kinhlup|sai|khong \u2014 icon nh\u1ECF G\u1EAEN TH\xCAM v\xE0o c\u1EA3nh b\u1EA5t k\u1EF3 (c\u1EA3 c\u1EA3nh anh), ch\u1ECDn khi h\u1EE3p ngh\u0129a; kh\xF4ng thay c\u1EA3nh anh","en":"kieu anh: 1 \u1EA3nh ch\u1EE5p th\u1EADt ti\u1EBFng Anh minh ho\u1EA1 \u0110\xDANG ngh\u0129a c\u1EE5m \u0111ang n\xF3i, ng\u01B0\u1EDDi Vi\u1EC7t, b\u1ED1i c\u1EA3nh v\xE0 h\xE0nh \u0111\u1ED9ng c\u1EE5 th\u1EC3, kh\xF4ng ch\u1EEF; kieu vat: 1 \u0111\u1ED3 v\u1EADt 3D ti\u1EBFng Anh; chu/so: r\u1ED7ng"}],"sua":[["c\u1EE5m nghe SAI nguy\xEAn v\u0103n 1-4 t\u1EEB","c\u1EE5m \u0110\xDANG"]]}. Quy t\u1EAFc: co_liet_ke false \u2192 muc [] v\xE0 nhom r\u1ED7ng, b\u1ECF qua m\u1ECDi quy t\u1EAFc v\u1EC1 m\u1EE5c. canh r\u1EA3i \u0111\u1EC1u 1 c\u1EA3nh m\u1ED7i 2,5-3,5 gi\xE2y l\u1EDDi, \u0111\u1ED5i h\xECnh \u0111\xFAng c\u1EE5m t\u1EEB; anh cho b\u1ED1i c\u1EA3nh, c\u1EA3m x\xFAc, \u1EA9n d\u1EE5; vat cho \u0111\u1ED3 v\u1EADt, bi\u1EC3u t\u01B0\u1EE3ng; chu cho c\xE2u \u0111\u1EAFt; so cho con s\u1ED1 c\xF3 trong l\u1EDDi; ds khi l\u1EDDi k\u1EC3 2-3 th\u1EE9 li\u1EC1n nhau. S\u1ED1 anh \u2248 1 m\u1ED7i 6-7 gi\xE2y l\u1EDDi (t\u1ED1i \u0111a 24, KH\xD4NG gi\u1EA3m v\xEC \u0111\xE3 c\xF3 icon), vat \u2264 5, r\u1EA3i \u0110\u1EC0U \u0111\u1EA7u/gi\u1EEFa/cu\u1ED1i (ph\u1EA7n cu\u1ED1i c\u0169ng c\xF3 anh). 3-4 c\u1EA3nh anh \u0111\u1EA7u minh ho\u1EA1 \u0111\xFAng ch\u1EE7 \u0111\u1EC1 c\xE2u m\u1EDF. C\xF3 li\u1EC7t k\xEA: m\u1ED7i m\u1EE5c c\xF3 \u2265 1 anh ho\u1EB7c vat minh ho\u1EA1, kh\xF4ng \u0111\u1EB7t c\u1EA3nh \u0111\xFAng ch\u1ED7 b\u1EAFt \u0111\u1EA7u m\u1EE5c. Kh\xF4ng b\u1ECBa con s\u1ED1. sua = m\u1ECDi ch\u1ED7 nghe nh\u1EA7m t\xEAn ri\xEAng, thu\u1EADt ng\u1EEF, ch\xEDnh t\u1EA3, t\u1ED1i \u0111a 30. L\u1EDDi n\xF3i: ';
17520
17528
  var DE_SUA = 'B\u1EA1n l\xE0 bi\xEAn t\u1EADp vi\xEAn so\xE1t ph\u1EE5 \u0111\u1EC1 ti\u1EBFng Vi\u1EC7t do m\xE1y nghe ch\xE9p l\u1EA1i t\u1EEB m\u1ED9t video n\xF3i tr\u01B0\u1EDBc m\xE1y. T\xECm M\u1ECCI c\u1EE5m b\u1ECB nghe nh\u1EA7m (t\xEAn ri\xEAng, t\xEAn c\xF4ng c\u1EE5, t\u1EEB ti\u1EBFng Anh b\u1ECB phi\xEAn \xE2m, sai d\u1EA5u, t\u1EEB v\xF4 ngh\u0129a so v\u1EDBi ng\u1EEF c\u1EA3nh, con s\u1ED1 \u0111\u1ECDc b\u1EB1ng ch\u1EEF) r\u1ED3i tr\u1EA3 v\u1EC1 \u0110\xDANG M\u1ED8T JSON {"sua":[["c\u1EE5m SAI nguy\xEAn v\u0103n 1-4 t\u1EEB \u0111\xFAng nh\u01B0 trong l\u1EDDi","c\u1EE5m \u0110\xDANG"]]}, t\u1ED1i \u0111a 40 c\u1EB7p, kh\xF4ng gi\u1EA3i th\xEDch. L\u1EDDi: ';
17521
17529
  var DE_CANH = 'B\u1EA1n l\xE0 \u0111\u1EA1o di\u1EC5n h\xECnh cho video d\u1ECDc n\xF3i tr\u01B0\u1EDBc m\xE1y ki\u1EC3u "Top N c\xF4ng c\u1EE5". D\u01B0\u1EDBi \u0111\xE2y l\xE0 l\u1EDDi n\xF3i c\xF3 m\u1ED1c gi\xE2y [gi\xE2y]. H\xE3y l\u1EADp DANH S\xC1CH C\u1EA2NH D\xC0Y: 1 c\u1EA3nh m\u1ED7i 2,5-3,5 gi\xE2y l\u1EDDi, ph\u1EE7 \u0111\u1EC1u t\u1EEB \u0111\u1EA7u t\u1EDBi cu\u1ED1i, m\u1ED7i c\u1EA3nh neo v\xE0o \u0111\xFAng c\u1EE5m t\u1EEB \u0111ang n\xF3i. Tr\u1EA3 v\u1EC1 \u0110\xDANG M\u1ED8T JSON {"canh":[{"tu":"2-4 t\u1EEB NGUY\xCAN V\u0102N li\u1EC1n nhau trong l\u1EDDi","kieu":"anh|vat|chu|so|ds","dong":["kieu ds: 2-3 \xFD NGUY\xCAN V\u0102N \u2264 3 t\u1EEB m\u1ED7i \xFD, \u0111\xFAng th\u1EE9 t\u1EF1 n\xF3i"],"chu":"ch\u1EEF kh\xF3a \u2264 3 t\u1EEB IN HOA t\xF3m \xFD","chu2":"d\xF2ng ph\u1EE5 \u2264 3 t\u1EEB ho\u1EB7c r\u1ED7ng","icon":"tien|dongho|canhbao|tich|bieudo|tim|lua|tenlua|bongden|qua|giohang|nha|sach|dienthoai|cup|khien|la|giot|kinhlup|sai|khong \u2014 bi\u1EC3u t\u01B0\u1EE3ng nh\u1ECF CH\u1EC8 khi \u0111\xFAng ngh\u0129a c\xE2u n\xF3i (vd: t\u1ED1n ti\u1EC1n \u2192 tien; tri\u1EC7u view \u2192 bieudo; xong vi\u1EC7c \u2192 tich), kh\xF4ng ch\u1EAFc \u2192 khong","en":"kieu anh: 1 \u1EA3nh ch\u1EE5p th\u1EADt b\u1EB1ng ti\u1EBFng Anh MINH HO\u1EA0 \u0110\xDANG NGH\u0128A c\u1EE5m \u0111ang n\xF3i (vd \u0111i\u1EC7p vi\xEAn \u0111\u1ED1i th\u1EE7 \u2192 a man in dark hoodie secretly studying competitor ads on several monitors; l\u01B0\u1EDBt \u0111i\u1EC7n tho\u1EA1i \u2192 a woman lying on sofa scrolling her phone), ng\u01B0\u1EDDi Vi\u1EC7t, KH\xD4NG ch\u1EEF; kieu vat: 1 v\u1EADt/bi\u1EC3u t\u01B0\u1EE3ng 3D b\u1EB1ng ti\u1EBFng Anh; chu/so: r\u1ED7ng"}]}, kh\xF4ng gi\u1EA3i th\xEDch. KH\xD4NG \u0111\u1EB7t c\u1EA3nh tr\xF9ng 3 gi\xE2y \u0111\u1EA7u m\u1ED7i m\u1EE5c c\xF4ng c\u1EE5 (\u0111\xE3 c\xF3 th\u1EBB c\xF4ng c\u1EE5); con s\u1ED1 trong l\u1EDDi (x10, 1 ph\xFAt, 2 ng\u01B0\u1EDDi) \u2192 kieu so. anh cho n\u1ED7i \u0111au, b\u1ED1i c\u1EA3nh, \u1EA9n d\u1EE5 (ph\u1EA7n m\u1EDF: 3-4 \u1EA3nh n\u1ED1i nhau); vat cho \u0111\u1ED3 v\u1EADt, bi\u1EC3u t\u01B0\u1EE3ng; chu cho c\xE2u \u0111\u1EAFt; so cho con s\u1ED1 c\xF3 trong l\u1EDDi. Kh\xF4ng b\u1ECBa s\u1ED1. L\u1EDDi: ';
17522
17530
 
@@ -18733,6 +18741,43 @@ async function handleExport(currentProject, setExporting, setExportedBlob, addLo
18733
18741
  });
18734
18742
  } catch (e) {
18735
18743
  }
18744
+ try {
18745
+ const W4 = (window.__wsGocKB || currentProject.speechDraft?.analysis?.words || []).filter((w) => w && w.text && w.t1 > w.t0);
18746
+ if (kb && Array.isArray(kb.canh) && W4.length > 20) {
18747
+ const lo = (x) => String(x || "").toLocaleLowerCase("vi").replace(/[^\p{L}\p{N}\s]/gu, "").trim(), wl = W4.map((w) => lo(w.text));
18748
+ const timTu = (tu) => {
18749
+ const q = lo(tu).split(/\s+/).filter(Boolean).slice(0, 3);
18750
+ if (!q.length) return -1;
18751
+ for (let i = 0; i + q.length <= wl.length; i++) {
18752
+ let ok = true;
18753
+ for (let j = 0; j < q.length; j++) if (wl[i + j] !== q[j]) {
18754
+ ok = false;
18755
+ break;
18756
+ }
18757
+ if (ok) return i;
18758
+ }
18759
+ return -1;
18760
+ };
18761
+ const moc = kb.canh.filter((c) => c && (c.kieu === "anh" || c.kieu === "vat")).map((c) => timTu(c.tu)).filter((i) => i >= 0).map((i) => W4[i].t0).sort((x, y) => x - y), pts = [W4[0].t0 + 3, ...moc, W4[W4.length - 1].t1 - 3];
18762
+ let them = 0;
18763
+ for (let k = 0; k + 1 < pts.length && them < 6; k++) {
18764
+ const a0 = pts[k], b0 = pts[k + 1];
18765
+ if (b0 - a0 < 9) continue;
18766
+ const n = Math.floor((b0 - a0) / 7);
18767
+ for (let m = 1; m <= n && them < 6; m++) {
18768
+ const tm = a0 + (b0 - a0) * m / (n + 1), HU4 = /^(và|với|là|thì|mà|nhưng|rồi|cái|những|các|một|này|đó|chúng|ta|tôi|mình|bạn|em|anh|chị|của|cho|để|nên|vì|cũng|đã|đang|sẽ|có|không|được|rất|thì|ạ|nhé|nha|à|ơi|lại|ra|vào|đi|nó|họ)$/i, i0 = W4.findIndex((w) => w.t0 >= tm);
18769
+ let i = i0;
18770
+ while (i >= 0 && i < i0 + 5 && i < W4.length - 3 && HU4.test(String(W4[i].text).replace(/[.,!?;:…"“”]/g, ""))) i++;
18771
+ if (i < 0 || i + 3 > W4.length) continue;
18772
+ const tu = W4.slice(i, i + 3).map((w) => String(w.text).replace(/[.,!?;:…"“”]/g, "")).join(" "), cau = W4.slice(Math.max(0, i - 5), i + 10).map((w) => w.text).join(" ");
18773
+ kb.canh.push({ tu, kieu: "anh", chu: W4.slice(i, i + 6).map((w) => String(w.text).replace(/[.,!?;:…"“”]/g, "")).filter((x) => !HU4.test(x)).slice(0, 3).join(" ").toLocaleUpperCase("vi"), chu2: "", en: 'Cinematic photorealistic vertical photo that illustrates the meaning of this Vietnamese sentence: "' + cau + '". Vietnamese people, real everyday setting, natural light, no text, no captions.' });
18774
+ them++;
18775
+ }
18776
+ }
18777
+ window.__anhBu = them;
18778
+ }
18779
+ } catch (e) {
18780
+ }
18736
18781
  if (String((() => {
18737
18782
  try {
18738
18783
  return localStorage.getItem("xvaiNguonTram");
@@ -20480,7 +20525,7 @@ async function napLoi(d) {
20480
20525
  return "LOI: " + String(e && e.message || e).slice(0, 300);
20481
20526
  }
20482
20527
  }
20483
- var LOI_URL = "https://cdn.jsdelivr.net/npm/xvai-loi@0.1.58/nap.js";
20528
+ var LOI_URL = "https://cdn.jsdelivr.net/npm/xvai-loi@0.1.60/nap.js";
20484
20529
  var TRONG_LOI = !!globalThis.__xvaiReact;
20485
20530
  try {
20486
20531
  if (!TRONG_LOI) setTimeout(() => {
@@ -20510,7 +20555,7 @@ function datCauLenh(a) {
20510
20555
  on2 = true;
20511
20556
  window.addEventListener("message", async (ev) => {
20512
20557
  const d = ev.data;
20513
- if (!d || d.xvaiLoi111128 !== true) return;
20558
+ if (!d || d.xvaiLoi111242 !== true) return;
20514
20559
  const o = String(ev.origin || "");
20515
20560
  if (!(o.indexOf("https://flow.google.com") === 0 || o.indexOf("https://labs.google") === 0)) return;
20516
20561
  const tra = (kq) => {