Producción audiovisual híbrida de 360Zaragoza
REAL + IA · HYBRID PRODUCTION

Lo real,
ampliado por IA.

Combinamos producción audiovisual real e inteligencia artificial para crear imágenes, vídeos y campañas con nuevas posibilidades creativas.

360ZARAGOZA / HYBRID

Producción real.
Posibilidades digitales.

Partimos de personas, productos y espacios reales y utilizamos IA solo cuando aporta algo al resultado.

Producción híbrida

No sustituimos lo real.
Lo llevamos más lejos.

Decidimos qué merece ser fotografiado o grabado realmente y dónde la inteligencia artificial puede ampliar el escenario, explorar una idea o aumentar las posibilidades de una producción.

01 / REAL

Autenticidad.

Personas, producto, localizaciones y movimiento capturados mediante fotografía y vídeo profesional.

02 / IA

Posibilidades.

Escenarios, variaciones y elementos generativos que complementan la producción real sin perder su identidad.

Qué podemos hacer

Una producción.
Más posibilidades.

Integramos IA dentro de un flujo audiovisual real, no como un efecto aislado.

01 / VIDEO

Vídeo híbrido

Rodaje real combinado con entornos, elementos y recursos generativos.

02 / IMAGE

Fotografía + IA

Personas o productos reales integrados en nuevos contextos visuales.

03 / CAMPAIGN

Campañas

Una dirección visual aplicada a publicidad, web, vídeo y redes sociales.

04 / VERSIONING

Versionado

Diferentes piezas y formatos a partir de una misma producción.

Dirección creativa y producción audiovisual 360Zaragoza
Dirección creativa

La IA genera.
Nosotros decidimos.

Las herramientas generativas pueden producir cientos de posibilidades.

Nuestro trabajo consiste en dirigirlas, seleccionar lo que funciona y construir una imagen coherente con la marca y con el objetivo de la producción.

La tecnología está al servicio de la idea, no al contrario.
Workflow

De la idea al frame final.

Un proceso audiovisual dirigido de principio a fin.

01

Concepto

Idea, narrativa y dirección visual.

02

Producción

Fotografíamos o grabamos los elementos reales.

03

IA

Generamos únicamente aquello que aporta valor a la pieza.

04

Postproducción

Integramos, refinamos y entregamos el resultado final.

360° Hybrid Production

No se trata de elegir entre real o artificial.

Se trata de utilizar la herramienta adecuada para conseguir la mejor imagen.

360Zaragoza · Hybrid Production

Tienes una idea.
Hagámosla posible.

Cuéntanos qué quieres producir. Diseñaremos la combinación adecuada entre producción real, inteligencia artificial y postproducción.

Artículo añadido al carrito.
0 artículos - 0,00 €
/* ===================================================== YOUTUBE API LOADER No interfiere con otros módulos Z360 ====================================================== */ function getYouTubeAPI() { return new Promise( function (resolve, reject) { if ( window.YT && window.YT.Player ) { resolve( window.YT ); return; } if ( !document.querySelector( 'script[src="https://www.youtube.com/iframe_api"]' ) ) { const script = document.createElement( "script" ); script.src = "https://www.youtube.com/iframe_api"; document.head.appendChild( script ); } let attempts = 0; const timer = window.setInterval( function () { attempts++; if ( window.YT && window.YT.Player ) { window.clearInterval( timer ); resolve( window.YT ); } if (attempts > 150) { window.clearInterval( timer ); reject( new Error( "YouTube API no disponible" ) ); } }, 100 ); } ); } /* ===================================================== INIT ====================================================== */ function initProjectCarousels() { const carousels = document.querySelectorAll( ".z360-project-viewer" ); carousels.forEach( function (carousel, carouselIndex) { initProjectCarousel( carousel, carouselIndex ); } ); } function initProjectCarousel( root, carouselIndex ) { const stage = root.querySelector( ".z360-project-stage" ); const stageContent = root.querySelector( ".z360-project-stage-content" ); const dragLayer = root.querySelector( ".z360-project-drag" ); const title = root.querySelector( ".z360-project-title" ); const kicker = root.querySelector( ".z360-project-kicker" ); const description = root.querySelector( ".z360-project-description" ); const items = Array.from( root.querySelectorAll( ".z360-project-item" ) ); const prev = root.querySelector( ".z360-project-prev" ); const next = root.querySelector( ".z360-project-next" ); const track = root.querySelector( ".z360-project-track" ); if ( !stage || !stageContent || !items.length ) { return; } let activeIndex = 0; let ytPlayer = null; let ytReady = false; let dragging = false; let moved = false; let startX = 0; let startY = 0; let startYaw = 0; let startPitch = 0; let startFov = 100; /* ================================================= DESTROY ACTIVE YOUTUBE PLAYER ================================================= */ function destroyYT() { if ( ytPlayer && typeof ytPlayer.destroy === "function" ) { try { ytPlayer.destroy(); } catch (error) { /* no-op */ } } ytPlayer = null; ytReady = false; } /* ================================================= LOAD PROJECT ================================================= */ function loadProject(index) { if (index < 0) { index = items.length - 1; } if (index >= items.length) { index = 0; } activeIndex = index; const item = items[index]; const type = item.dataset.type; const projectTitle = item.dataset.title || ""; const projectKicker = item.dataset.kicker || ""; const projectDescription = item.dataset.description || ""; destroyYT(); stage.classList.remove( "is-youtube360", "is-dragging", "is-unsupported" ); stageContent.innerHTML = ""; if (title) { title.textContent = projectTitle; } if (kicker) { kicker.textContent = projectKicker; } if (description) { description.textContent = projectDescription; } /* --------------------------------------------- TOUR / GOOGLE / IFRAME --------------------------------------------- */ if (type === "iframe") { const iframe = document.createElement( "iframe" ); iframe.src = item.dataset.src; iframe.title = projectTitle; iframe.loading = "eager"; iframe.allowFullscreen = true; if ( item.dataset.google === "true" ) { iframe.referrerPolicy = "no-referrer-when-downgrade"; } stageContent.appendChild( iframe ); } /* --------------------------------------------- YOUTUBE 360 --------------------------------------------- */ if (type === "youtube360") { stage.classList.add( "is-youtube360" ); const playerId = "z360-youtube360-" + carouselIndex + "-" + Date.now(); const playerElement = document.createElement( "div" ); playerElement.id = playerId; stageContent.appendChild( playerElement ); getYouTubeAPI() .then( function () { ytPlayer = new YT.Player( playerId, { videoId: item.dataset.video, playerVars: { playsinline: 1, rel: 0, controls: 1, modestbranding: 1 }, events: { onReady: function (event) { ytReady = true; /* Forzamos control manual en dispositivos compatibles. */ event.target .setSphericalProperties( { yaw: 0, pitch: 0, roll: 0, fov: 100, enableOrientationSensor: false } ); } } } ); } ) .catch( function () { stage.classList.add( "is-unsupported" ); } ); } /* --------------------------------------------- ACTIVE ITEM --------------------------------------------- */ items.forEach( function ( carouselItem, itemIndex ) { carouselItem .classList .toggle( "is-active", itemIndex === index ); } ); items[index] .scrollIntoView( { behavior: "smooth", block: "nearest", inline: "center" } ); } /* ================================================= ITEM CLICK ================================================= */ items.forEach( function (item, index) { item.addEventListener( "click", function () { loadProject( index ); } ); } ); /* ================================================= ARROWS ================================================= */ if (prev) { prev.addEventListener( "click", function () { loadProject( activeIndex - 1 ); } ); } if (next) { next.addEventListener( "click", function () { loadProject( activeIndex + 1 ); } ); } /* ================================================= DRAG 360 ================================================= */ if (dragLayer) { dragLayer.addEventListener( "pointerdown", function (event) { if ( !ytPlayer || !ytReady ) { return; } const spherical = ytPlayer .getSphericalProperties(); /* Si devuelve {}, YouTube no admite control esférico en ese dispositivo. */ if ( !spherical || typeof spherical.yaw !== "number" ) { stage.classList.add( "is-unsupported" ); return; } dragging = true; moved = false; startX = event.clientX; startY = event.clientY; startYaw = spherical.yaw || 0; startPitch = spherical.pitch || 0; startFov = spherical.fov || 100; stage.classList.add( "is-dragging" ); dragLayer .setPointerCapture( event.pointerId ); event.preventDefault(); } ); dragLayer.addEventListener( "pointermove", function (event) { if (!dragging) { return; } const deltaX = event.clientX - startX; const deltaY = event.clientY - startY; if ( Math.abs(deltaX) > 3 || Math.abs(deltaY) > 3 ) { moved = true; } const yaw = startYaw - deltaX * .18; let pitch = startPitch + deltaY * .18; pitch = Math.max( -85, Math.min( 85, pitch ) ); ytPlayer .setSphericalProperties( { yaw: yaw, pitch: pitch, roll: 0, fov: startFov, enableOrientationSensor: false } ); event.preventDefault(); } ); function stopDrag(event) { if (!dragging) { return; } dragging = false; stage.classList.remove( "is-dragging" ); try { dragLayer .releasePointerCapture( event.pointerId ); } catch (error) { /* no-op */ } } dragLayer.addEventListener( "pointerup", stopDrag ); dragLayer.addEventListener( "pointercancel", stopDrag ); } /* ================================================= INITIAL PROJECT ================================================= */ loadProject(0); } ready( initProjectCarousels ); })();