FABLESLIP commited on
Commit
995b0ca
·
verified ·
1 Parent(s): ab92b74

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +14 -9
app.py CHANGED
@@ -1790,17 +1790,22 @@ function addThumb(idx, place='append'){
1790
  if(maskedSet.has(idx)) wrap.classList.add('hasmask');
1791
  const img=new Image(); img.title='frame '+(idx+1);
1792
  img.src=timelineUrls[idx];
1793
- img.onerror = () => {
 
 
1794
  const fallback = `/frame_idx?vid=${encodeURIComponent(vidName)}&idx=${idx}`;
1795
- img.onerror = null;
1796
- img.src = fallback;
1797
- img.onload = () => {
 
1798
  const nu = `/thumbs/f_${vidStem}_${idx}.jpg?b=${Date.now()}`;
1799
- timelineUrls[idx] = nu;
1800
- img.src = nu;
1801
- img.onload = null;
 
1802
  };
1803
- };
 
1804
  if(idx===currentIdx){ img.classList.add('sel'); if(isPaused) img.classList.add('sel-strong'); }
1805
  img.onclick=async ()=>{
1806
  currentIdx=idx; player.currentTime=idxToSec(currentIdx);
@@ -1911,7 +1916,7 @@ async function loadVideoAndMeta() {
1911
  fitCanvas();
1912
  statusEl.textContent = 'Chargement vidéo…';
1913
  try{
1914
- metaPromise = fetch('/meta/'+encodeURICompnent(vidName));
1915
  const r = await metaPromise;
1916
  if(r.ok){
1917
  const m=await r.json();
 
1790
  if(maskedSet.has(idx)) wrap.classList.add('hasmask');
1791
  const img=new Image(); img.title='frame '+(idx+1);
1792
  img.src=timelineUrls[idx];
1793
+ // Fallback solide : on affiche /frame_idx tout de suite,
1794
+ // puis on ne bascule vers /thumbs que si elle existe (sonde en tâche de fond).
1795
+ img.addEventListener('error', ()=>{
1796
  const fallback = `/frame_idx?vid=${encodeURIComponent(vidName)}&idx=${idx}`;
1797
+ img.onerror = null; // éviter les boucles d'erreur
1798
+ img.src = fallback; // montrer la frame générée à la volée
1799
+
1800
+ const trySwap = () => {
1801
  const nu = `/thumbs/f_${vidStem}_${idx}.jpg?b=${Date.now()}`;
1802
+ const probe = new Image();
1803
+ probe.onload = () => { timelineUrls[idx] = nu; img.src = nu; };
1804
+ probe.onerror = () => { setTimeout(trySwap, 1500); }; // réessaie plus tard
1805
+ probe.src = nu;
1806
  };
1807
+ setTimeout(trySwap, 1500);
1808
+ }, { once:true });
1809
  if(idx===currentIdx){ img.classList.add('sel'); if(isPaused) img.classList.add('sel-strong'); }
1810
  img.onclick=async ()=>{
1811
  currentIdx=idx; player.currentTime=idxToSec(currentIdx);
 
1916
  fitCanvas();
1917
  statusEl.textContent = 'Chargement vidéo…';
1918
  try{
1919
+ metaPromise = fetch('/meta/'+encodeURIComponent(vidName));
1920
  const r = await metaPromise;
1921
  if(r.ok){
1922
  const m=await r.json();