Boulevard! A Hollywood Story, A Film by Jeffrey Schwarz

Reactor was brought on to animate a series of illustrations by Maurice Vellekoop for this feature documentary. The film follows the real-life story of Dickson Hughes and Richard Stapley—two young songwriters and romantic partners—who are pulled into Gloria Swanson’s plan to adapt Sunset Boulevard into a stage musical. While the film’s production was handled by another team, Reactor’s role was to bring Vellekoop’s artwork to life through subtle animation, adding visual movement to key scenes without altering the original illustrations

NIAC

Reactor created a dynamic animated version of the NIAC logo to bring their brand to life in digital spaces. Designed for use in video intros and presentations, the animation adds subtle motion and polish while maintaining the integrity of the original identity. Clean, modern, and professional—this short piece helps NIAC make a strong first impression wherever it appears.

À travers une offre soignée, unique casino login parvient à se positionner comme une référence régionale. Les promotions transversales associent casino classique et live pour multiplier les opportunités. Les niveaux de difficulté ajustables ouvrent l’expérience à tous les profils sans exception. Les versions démo permettent de tester chaque jeu sans engager le moindre euro. Le site s’adapte automatiquement à la taille de l’écran pour conserver lisibilité et confort. L’ergonomie générale témoigne d’un travail de design poussé et orienté utilisateur. Les transactions sont contrôlées par un système anti-fraude en temps réel. Les limites de mise sur les tables live s’adaptent aussi bien aux petits joueurs qu’aux high rollers. Les frais sur les opérations financières sont nuls ou réduits selon le mode choisi. Les tickets envoyés par e-mail reçoivent une réponse circonstanciée dans des délais courts. Les bonus sans condition de mise sont proposés ponctuellement, offrant une liberté totale aux joueurs. Les évolutions techniques régulières témoignent d’un investissement continu dans la qualité. Les variantes régionales de roulette et de blackjack complètent une sélection déjà très riche. Le mode portrait comme le mode paysage sont parfaitement supportés pour le confort visuel. L’interface privilégie la clarté avec une organisation lisible et des menus accessibles. Les outils de jeu responsable comprennent limites de dépôts, alertes et auto-exclusion temporaire. Les statistiques détaillées des dernières parties s’affichent en temps réel à côté des tables. Les seuils de dépôt et de retrait restent flexibles afin de s’adapter à différents profils de joueurs. Le support technique est compétent et résout efficacement les éventuels problèmes rencontrés. Cette proposition s’impose progressivement comme une référence solide du jeu francophone. L’ensemble des retours utilisateurs converge vers un même constat : l’expérience est à la hauteur des promesses.

BLACK BELLOWS BREWERY

Reactor created a series of animated GIFs for Black Bellows Brewing to promote their lineup of beers on social media. Each GIF features a crushed version of the can artwork—looped with movement and texture to bring energy to the brand’s bold visual style. Designed to be quick, eye-catching, and shareable, the animations give Black Bellows a fun and gritty way to show off their brews across digital platforms.

INTERACTIVE

Reactor's Artists in Focus: Mix + Match!

Top
Middle
Bottom
// Game 1: Original imageSets const imageSets = [ { top: 'https://www.reactorart.com/avada/wp-content/uploads/2026/05/top1.jpg', middle: 'https://www.reactorart.com/avada/wp-content/uploads/2026/05/middle1.jpg', bottom: 'https://www.reactorart.com/avada/wp-content/uploads/2026/05/bottom1.jpg', artist: 'Jamie Bennett' }, { top: 'https://www.reactorart.com/avada/wp-content/uploads/2026/05/top2.jpg', middle: 'https://www.reactorart.com/avada/wp-content/uploads/2026/05/middle2.jpg', bottom: 'https://www.reactorart.com/avada/wp-content/uploads/2026/05/bottom2.jpg', artist: 'Clayton Hanmer' }, { top: 'https://www.reactorart.com/avada/wp-content/uploads/2026/05/top3.jpg', middle: 'https://www.reactorart.com/avada/wp-content/uploads/2026/05/middle3.jpg', bottom: 'https://www.reactorart.com/avada/wp-content/uploads/2026/05/bottom3.jpg', artist: 'Fiona Smyth' }, { top: 'https://www.reactorart.com/avada/wp-content/uploads/2026/05/top4.jpg', middle: 'https://www.reactorart.com/avada/wp-content/uploads/2026/05/middle4.jpg', bottom: 'https://www.reactorart.com/avada/wp-content/uploads/2026/05/bottom4.jpg', artist: 'Maurice Vellekoop' }, { top: 'https://www.reactorart.com/avada/wp-content/uploads/2026/05/top5.jpg', middle: 'https://www.reactorart.com/avada/wp-content/uploads/2026/05/middle5.jpg', bottom: 'https://www.reactorart.com/avada/wp-content/uploads/2026/05/bottom5.jpg', artist: 'Tracey Wood' } ]; // Game 2: New imageSets const imageSets2 = [ { top: 'images/top1-2.jpg', middle: 'images/middle1-2.jpg', bottom: 'images/bottom1-2.jpg', artist: 'Jeff Jackson' }, { top: 'images/top2-2.jpg', middle: 'images/middle2-2.jpg', bottom: 'images/bottom2-2.jpg', artist: 'Barbara Klunder' }, { top: 'images/top3-2.jpg', middle: 'images/middle3-2.jpg', bottom: 'images/bottom3-2.jpg', artist: 'Bill Russell' }, { top: 'images/top4-2.jpg', middle: 'images/middle4-2.jpg', bottom: 'images/bottom4-2.jpg', artist: 'Alena Skarina' }, { top: 'images/top5-2.jpg', middle: 'images/middle5-2.jpg', bottom: 'images/bottom5-2.jpg', artist: 'James Turner' } ]; function setupGame1() { setupGame(imageSets); } function setupGame2() { setupGame(imageSets2); } // Universal Game Setup Function function setupGame(imageSet) { let tops, middles, bottoms, artistMap; let topIndex = 0, middleIndex = 0, bottomIndex = 0; window.shuffleAndReset = function() { tops = imageSet.map(set => set.top); middles = imageSet.map(set => set.middle); bottoms = imageSet.map(set => set.bottom); shuffleArray(tops); shuffleArray(middles); shuffleArray(bottoms); topIndex = 0; middleIndex = 0; bottomIndex = 0; updateImages(); removeArtistName(); artistMap = {}; imageSet.forEach(set => { const matchKey = `${set.top}-${set.middle}-${set.bottom}`; artistMap[matchKey] = set.artist; }); }; // Expose the changePart function globally window.changePart = function(part, direction) { console.log(`changePart called with part: ${part}, direction: ${direction}`); if (part === 'top') { topIndex = changeIndex(topIndex, tops.length, direction); } else if (part === 'middle') { middleIndex = changeIndex(middleIndex, middles.length, direction); } else if (part === 'bottom') { bottomIndex = changeIndex(bottomIndex, bottoms.length, direction); } updateImages(); checkMatch(); } function changeIndex(index, length, direction) { console.log(`Before changeIndex: index = ${index}, length = ${length}, direction = ${direction}`); if (direction === 'next') { index = (index + 1) % length; } else if (direction === 'prev') { index = (index - 1 + length) % length; } console.log(`After changeIndex: index = ${index}`); return index; } function updateImages() { console.log("Updating images"); document.getElementById('top').src = tops[topIndex]; document.getElementById('middle').src = middles[middleIndex]; document.getElementById('bottom').src = bottoms[bottomIndex]; console.log("Top image:", tops[topIndex]); console.log("Middle image:", middles[middleIndex]); console.log("Bottom image:", bottoms[bottomIndex]); } function checkMatch() { const topImage = tops[topIndex]; const middleImage = middles[middleIndex]; const bottomImage = bottoms[bottomIndex]; const matchKey = `${topImage}-${middleImage}-${bottomImage}`; if (artistMap[matchKey]) { displayArtistName(artistMap[matchKey]); } else { removeArtistName(); } } function displayArtistName(artistName) { const artistNameElement = document.querySelector('.artist-name'); artistNameElement.innerHTML = `Artwork by: ${artistName}`; artistNameElement.style.visibility = 'visible'; } function removeArtistName() { const artistNameElement = document.querySelector('.artist-name'); artistNameElement.style.visibility = 'hidden'; } shuffleAndReset(); } // Detect the game to initialize if (document.body.classList.contains('game-1')) { setupGame1(); } else if (document.body.classList.contains('game-2')) { setupGame2(); } // Utility function for shuffling an array function shuffleArray(array) { for (let i = array.length - 1; i > 0; i--) { const j = Math.floor(Math.random() * (i + 1)); [array[i], array[j]] = [array[j], array[i]]; } }