Mad Potato Studios it takes a long time to become more subtle
Support the making of "Whispers of the sun"
(() => { const decks = document.querySelectorAll('.whispers-deck'); decks.forEach(deck => { const cards = [...deck.querySelectorAll('.deck-card')]; const hitArea = deck.querySelector('.deck-hit-area'); let activeIndex = 0; let dragging = false; let dragMoved = false; let startY = 0; let startIndex = 0; /* =================================== SET CARD POSITIONS =================================== */ cards.forEach((card, index) => { card.style.setProperty( '--index', index ); }); /* =================================== CALCULATE PEEK SIZE =================================== */ function calculatePeek() { const styles = getComputedStyle(deck); const stackDepth = parseFloat( styles.getPropertyValue( '--stack-depth' ) ); const peek = cards.length > 1 ? stackDepth / (cards.length - 1) : 0; deck.style.setProperty( '--peek', `${peek}px` ); } calculatePeek(); /* =================================== ACTIVATE CARD =================================== */ function activate(index) { index = Math.max( 0, Math.min( cards.length - 1, index ) ); activeIndex = index; cards.forEach( (card, cardIndex) => { card.classList.toggle( 'active', cardIndex === activeIndex ); } ); } /* =================================== DESKTOP HOVER =================================== */ hitArea.addEventListener( 'mousemove', event => { const canHover = window.matchMedia( '(hover: hover)' ).matches; if (!canHover) return; const rect = deck.getBoundingClientRect(); const imageHeight = deck.clientWidth * 9 / 16; const y = event.clientY - rect.top; const peek = parseFloat( getComputedStyle(deck) .getPropertyValue('--peek') ); if ( y < imageHeight - peek ) { return; } let index = Math.floor( ( y - (imageHeight - peek) ) / peek ); index = Math.max( 0, Math.min( cards.length - 1, index ) ); activate(index); } ); /* =================================== DESKTOP CLICK =================================== */ hitArea.addEventListener( 'click', () => { const canHover = window.matchMedia( '(hover: hover)' ).matches; if (!canHover) return; window.location.href = deck.dataset.href; } ); /* =================================== MOBILE PRESS + DRAG =================================== */ hitArea.addEventListener( 'pointerdown', event => { if (event.pointerType === 'mouse') return; dragging = true; dragMoved = false; startY = event.clientY; startIndex = activeIndex; hitArea.setPointerCapture( event.pointerId ); } ); hitArea.addEventListener( 'pointermove', event => { if (!dragging) return; if (event.pointerType === 'mouse') return; const difference = event.clientY - startY; const step = 28; if ( Math.abs(difference) > 6 ) { dragMoved = true; } const change = Math.round( difference / step ); activate( startIndex + change ); } ); /* =================================== MOBILE RELEASE =================================== */ hitArea.addEventListener( 'pointerup', event => { if (event.pointerType === 'mouse') return; if (!dragging) return; dragging = false; try { hitArea.releasePointerCapture( event.pointerId ); } catch (error) {} if (!dragMoved) { window.location.href = deck.dataset.href; } } ); hitArea.addEventListener( 'pointercancel', () => { dragging = false; } ); /* =================================== KEYBOARD =================================== */ deck.addEventListener( 'keydown', event => { if ( event.key === 'Enter' || event.key === ' ' ) { event.preventDefault(); window.location.href = deck.dataset.href; } } ); /* =================================== RESIZE =================================== */ window.addEventListener( 'resize', calculatePeek ); }); })();
What if the people trying hardest to protect us are the ones causing the greatest harm?
This is a film about childhood, fear, friendship, and the courage to question the people we trust most. We don't believe films are made by directors alone. If Whispers of the Sun speaks to you, we'd love to invite you to help bring it to life. (() => { const script = document.currentScript; const tracker = script.parentElement.querySelector( '.funding-tracker' ); if (!tracker) return; const raised = Number( tracker.dataset.raised ) || 0; const goal = Number( tracker.dataset.goal ) || 7132; const safeRaised = Math.max( 0, raised ); const percentage = Math.min( 100, Math.round( (safeRaised / goal) * 100 ) ); const remaining = Math.max( 0, goal - safeRaised ); const currency = value => new Intl.NumberFormat( 'en-GB', { style: 'currency', currency: 'GBP', maximumFractionDigits: 0 } ).format(value); const raisedElement = tracker.querySelector( '.raised-amount' ); const goalElement = tracker.querySelector( '.funding-goal' ); const percentageElement = tracker.querySelector( '.funding-percent' ); const remainingElement = tracker.querySelector( '.funding-remaining' ); const fill = tracker.querySelector( '.funding-fill' ); const bar = tracker.querySelector( '.funding-bar' ); raisedElement.textContent = currency( safeRaised ); goalElement.textContent = `raised of ${currency(goal)}`; percentageElement.textContent = `${percentage}%`; remainingElement.textContent = remaining > 0 ? `${currency(remaining)} remaining` : 'Goal reached'; bar.setAttribute( 'aria-valuemax', String(goal) ); bar.setAttribute( 'aria-valuenow', String(safeRaised) ); window.requestAnimationFrame( () => { fill.style.width = `${percentage}%`; } ); })();
(() => { const originalScript = document.currentScript; const embed = originalScript.closest('.embed') || originalScript.parentElement; const preview = embed?.querySelector('.film-preview'); if (!preview) return; const iframe = preview.querySelector('.film-video'); const soundButton = preview.querySelector('.sound-toggle'); const mutedIcon = preview.querySelector('.sound-icon-muted'); const unmutedIcon = preview.querySelector('.sound-icon-unmuted'); let player = null; let isMuted = true; let isPlaying = false; let resetTimer = null; let mobileObserver = null; const isDesktop = () => window.matchMedia( '(hover: hover) and (pointer: fine) and (min-width: 901px)' ).matches; const isMobileLike = () => window.matchMedia( '(pointer: coarse), (hover: none), (max-width: 900px)' ).matches; const loadVimeoSDK = () => { if (window.Vimeo?.Player) { return Promise.resolve(); } return new Promise((resolve, reject) => { const existing = document.querySelector( 'script[src="https://player.vimeo.com/api/player.js"]' ); if (existing) { if (window.Vimeo?.Player) { resolve(); return; } existing.addEventListener( 'load', resolve, { once: true } ); existing.addEventListener( 'error', reject, { once: true } ); return; } const sdk = document.createElement('script'); sdk.src = 'https://player.vimeo.com/api/player.js'; sdk.onload = resolve; sdk.onerror = reject; document.head.appendChild(sdk); }); }; const updateSoundButton = () => { mutedIcon.classList.toggle( 'is-visible', isMuted ); unmutedIcon.classList.toggle( 'is-visible', !isMuted ); const label = isMuted ? 'Unmute trailer' : 'Mute trailer'; soundButton.setAttribute( 'aria-label', label ); soundButton.setAttribute( 'title', label ); }; const stopOtherPreviews = () => { document .querySelectorAll( '.film-preview.is-playing' ) .forEach(otherPreview => { if (otherPreview === preview) { return; } otherPreview.classList.remove( 'is-playing' ); const otherIframe = otherPreview.querySelector( '.film-video' ); if ( otherIframe && window.Vimeo?.Player ) { const otherPlayer = new Vimeo.Player(otherIframe); otherPlayer.pause().catch(() => {}); otherPlayer .setCurrentTime(0) .catch(() => {}); } }); }; const playPreview = async ({ useSavedSound = false } = {}) => { if (!player || isPlaying) return; if (resetTimer) { window.clearTimeout(resetTimer); resetTimer = null; } stopOtherPreviews(); const savedSound = sessionStorage.getItem( 'filmPreviewSound' ) === 'on'; isMuted = !(useSavedSound && savedSound); try { await player.setMuted(isMuted); await player.play(); isPlaying = true; preview.classList.add( 'is-playing' ); updateSoundButton(); } catch (error) { try { isMuted = true; await player.setMuted(true); await player.play(); isPlaying = true; preview.classList.add( 'is-playing' ); updateSoundButton(); } catch (secondError) { isPlaying = false; console.log( 'Vimeo preview could not play.', secondError ); } } }; const stopPreview = () => { if (!player) return; preview.classList.remove( 'is-playing' ); isPlaying = false; if (resetTimer) { window.clearTimeout(resetTimer); } resetTimer = window.setTimeout(async () => { try { await player.pause(); await player.setCurrentTime(0); } catch { /* Vimeo may not yet be seekable. */ } resetTimer = null; }, 320); }; const setupDesktopBehaviour = () => { preview.addEventListener( 'mouseenter', () => { if (!isDesktop()) return; playPreview({ useSavedSound: true }); } ); preview.addEventListener( 'mouseleave', event => { if (!isDesktop()) return; if ( event.relatedTarget && preview.contains( event.relatedTarget ) ) { return; } stopPreview(); } ); }; const setupMobileAutoplay = () => { if (!('IntersectionObserver' in window)) { return; } mobileObserver = new IntersectionObserver( entries => { entries.forEach(entry => { if (!isMobileLike()) return; if ( entry.isIntersecting && entry.intersectionRatio >= 0.45 ) { playPreview({ useSavedSound: false }); } else if ( !entry.isIntersecting || entry.intersectionRatio <= 0.15 ) { stopPreview(); } }); }, { root: null, rootMargin: '0px', threshold: [ 0, 0.15, 0.3, 0.45, 0.65, 1 ] } ); mobileObserver.observe(preview); }; soundButton.addEventListener( 'click', async event => { event.preventDefault(); event.stopPropagation(); if (!player) return; isMuted = !isMuted; try { await player.setMuted(isMuted); sessionStorage.setItem( 'filmPreviewSound', isMuted ? 'off' : 'on' ); updateSoundButton(); if (!isPlaying) { await player.play(); isPlaying = true; preview.classList.add( 'is-playing' ); } } catch (error) { isMuted = true; await player .setMuted(true) .catch(() => {}); updateSoundButton(); console.log( 'Vimeo sound could not be changed.', error ); } } ); preview.addEventListener( 'click', event => { if ( event.target.closest( '.sound-toggle' ) ) { event.preventDefault(); } } ); document.addEventListener( 'visibilitychange', () => { if (document.hidden) { stopPreview(); } } ); const initialisePreview = async () => { try { await loadVimeoSDK(); } catch (error) { console.log( 'Vimeo Player SDK failed to load.', error ); return; } player = new Vimeo.Player(iframe); try { await player.ready(); await player.setMuted(true); } catch (error) { console.log( 'Vimeo player could not initialise.', error ); return; } isMuted = true; isPlaying = false; updateSoundButton(); setupDesktopBehaviour(); setupMobileAutoplay(); }; updateSoundButton(); initialisePreview(); })(); Retirement Bonus
Watch Retirement Bonus, our latest short about a footballer's worth after a career ending injury. Available through this exclusive film pack, alongside other production materials. Click below to explore. Why I Stay In My Bag
Our latest haunting drama, Why I Stay in My Bag, is available through this exclusive pack. Click below to explore the short and the extra materials that come with it.
(() => { const originalScript = document.currentScript; const embed = originalScript.closest('.embed') || originalScript.parentElement; const preview = embed?.querySelector('.film-preview'); if (!preview) return; const iframe = preview.querySelector('.film-video'); const soundButton = preview.querySelector('.sound-toggle'); const mutedIcon = preview.querySelector('.sound-icon-muted'); const unmutedIcon = preview.querySelector('.sound-icon-unmuted'); let player = null; let isMuted = true; let isPlaying = false; let resetTimer = null; let mobileObserver = null; const isDesktop = () => window.matchMedia( '(hover: hover) and (pointer: fine) and (min-width: 901px)' ).matches; const isMobileLike = () => window.matchMedia( '(pointer: coarse), (hover: none), (max-width: 900px)' ).matches; const loadVimeoSDK = () => { if (window.Vimeo?.Player) { return Promise.resolve(); } return new Promise((resolve, reject) => { const existing = document.querySelector( 'script[src="https://player.vimeo.com/api/player.js"]' ); if (existing) { if (window.Vimeo?.Player) { resolve(); return; } existing.addEventListener( 'load', resolve, { once: true } ); existing.addEventListener( 'error', reject, { once: true } ); return; } const sdk = document.createElement('script'); sdk.src = 'https://player.vimeo.com/api/player.js'; sdk.onload = resolve; sdk.onerror = reject; document.head.appendChild(sdk); }); }; const updateSoundButton = () => { mutedIcon.classList.toggle( 'is-visible', isMuted ); unmutedIcon.classList.toggle( 'is-visible', !isMuted ); const label = isMuted ? 'Unmute trailer' : 'Mute trailer'; soundButton.setAttribute( 'aria-label', label ); soundButton.setAttribute( 'title', label ); }; const stopOtherPreviews = () => { document .querySelectorAll( '.film-preview.is-playing' ) .forEach(otherPreview => { if (otherPreview === preview) { return; } otherPreview.classList.remove( 'is-playing' ); const otherIframe = otherPreview.querySelector( '.film-video' ); if ( otherIframe && window.Vimeo?.Player ) { const otherPlayer = new Vimeo.Player(otherIframe); otherPlayer.pause().catch(() => {}); otherPlayer .setCurrentTime(0) .catch(() => {}); } }); }; const playPreview = async ({ useSavedSound = false } = {}) => { if (!player || isPlaying) return; if (resetTimer) { window.clearTimeout(resetTimer); resetTimer = null; } stopOtherPreviews(); const savedSound = sessionStorage.getItem( 'filmPreviewSound' ) === 'on'; isMuted = !(useSavedSound && savedSound); try { await player.setMuted(isMuted); await player.play(); isPlaying = true; preview.classList.add( 'is-playing' ); updateSoundButton(); } catch (error) { try { isMuted = true; await player.setMuted(true); await player.play(); isPlaying = true; preview.classList.add( 'is-playing' ); updateSoundButton(); } catch (secondError) { isPlaying = false; console.log( 'Vimeo preview could not play.', secondError ); } } }; const stopPreview = () => { if (!player) return; preview.classList.remove( 'is-playing' ); isPlaying = false; if (resetTimer) { window.clearTimeout(resetTimer); } resetTimer = window.setTimeout(async () => { try { await player.pause(); await player.setCurrentTime(0); } catch { /* Vimeo may not yet be seekable. */ } resetTimer = null; }, 320); }; const setupDesktopBehaviour = () => { preview.addEventListener( 'mouseenter', () => { if (!isDesktop()) return; playPreview({ useSavedSound: true }); } ); preview.addEventListener( 'mouseleave', event => { if (!isDesktop()) return; if ( event.relatedTarget && preview.contains( event.relatedTarget ) ) { return; } stopPreview(); } ); }; const setupMobileAutoplay = () => { if (!('IntersectionObserver' in window)) { return; } mobileObserver = new IntersectionObserver( entries => { entries.forEach(entry => { if (!isMobileLike()) return; if ( entry.isIntersecting && entry.intersectionRatio >= 0.45 ) { playPreview({ useSavedSound: false }); } else if ( !entry.isIntersecting || entry.intersectionRatio <= 0.15 ) { stopPreview(); } }); }, { root: null, rootMargin: '0px', threshold: [ 0, 0.15, 0.3, 0.45, 0.65, 1 ] } ); mobileObserver.observe(preview); }; soundButton.addEventListener( 'click', async event => { event.preventDefault(); event.stopPropagation(); if (!player) return; isMuted = !isMuted; try { await player.setMuted(isMuted); sessionStorage.setItem( 'filmPreviewSound', isMuted ? 'off' : 'on' ); updateSoundButton(); if (!isPlaying) { await player.play(); isPlaying = true; preview.classList.add( 'is-playing' ); } } catch (error) { isMuted = true; await player .setMuted(true) .catch(() => {}); updateSoundButton(); console.log( 'Vimeo sound could not be changed.', error ); } } ); preview.addEventListener( 'click', event => { if ( event.target.closest( '.sound-toggle' ) ) { event.preventDefault(); } } ); document.addEventListener( 'visibilitychange', () => { if (document.hidden) { stopPreview(); } } ); const initialisePreview = async () => { try { await loadVimeoSDK(); } catch (error) { console.log( 'Vimeo Player SDK failed to load.', error ); return; } player = new Vimeo.Player(iframe); try { await player.ready(); await player.setMuted(true); } catch (error) { console.log( 'Vimeo player could not initialise.', error ); return; } isMuted = true; isPlaying = false; updateSoundButton(); setupDesktopBehaviour(); setupMobileAutoplay(); }; updateSoundButton(); initialisePreview(); })();
(() => { const originalScript = document.currentScript; const embed = originalScript.closest('.embed') || originalScript.parentElement; const preview = embed?.querySelector('.film-preview'); if (!preview) return; const iframe = preview.querySelector('.film-video'); const soundButton = preview.querySelector('.sound-toggle'); const mutedIcon = preview.querySelector('.sound-icon-muted'); const unmutedIcon = preview.querySelector('.sound-icon-unmuted'); let player = null; let isMuted = true; let isPlaying = false; let resetTimer = null; let mobileObserver = null; const isDesktop = () => window.matchMedia( '(hover: hover) and (pointer: fine) and (min-width: 901px)' ).matches; const isMobileLike = () => window.matchMedia( '(pointer: coarse), (hover: none), (max-width: 900px)' ).matches; const loadVimeoSDK = () => { if (window.Vimeo?.Player) { return Promise.resolve(); } return new Promise((resolve, reject) => { const existing = document.querySelector( 'script[src="https://player.vimeo.com/api/player.js"]' ); if (existing) { if (window.Vimeo?.Player) { resolve(); return; } existing.addEventListener( 'load', resolve, { once: true } ); existing.addEventListener( 'error', reject, { once: true } ); return; } const sdk = document.createElement('script'); sdk.src = 'https://player.vimeo.com/api/player.js'; sdk.onload = resolve; sdk.onerror = reject; document.head.appendChild(sdk); }); }; const updateSoundButton = () => { mutedIcon.classList.toggle( 'is-visible', isMuted ); unmutedIcon.classList.toggle( 'is-visible', !isMuted ); const label = isMuted ? 'Unmute trailer' : 'Mute trailer'; soundButton.setAttribute( 'aria-label', label ); soundButton.setAttribute( 'title', label ); }; const stopOtherPreviews = () => { document .querySelectorAll( '.film-preview.is-playing' ) .forEach(otherPreview => { if (otherPreview === preview) { return; } otherPreview.classList.remove( 'is-playing' ); const otherIframe = otherPreview.querySelector( '.film-video' ); if ( otherIframe && window.Vimeo?.Player ) { const otherPlayer = new Vimeo.Player(otherIframe); otherPlayer.pause().catch(() => {}); otherPlayer .setCurrentTime(0) .catch(() => {}); } }); }; const playPreview = async ({ useSavedSound = false } = {}) => { if (!player || isPlaying) return; if (resetTimer) { window.clearTimeout(resetTimer); resetTimer = null; } stopOtherPreviews(); const savedSound = sessionStorage.getItem( 'filmPreviewSound' ) === 'on'; isMuted = !(useSavedSound && savedSound); try { await player.setMuted(isMuted); await player.play(); isPlaying = true; preview.classList.add( 'is-playing' ); updateSoundButton(); } catch (error) { try { isMuted = true; await player.setMuted(true); await player.play(); isPlaying = true; preview.classList.add( 'is-playing' ); updateSoundButton(); } catch (secondError) { isPlaying = false; console.log( 'Vimeo preview could not play.', secondError ); } } }; const stopPreview = () => { if (!player) return; preview.classList.remove( 'is-playing' ); isPlaying = false; if (resetTimer) { window.clearTimeout(resetTimer); } resetTimer = window.setTimeout(async () => { try { await player.pause(); await player.setCurrentTime(0); } catch { /* Vimeo may not yet be seekable. */ } resetTimer = null; }, 320); }; const setupDesktopBehaviour = () => { preview.addEventListener( 'mouseenter', () => { if (!isDesktop()) return; playPreview({ useSavedSound: true }); } ); preview.addEventListener( 'mouseleave', event => { if (!isDesktop()) return; if ( event.relatedTarget && preview.contains( event.relatedTarget ) ) { return; } stopPreview(); } ); }; const setupMobileAutoplay = () => { if (!('IntersectionObserver' in window)) { return; } mobileObserver = new IntersectionObserver( entries => { entries.forEach(entry => { if (!isMobileLike()) return; if ( entry.isIntersecting && entry.intersectionRatio >= 0.45 ) { playPreview({ useSavedSound: false }); } else if ( !entry.isIntersecting || entry.intersectionRatio <= 0.15 ) { stopPreview(); } }); }, { root: null, rootMargin: '0px', threshold: [ 0, 0.15, 0.3, 0.45, 0.65, 1 ] } ); mobileObserver.observe(preview); }; soundButton.addEventListener( 'click', async event => { event.preventDefault(); event.stopPropagation(); if (!player) return; isMuted = !isMuted; try { await player.setMuted(isMuted); sessionStorage.setItem( 'filmPreviewSound', isMuted ? 'off' : 'on' ); updateSoundButton(); if (!isPlaying) { await player.play(); isPlaying = true; preview.classList.add( 'is-playing' ); } } catch (error) { isMuted = true; await player .setMuted(true) .catch(() => {}); updateSoundButton(); console.log( 'Vimeo sound could not be changed.', error ); } } ); preview.addEventListener( 'click', event => { if ( event.target.closest( '.sound-toggle' ) ) { event.preventDefault(); } } ); document.addEventListener( 'visibilitychange', () => { if (document.hidden) { stopPreview(); } } ); const initialisePreview = async () => { try { await loadVimeoSDK(); } catch (error) { console.log( 'Vimeo Player SDK failed to load.', error ); return; } player = new Vimeo.Player(iframe); try { await player.ready(); await player.setMuted(true); } catch (error) { console.log( 'Vimeo player could not initialise.', error ); return; } isMuted = true; isPlaying = false; updateSoundButton(); setupDesktopBehaviour(); setupMobileAutoplay(); }; updateSoundButton(); initialisePreview(); })(); Possessing My House
Watch Possessing My House, our surreal short, available through this exclusive pack and select UK festivals. Click below to explore the film and the accompanied exclusive content. All of our shorts
Here you'll find our free to watch short films. A growing playlist of stories: awkward, tender, and sometimes absurd. Follow the link to our YouTube channel. How we make them
Follow our journey from script to screen. Here you can see how we actually make the films, and how each one informs the next, through our choices, failures, and successes. About Mad Potato Studios
The People
Astijus - Founder of Mad Potato Studios
I’m a London based independent filmmaker with big dreams and an ever expanding list of stories I hope to tell. Through Mad Potato Studios, I hope to turn the way I see this strange and wonderful world into short films that others can connect to. At the moment I’m the only member of the studio, but over time I hope it grows into a collective of like minded creatives. Mad Potato Studios
Mad Potato Studios was founded on the idea that thought provoking, artistic films should be easy to access. Our mission is to create shorts that unsettle comfort zones and linger like a screenworm long after the credits roll. Supporting the Work
All support goes directly into the next production, from lights, sound, and video equipment to props and paying cast and crew. Up to now every film has been self funded, but with your help we can grow, sustain the studio, and keep making more ambitious, polished work. Help Us Make More Potato Films
Independent films take time, energy, and resources. We’re a small studio with big ambitions and strange ideas. Donations help us fund upcoming projects, cover production costs, and keep telling the kinds of stories we hope you love to watch. If you’d like to support our work directly, you can do so through the link below. Thank you for believing in us. Your support keeps Mad Potato Studios alive and cooking. Fresh From the potato Our curated list of short films has something for every weirdo to enjoy.
If you've ever found it easier to connect with a dog than a human, try
A story about two awkward strangers who let their carefree dogs drag them into something both romantic and raw.
If you've ever been so lonely you thought of filing a complaint against yourself, watch
a short film about a desperate farmer who fakes a police call in hopes of making a friend.
If customer service has ever driven you close to the edge of madness, see
a story about a man's attempt to wrestle back control over his life from the cold hands of a broadband company.
If a little magic has ever helped you get through losing someone, watch
a story about existence, grief, magic, and how it all connects.
If you've ever wanted to teach an internet loudmouth a lesson, discover
a film about a teenage girl's attempt to get rid of an online troll, and what happens when it doesn't go as planned.
If you've ever searched for a reason to live, see
a short film about a boy’s attempt to help his family, which leads instead to an unexpected friendship and hope.
The Potato Process Here is our production floor, where mistakes and triumphs shape Mad Potato films.
If you think you need money to start, watch With no crew, no budget, and a child actor, directing, camera, sound, and lights all fell to one pair of hands, leading to bad audio, steep learning curves, and the too late realisation that pre-production matters.
If you think you’ll be able to fix everything by film two, discover With cast work improving, new challenges arrived: battling light and shadow, choreographing our first fight scene, and learning the hard way that a gaffer was essential.
Retirement Bonus Watch Retirement Bonus and explore the extras only available here.
Based on a true story, Retirement Bonus explores what happens when a professional football player becomes disposable after a career ending injury. Set as a confrontation between Oscar's desperation and Fred's calculating callousness, the scene unfolds as Oscar gives Fred an ultimatum with an old contract he had signed previously. This film explores themes of responsibility, powerlessness, and the need to survive. If you have enjoyed our previous work you will love this one! By purchasing this exclusive film pack, you’ll receive the full HD short, the final script, hand drawn storyboard sketches, and a shot list used during production. Available on Gumroad through the link below. Every contribution directly funds the next Mad Potato Studios project.
Credits: Director: Astijus Taujanskas Producer: Mad Potato Studios Starring: Nathan Lwanga, David Kay, Mehlayeel Isar, Matt Ackermann, Noah Easton, Elwin Williams Cinematography: James Stittle Production Sound: Alec Allcock Music: Vsevolod Polonsky Colour: James Stittle Gaffer: Samuel Hunt Production assisting: Isabelle Barranco Runtime: 7:52 min | Released: 2026
Thank you for your time and supporting our work!
Why I Stay In My Bag Watch Why I Stay in My Bag and explore the extras only available here.
Persecuted by a fear of the outside world, Charlotte clings to her black bag while Ruth, a social worker, tries to protect her daughter Emma. With Ruth's patience running out, she forces Charlotte into one final decision: her child or her obsession. By purchasing this exclusive film pack, you’ll receive the full HD short, the final script, alternate behind the bag footage, hand drawn storyboard sketches, and a curated set of BTS photos. Available on Gumroad through the link below. Every contribution directly funds the next Mad Potato Studios project.
Credits: Directed by Astijus Taujanskas Produced by Mad Potato Studios Starring Katty Bicheno, Charlotte Pledger, Natalia Wojcik Cinematography by James Stittle Production Sound by James Lynch Music by Vsevolod Polonsky Gaffing by Aslan Ntumba Production Assisting by Elizabeth O’Rafferty Runtime: 7:46 min | Released: 2025
Thank you for your time and supporting our work!
Possessing My House Watch Possessing My House and discover the extras only available here.
Water still clings to Alice as she settles in for a quiet afternoon of reading, until a cheerful couple walks through her front door and begins to move in as if she wasn't there. No one hears her protests, her walls are destroyed, and the life she knew crumbles around her. Suddenly a fateful doorbell brings her long deceased father with a devastating message, which Alice must accept. This exclusive pack includes the film in HD, the annotated script with references, a gallery of BTS photos, and the original blocking and shot notes used to make the film. Follow the Gumroad link below to purchase. Every purchase directly supports the next Mad Potato Studios project.
Credits: Directed by Astijus Taujanskas Produced by Mad Potato Studios Starring Teya Lanett, Adrian Bracken, Ocean Barrington-Cook, and Jack Frazer Cinematography by Patricio Pacheco Production Sound by: Shean Roberts Music by Alexis Croft Colour by Idris Shittu Runtime: 7:30 min | Released: 2025
Your support means the world and helps us keep making films.
Whispers of the Sun Mood Board Whispers of the Sun Colour Palette