CineGrid Studio – Extractor HD Pro

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 —

Conectando con la IA…

✅ ¡Copiado al portapapeles!

";}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;x220)) same++;total++;}return total>0&&(same/total)>0.8;}function isLineCol(x){const r0=data[x*4],g0=data[x*4+1],b0=data[x*4+2];let same=0,total=0;const step=Math.max(1,Math.floor(h/35));for(let y=maxMarginY;y220)) same++;total++;}return total>0&&(same/total)>0.8;}let top=0,bottom=h-1,left=0,right=w-1;while(toph-maxMarginY&&isLineRow(bottom)) bottom--;while(leftw-maxMarginX&&isLineCol(right)) right--;const padX=Math.max(2,Math.floor(w*0.015));const padY=Math.max(2,Math.floor(h*0.015));top=Math.min(maxMarginY,top+padY);bottom=Math.max(h-maxMarginY,bottom-padY);left=Math.min(maxMarginX,left+padX);right=Math.max(w-maxMarginX,right-padX);return {x:left,y:top,w:Math.max(10,right-left+1),h:Math.max(10,bottom-top+1)};}window.minilabHandleImage=function(input){if(!input.files||!input.files[0]) return;const file=input.files[0];const status=document.getElementById("minilab-crop-status");const gallery=document.getElementById("minilab-gallery");const dlAll=document.getElementById("minilab-dl-all-wrap");gallery.innerHTML="";croppedShots=[];dlAll.style.display="none";status.style.color="var(--minilab-primary)";status.textContent="Analizando y recortando tomas en HD (Clean Crop)...";const img=new Image();img.onload=function(){const gridN=parseInt(document.getElementById("minilab-grid-structure").value,10)||2;const quality=parseInt(document.getElementById("minilab-quality-select").value,10);const cellW=Math.floor(img.naturalWidth/gridN);const cellH=Math.floor(img.naturalHeight/gridN);const tempCanvas=document.createElement("canvas");const tempCtx=tempCanvas.getContext("2d");tempCanvas.width=cellW;tempCanvas.height=cellH;const outCanvas=document.getElementById("minilab-canvas-output");const outCtx=outCanvas.getContext("2d");const total=gridN*gridN;let done=0;for(let r=0;r0){const scale=quality/rect.h;finalH=quality;finalW=Math.round(rect.w*scale);}outCanvas.width=finalW;outCanvas.height=finalH;outCtx.imageSmoothingEnabled=true;outCtx.imageSmoothingQuality="high";outCtx.drawImage(tempCanvas,rect.x,rect.y,rect.w,rect.h,0,0,finalW,finalH);outCanvas.toBlob(function(blob){const url=URL.createObjectURL(blob);const fileName="toma_"+idx+".jpg";croppedShots.push({url:url,name:fileName});const card=document.createElement("div");card.className="minilab-shot-card";card.innerHTML='

🎬 TOMA '+idx+' ('+finalW+'x'+finalH+')

Toma '+idx+'⬇️ 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();})();