CineGrid Extractor Lab
Generador de Prompts de Cine con IA + Extractor de Grillas en HD (2×2, 3×3, 4×4).
— o si no tienes una idea clara —
Generador de Prompts de Cine con IA + Extractor de Grillas en HD (2×2, 3×3, 4×4).
— o si no tienes una idea clara —
";}else{hint.style.display="none";}};function showLoading(msg){document.getElementById("minilab-error").style.display="none";document.getElementById("minilab-step-1").style.display="none";document.getElementById("minilab-step-2").style.display="none";document.getElementById("minilab-step-3").style.display="none";document.getElementById("minilab-loading-text").textContent=msg||"Conectando con la IA...";document.getElementById("minilab-loading").style.display="block";}function showError(msg){document.getElementById("minilab-loading").style.display="none";const err=document.getElementById("minilab-error");err.textContent="⚠️ "+msg;err.style.display="block";document.getElementById("minilab-step-1").style.display="block";}window.minilabGenerateDirect=async function(){const mode=document.getElementById("minilab-mode-select").value;const rawIdea=document.getElementById("minilab-model-input").value.trim();const ideaText=rawIdea||"Un explorador solitario descubriendo una reliquia luminosa dentro de una cueva lluviosa hiperrealista.";const baseTemplate=PROMPT_LIBRARY[mode]||PROMPT_LIBRARY["2x2_std"];const targetPlaceholder=(mode==="x_prompt_pro_grok")?PLACEHOLDER_X:PLACEHOLDER_STD;const fullInstruction=baseTemplate.replace(targetPlaceholder,ideaText);showLoading("Diseñando dirección de cámara, continuidad y grilla con IA...");try{const aiResponse=await callGeminiAPI(fullInstruction);document.getElementById("minilab-loading").style.display="none";document.getElementById("minilab-result-box").value=aiResponse;document.getElementById("minilab-step-3").style.display="block";}catch(err){document.getElementById("minilab-loading").style.display="none";document.getElementById("minilab-result-box").value=fullInstruction;document.getElementById("minilab-step-3").style.display="block";}};window.minilabCopyMasterTemplate=function(){const mode=document.getElementById("minilab-mode-select").value;const rawIdea=document.getElementById("minilab-model-input").value.trim()||"Un astronauta caminando por un desierto rojo bajo una tormenta de arena...";const baseTemplate=PROMPT_LIBRARY[mode]||PROMPT_LIBRARY["2x2_std"];const targetPlaceholder=(mode==="x_prompt_pro_grok")?PLACEHOLDER_X:PLACEHOLDER_STD;const finalMaster=baseTemplate.replace(targetPlaceholder,rawIdea);document.getElementById("minilab-step-1").style.display="none";document.getElementById("minilab-result-box").value=finalMaster;document.getElementById("minilab-step-3").style.display="block";window.minilabCopy();};window.minilabGenerateIdeas=async function(){const userHint=document.getElementById("minilab-model-input").value.trim();showLoading("Generando 10 ideas cinematográficas hiperrealistas con IA...");const promptIdeas="Actúa como un director de cine AAA. Genera una lista numerada del 1 al 10 con 10 ideas de escenas cinematográficas hiperrealistas impactantes, variadas y llenas de tensión visual ideales para grillas de storyboard (2x2, 3x3 o 4x4)."+(userHint?(" Inspírate en esta temática: "+userHint+"."):"")+" Responde ÚNICAMENTE con la lista numerada del 1 al 10 en español (máximo 2 líneas por idea).";try{const ideasText=await callGeminiAPI(promptIdeas);chatHistory=[{ideas:ideasText}];document.getElementById("minilab-loading").style.display="none";document.getElementById("minilab-ideas-box").value=ideasText;document.getElementById("minilab-step-2").style.display="block";}catch(e){showError("No se pudo conectar con la IA en este momento. Intenta de nuevo.");}};window.minilabGenerateFinalPrompt=async function(){const num=parseInt(document.getElementById("minilab-number-input").value,10);const ideasList=document.getElementById("minilab-ideas-box").value;if(!num||num<1||num>10){alert("Por favor, escribe un número válido del 1 al 10.");return;}const mode=document.getElementById("minilab-mode-select").value;const baseTemplate=PROMPT_LIBRARY[mode]||PROMPT_LIBRARY["2x2_std"];const targetPlaceholder=(mode==="x_prompt_pro_grok")?PLACEHOLDER_X:PLACEHOLDER_STD;const combinedPrompt=baseTemplate.replace(targetPlaceholder,"De la siguiente lista de ideas:\n"+ideasList+"\n\nDesarrolla exclusivamente la IDEA NÚMERO "+num+".");showLoading("Fabricando el Mega-Prompt Cinematográfico para la idea #"+num+"...");try{const finalOutput=await callGeminiAPI(combinedPrompt);document.getElementById("minilab-loading").style.display="none";document.getElementById("minilab-result-box").value=finalOutput;document.getElementById("minilab-step-3").style.display="block";}catch(e){document.getElementById("minilab-loading").style.display="none";document.getElementById("minilab-result-box").value=combinedPrompt;document.getElementById("minilab-step-3").style.display="block";}};window.minilabCopy=function(){const box=document.getElementById("minilab-result-box");if(!box||!box.value) return;if(navigator.clipboard&&window.isSecureContext){navigator.clipboard.writeText(box.value).then(function(){showToast("✅ ¡Copiado al portapapeles!");});}else{box.select();try{document.execCommand("copy");showToast("✅ ¡Copiado al portapapeles!");}catch(e){}}};window.minilabReset=function(){document.getElementById("minilab-error").style.display="none";document.getElementById("minilab-loading").style.display="none";document.getElementById("minilab-step-2").style.display="none";document.getElementById("minilab-step-3").style.display="none";document.getElementById("minilab-step-1").style.display="block";};function smartCleanCrop(ctx,w,h){const data=ctx.getImageData(0,0,w,h).data;const maxMarginX=Math.floor(w*0.06);const maxMarginY=Math.floor(h*0.06);function isLineRow(y){const r0=data[(y*w)*4],g0=data[(y*w)*4+1],b0=data[(y*w)*4+2];let same=0,total=0;const step=Math.max(1,Math.floor(w/35));for(let x=maxMarginX;x
⬇️ Descargar Toma '+idx+'';gallery.appendChild(card);done++;if(done===total){status.style.color="var(--minilab-success)";status.textContent="✅ ¡"+total+" tomas extraídas en HD exitosamente!";dlAll.style.display="block";showToast("🎞️ ¡Grilla separada en "+total+" tomas HD!");}},"image/jpeg",0.95);})(r,c,(r*gridN)+c+1);}}input.value="";};img.src=URL.createObjectURL(file);};window.minilabDownloadAll=function(){if(!croppedShots.length) return;showToast("📦 Descargando "+croppedShots.length+" tomas...");croppedShots.forEach(function(shot,i){setTimeout(function(){const link=document.createElement("a");link.href=shot.url;link.download=shot.name;document.body.appendChild(link);link.click();document.body.removeChild(link);},i*350);});};function showToast(msg){const t=document.getElementById("minilab-toast");if(!t) return;t.textContent=msg;t.classList.add("show");setTimeout(function(){t.classList.remove("show");},2500);}window.minilabOnModeChange();})();