OKLAHOMA CITY – With an ever-exploding slate of productions and a persistently swelling national interest, Oklahoma is finally firmly on the filmmaking map these days.
But while the country at large is only now coming around to what we’ve known all along, there have still been plenty of memorable movies made in our neck of the woods over the last handful of years, from Oscar-winners and blockbuster smashes to indie darlings and underseen niche jewels.
And this month is offering no shortage of chances to catch them.
With a month-long Okie-made movie showcase, a buzzmaking streamer, and a rare spotlight on the stranger, far-out experimental side of things, April is the month for Oklahoman films.
And it starts, of course, with the father of them all.
‘Twister’ – Oklahoma Film Exchange – Saturday, April 11th
That’s right, I’m willingly wading back into the treacherous waters that are my opinions of the “Twister” franchise.
Advertisement
But rather than the lamentable recent sequel, the Film Exchange crew is taking it back to the original, a movie that nails all the goofy fun, serious excitement, and (at the time) groundbreaking visuals that a true blockbuster needed in the 90s.
Helen Hunt and Bill Paxton in “Twister” (Warner Brothers Pictures)
Sure, Jan de Bont’s 1996 cow-twirling action-epic of killer storms isn’t any more concerned with science or accuracy than its 2024 sibling. But it does have loads of tone, a stacked cast of screen legends capable of making you care about the ridiculous stakes and Hollywood energy, and a pretty genuine and mature story of reconciling lovers (rather than a half-baked meteorological meet-cute.)
And yes, the entire climactic finale scene is historically dumb, but at least it has the decency to be so dumb that it’s historic, instead of trying to take itself seriously.
Regardless of any of that, though, it was just so cool to see Oklahoma represented on the big screen back in 1996, and if you were there at the time, you know it’s still fun to relive that feeling when you can.
For more, visit oklahomafilmexchange.com.
Advertisement
‘Elusive’ – Rodeo Cinema (presented by VHS & Chill) – Saturday, April 25th
All month long, Rodeo is actually hosting a full slate of “Made in Oklahoma” films, including Oscar-winners like “Minari” and underseen gems like “Te Ata.”
But the one absolute can’t-miss selection rounding out the schedule is “Elusive,” writer/director Nick Sanford’s 2022 “stupid Bigfoot movie” that takes the mockumentary format into some decidedly broad, moronic, and unreasonably funny territory while also, against all odds, discovering a legitimate heart at its own center.
It’s a screwball faux documentary about the search for Bigfoot. That’s really all you need to know.
But with OKC comedy lynchpin Bradchad Porter in the lead, there’s also a surprisingly heartwarming and effective story running beneath the screwball-ness of a disgraced father attempting to impress his son.
BradChad Porter and Cherish Parker in Elusive (provided)
And there’s also some equally hysterical turns from Mickey Reece, Oklahoma’s alt-film king, and an unrelentingly watachable co-lead turn from the sadly departed Alex Sanchez (he didn’t die, he just moved away from Oklahoma.)
Advertisement
It’s funnier than it has any right to be and it’s more emotional than it has any reason to be and you can finally see it properly in a local theater with a game audience and maybe some of the cast and probably Sanford himself.
It’s an extra-special occasion, though, because this screening is part of the “farewell tour” from OKC’s premier guerilla pop-up cult screening concern VHS & Chill, who plans to hang up the travelling VCR for good after 2026.
So come out on a Saturday night and support the weirder, wilder side of Oklahoma’s indie movie scene.
For more, visit rodeocinema.org.
Wide Open Experimental Fest Festival – Oklahoma City Museum of Art & Oklahoma Film Exchange – Thursday, April 23rd through Sunday, April 26th
Speaking of weird and wild, the ever-growing, ever-strange Wide Open Experimental Film Festival returns once again this month, with a bigger-than-ever weekend of exceptionally far-out, eye-opening experiments designed to push the boundaries of what a film can even be.
Advertisement
Things kick off Thursday, the 23rd at the Film Exchange with a full screening and filmmaker Q&A event before shifting over to the Oklahoma City Museum of Art for three loaded days of psychedelic, expectation-shattering screenings and creative, forward-thinking panel events featuring a slew of local filmmaking minds.
Wide Open Experimental Film Festival logo
Though it’s a truly international fest this year, convention-shirking shorts from local filmmakers abound, with new offerings from creative Oklahoman forces Lily Tucker and Jessi Kyle (who will both be in-person during the weekend,) as well as plenty of locally-focused panels featuring the likes of director/photographer Lauren Bumgarner, deadCenter’s Julia Witcher, OK Film Exchange’s River Lunsford, and more.
Sunday the 26th is even set for a special event from Dissociation OK co-founder (and regular Free Press feature) Andrew Lee, who will be screening his experimental film offering “Myein” alongside a full live accompaniment by his audio alter ego, ut mutem.
The WOE Film Fest is a total trip every year, and this one is looking to be the biggest and boldest yet.
For more, visit wideopeneff.com.
Advertisement
‘Salt of the Earth’ – Now on digital
And how about a streaming option as well?
Yeah, you can keep supporting Okie cinema without even getting up off the couch, because brutal, blood-soaked apocalypse drama “Salt of the Earth” is available now on digital platforms for purchase and rent.
Cate Jones in “Salt of the Earth” (Blood Relative Films)
It’s the newest offering from Oklahomans Kara and Jeremy Choate, the duo behind breakout “Tenkiller,” and it sports a who’s who of local faces, including Adam Hampton, Jessi Kyle, Cate Jones (leader of the band Lover Girl,) Ben Hall, Mary Buss, Jacob Ryan Snovel, Alex Sanchez (again,) and the Choates’ frequent collaborator, Raygun Busch of Chat Pile.
If you missed it when it tore up deadCenter last year, then you can dive into all the boiling family drama, the rabies-infected freakouts, the shootouts, and the relentless, abject bleakness of a backwoods world in the ruins of hat used to be civilized society.
You can check it out on Amazon now.
Advertisement
Catch Brett Fieldcamp’s film column weekly for information and insights into the world of film in the Oklahoma City metro and Oklahoma. | Brought to you by the Oklahoma City Museum of Art.
Brett Fieldcamp is the owner and Editor in Chief of Oklahoma City Free Press. He has been covering arts, entertainment, news, housing, and culture in Oklahoma for nearly two decades and served as Arts & Entertainment Editor before purchasing the company from founder Brett Dickerson in 2026.
He is also a musician and songwriter and holds a certification as Specialist of Spirits from The Society of Wine Educators.
Portal season is just getting underway. The Iowa Women’s Basketball team suffered five losses to the transfer portal, leaving them, at this moment, with six players on next year’s roster, including just two guards. For the first time since the portal became commonplace in college sports, the Hawkeyes, led by head coach Jan Jensen are […]
The United Football League announced on Thursday morning that it’s expanding to 10 teams in 2028, including the addition of a team in Oklahoma City.
“Oklahoma lives and breathes football, so bringing the UFL to Oklahoma City was an easy decision,” UFL Co-Owner Mike Repole said in a statement about the inclusion of Oklahoma City. “This is a state that shows up, cares deeply, and truly understands the game. From college powerhouses to Friday night lights, football runs deep here. We’re committed to building a franchise in OKC that the entire state can rally behind.”
Advertisement
The Oklahoma City UFL team doesn’t yet have a name but will play its home games at MAPS 4 Multipurpose Stadium, which is under construction. The location of the other expansion team isn’t known, either.
“Oklahoma City has long been one of the most glaring vacancies on the professional football map,” UFL President & CEO Russ Brandon said in a statement. “The combination of a new stadium, deep-rooted football culture, and a city that has proven its ability to support major league sports makes this an easy decision. We are thrilled to bring the UFL’s brand of high-octane spring football to the passionate fans of Oklahoma.”
The lone professional sports team in Oklahoma City is the Thunder, who just won their first NBA championship in franchise history last season. Elsewhere, the Oklahoma Sooners (college) are located roughly 25 minutes south of Oklahoma City, while the Oklahoma State Cowboys (college) are located roughly 70 minutes north of Oklahoma City.
As for this season, which is two weeks young, the UFL has three new teams: the Columbus Aviators, Louisville Kings and Orlando Storm.
Police are searching for a suspect after a shooting involving an officer in southwest Oklahoma City on Wednesday.
Advertisement
Suspect outstanding after shooting involving police in southwest OKC
Police are searching for a suspect after a shooting involving an officer in southwest Oklahoma City on Wednesday.
Advertisement
Special Projects Producer/Digital Editor
Advertisement
Police are searching for a suspect after a shooting involving an officer in southwest Oklahoma City on Wednesday. >> Open the video player above for a look at the scene. At about 6 p.m., the Oklahoma City Police Department said officers were responding to a shooting near Southwest 96th Street and South Pennsylvania Avenue.Police said a suspect and a police officer exchanged gunfire, but the officer was not hit. Officers were searching for the suspect, and it wasn’t clear if they had been shot.This is a developing story. Top Headlines 3 people, including an Oklahoma trooper and 4-year-old child, killed in crash on I-35 in OKC What we know about the recovery mission for American woman who reportedly fell overboard in the Bahamas Principal shot by former student in lobby of Pauls Valley High School: What we know TIMELINE: Oklahoma to see several days of severe storm risks starting later this week Former FedEx driver pleads guilty to killing 7-year-old Oklahoma girl in Texas
OKLAHOMA CITY —
Police are searching for a suspect after a shooting involving an officer in southwest Oklahoma City on Wednesday.
Advertisement
>> Open the video player above for a look at the scene.
At about 6 p.m., the Oklahoma City Police Department said officers were responding to a shooting near Southwest 96th Street and South Pennsylvania Avenue.
Police said a suspect and a police officer exchanged gunfire, but the officer was not hit. Officers were searching for the suspect, and it wasn’t clear if they had been shot.
Advertisement
This is a developing story.
Top Headlines
Advertisement
`;
}
function refreshWeatherIframe(containerId) {
var iframeId = ‘weather-iframe-‘ + containerId;
var iframe = document.getElementById(iframeId);
if (iframe && iframe.src) {
var originalSrc = iframe.src;
iframe.src = originalSrc + (originalSrc.indexOf(‘?’) > -1 ? ‘&’ : ‘?’) + ‘t=” + Date.now();
}
}
function initializeWeatherBox(container) {
var containerId = container.getAttribute(“data-container-id’);
var isWeatherBoxV2 = containerId === ‘home-weather-v2’;
Advertisement
function switchWeatherTab(tabName, clickedElement) {
container.querySelectorAll(‘[data-tab-id]’).forEach(function(tab) {
tab.classList.remove(‘open’);
tab.setAttribute(‘aria-selected’, ‘false’);
});
var targetContent = container.querySelector(‘[data-content-id=”‘ + tabName + ‘”]’);
if (targetContent) {
targetContent.style.display = ‘block’;
targetContent.removeAttribute(‘hidden’);
}
}
function loadWeatherData() {
// If weather data is already being loaded, wait for it
if (window.weatherDataPromise) {
window.weatherDataPromise.then(function(data) {
if (data && data.data) {
var weatherContainer = container.closest(‘.weather-box-container’);
if (weatherContainer) {
weatherContainer.style.display = ‘flex’;
updateCurrentWeather(data.data);
updateForecastTabs(data.data);
updateWeatherAlertsBar(data.data);
}
}
});
return;
}
Advertisement
var location = { zip: window.DEFAULT_ZIPCODE };
try {
var storedLocations = localStorage.getItem(‘hrst.zip.history’);
if (storedLocations) {
var locations = JSON.parse(storedLocations);
if (locations && locations.length > 0) {
location = locations[0];
}
}
} catch (e) {}
var apiUrl = (window.DEWY_HOSTNAME || ”) + ‘/api/v1/weather/full/’ + location.zip;
if (window.fetch) {
window.weatherDataPromise = fetch(apiUrl)
.then(function(response) { return response.json(); })
.then(function(data) {
if (data && data.data) {
var article = container.closest(‘.article–wrapper’);
var weatherContainer = container.closest(‘.weather-box-container’);
if (weatherContainer) {
weatherContainer.style.display = ‘flex’;
updateCurrentWeather(data.data);
updateForecastTabs(data.data);
updateWeatherAlertsBar(data.data);
}
return data;
}
})
.catch(function(error) {
console.error(‘Error loading weather:’, error);
// Reset to unknown background on error
updateWeatherBackground(‘unknown’);
});
}
}
function updateWeatherAlertsBar(weatherData) {
var weatherWatchHeader = container.querySelector(‘.weather-watch-header’);
if (!weatherWatchHeader) return;
Advertisement
var weatherWatchText = weatherWatchHeader.querySelector(‘.weather-watch-text’);
var weatherWatchLink = weatherWatchHeader.querySelector(‘.weather-watch-link’);
if (weatherData.alerts_count > 0) {
weatherWatchHeader.className=”weather-watch-header has-alerts”;
if (weatherWatchText) {
weatherWatchText.textContent = `Weather Alerts (${weatherData.alerts_count})`;
}
if (weatherWatchLink) {
if (!weatherWatchLink.getAttribute(‘data-initial-href’)) {
weatherWatchLink.setAttribute(‘data-initial-href’, weatherWatchLink.getAttribute(‘href’));
weatherWatchLink.setAttribute(‘data-initial-onclick’, weatherWatchLink.getAttribute(‘onclick’) || ”);
}
weatherWatchLink.setAttribute(‘href’, “https://www.koco.com/alerts”);
weatherWatchLink.setAttribute(‘onclick’, “return handleWeatherLinkClick(event, ‘click_alerts’, ‘click’, ‘mobile-weather’, “https://www.koco.com/alerts”);”);
}
} else {
weatherWatchHeader.className=”weather-watch-header”;
if (weatherWatchText) {
weatherWatchText.textContent = containerId === ‘home-weather-v2’ ? ‘Watch Latest Forecast’ : ‘Latest Forecast’;
}
if (weatherWatchLink) {
var initialHref = weatherWatchLink.getAttribute(‘data-initial-href’);
var initialOnclick = weatherWatchLink.getAttribute(‘data-initial-onclick’);
if (initialHref) {
weatherWatchLink.setAttribute(‘href’, initialHref);
}
if (initialOnclick) {
weatherWatchLink.setAttribute(‘onclick’, initialOnclick);
}
}
}
}
function updateCurrentWeather(weatherData) {
if (weatherData.current) {
var tempValue = weatherData.current.temp_f || ”;
var skyValue = weatherData.current.sky || ”;
var feelsLikeValue = weatherData.current.feels_like_f || weatherData.current.temp_f || ”;
var tempEl = container.querySelector(‘.weather-grid–current-temp-value’);
if (tempEl) {
tempEl.textContent = tempValue;
tempEl.setAttribute(‘aria-label’, tempValue + ‘ degrees Fahrenheit’);
}
var iconEl = container.querySelector(‘.weather-grid–current-icon’);
if (iconEl && weatherData.current.icon_name) {
iconEl.className=”weather-grid–current-icon weather-current-icon icon icon-weather-” + weatherData.current.icon_name;
}
Advertisement
var skyEl = container.querySelector(‘.weather-grid–sky’);
if (skyEl) {
skyEl.textContent = skyValue;
skyEl.setAttribute(‘aria-label’, ‘Current condition: ‘ + skyValue);
}
var feelsEl = container.querySelector(‘.weather-grid–feels’);
if (feelsEl) {
feelsEl.textContent = feelsLikeValue + ‘°F’;
feelsEl.setAttribute(‘aria-label’, feelsLikeValue + ‘ degrees Fahrenheit’);
}
var weatherContainer = container.querySelector(‘.weather-temp-container’);
if (weatherContainer) {
var summary = ‘Current temperature ‘ + tempValue + ‘ degrees Fahrenheit, ‘ +
skyValue + ‘, feels like ‘ + feelsLikeValue + ‘ degrees’;
weatherContainer.setAttribute(‘aria-label’, summary);
}
function updateForecastTabs(weatherData) {
var visibleItems = isWeatherBoxV2 ? 6 : 5;
if (weatherData.hourly) {
var hourlyContainer = container.querySelector(‘.weather-hourly-forecast’);
if (hourlyContainer) {
var html=””;
var maxHours = Math.min(visibleItems, weatherData.hourly.length);
for (var i = 0; i 0 ? currentIndex – 1 : tabs.length – 1;
tabs[prevIndex].focus();
break;
case ‘ArrowRight’:
e.preventDefault();
var nextIndex = currentIndex
`;
}
function refreshWeatherIframe(containerId) {
var iframeId = ‘weather-iframe-‘ + containerId;
var iframe = document.getElementById(iframeId);
if (iframe && iframe.src) {
var originalSrc = iframe.src;
iframe.src = originalSrc + (originalSrc.indexOf(‘?’) > -1 ? ‘&’ : ‘?’) + ‘t=” + Date.now();
}
}
Advertisement
function initializeWeatherBox(container) {
var containerId = container.getAttribute(“data-container-id’);
var isWeatherBoxV2 = containerId === ‘home-weather-v2’;
function switchWeatherTab(tabName, clickedElement) {
container.querySelectorAll(‘[data-tab-id]’).forEach(function(tab) {
tab.classList.remove(‘open’);
tab.setAttribute(‘aria-selected’, ‘false’);
});
var targetContent = container.querySelector(‘[data-content-id=”‘ + tabName + ‘”]’);
if (targetContent) {
targetContent.style.display = ‘block’;
targetContent.removeAttribute(‘hidden’);
}
}
Advertisement
function loadWeatherData() {
// If weather data is already being loaded, wait for it
if (window.weatherDataPromise) {
window.weatherDataPromise.then(function(data) {
if (data && data.data) {
var weatherContainer = container.closest(‘.weather-box-container’);
if (weatherContainer) {
weatherContainer.style.display = ‘flex’;
updateCurrentWeather(data.data);
updateForecastTabs(data.data);
updateWeatherAlertsBar(data.data);
}
}
});
return;
}
var location = { zip: window.DEFAULT_ZIPCODE };
try {
var storedLocations = localStorage.getItem(‘hrst.zip.history’);
if (storedLocations) {
var locations = JSON.parse(storedLocations);
if (locations && locations.length > 0) {
location = locations[0];
}
}
} catch (e) {}
var apiUrl = (window.DEWY_HOSTNAME || ”) + ‘/api/v1/weather/full/’ + location.zip;
if (window.fetch) {
window.weatherDataPromise = fetch(apiUrl)
.then(function(response) { return response.json(); })
.then(function(data) {
if (data && data.data) {
var article = container.closest(‘.article–wrapper’);
var weatherContainer = container.closest(‘.weather-box-container’);
if (weatherContainer) {
weatherContainer.style.display = ‘flex’;
updateCurrentWeather(data.data);
updateForecastTabs(data.data);
updateWeatherAlertsBar(data.data);
}
return data;
}
})
.catch(function(error) {
console.error(‘Error loading weather:’, error);
// Reset to unknown background on error
updateWeatherBackground(‘unknown’);
});
}
}
Advertisement
function updateWeatherAlertsBar(weatherData) {
var weatherWatchHeader = container.querySelector(‘.weather-watch-header’);
if (!weatherWatchHeader) return;
var weatherWatchText = weatherWatchHeader.querySelector(‘.weather-watch-text’);
var weatherWatchLink = weatherWatchHeader.querySelector(‘.weather-watch-link’);
if (weatherData.alerts_count > 0) {
weatherWatchHeader.className=”weather-watch-header has-alerts”;
if (weatherWatchText) {
weatherWatchText.textContent = `Weather Alerts (${weatherData.alerts_count})`;
}
if (weatherWatchLink) {
if (!weatherWatchLink.getAttribute(‘data-initial-href’)) {
weatherWatchLink.setAttribute(‘data-initial-href’, weatherWatchLink.getAttribute(‘href’));
weatherWatchLink.setAttribute(‘data-initial-onclick’, weatherWatchLink.getAttribute(‘onclick’) || ”);
}
weatherWatchLink.setAttribute(‘href’, “https://www.koco.com/alerts”);
weatherWatchLink.setAttribute(‘onclick’, “return handleWeatherLinkClick(event, ‘click_alerts’, ‘click’, ‘sidelist-weather’, “https://www.koco.com/alerts”);”);
}
} else {
weatherWatchHeader.className=”weather-watch-header”;
if (weatherWatchText) {
weatherWatchText.textContent = containerId === ‘home-weather-v2’ ? ‘Watch Latest Forecast’ : ‘Latest Forecast’;
}
if (weatherWatchLink) {
var initialHref = weatherWatchLink.getAttribute(‘data-initial-href’);
var initialOnclick = weatherWatchLink.getAttribute(‘data-initial-onclick’);
if (initialHref) {
weatherWatchLink.setAttribute(‘href’, initialHref);
}
if (initialOnclick) {
weatherWatchLink.setAttribute(‘onclick’, initialOnclick);
}
}
}
}
function updateCurrentWeather(weatherData) {
if (weatherData.current) {
var tempValue = weatherData.current.temp_f || ”;
var skyValue = weatherData.current.sky || ”;
var feelsLikeValue = weatherData.current.feels_like_f || weatherData.current.temp_f || ”;
var tempEl = container.querySelector(‘.weather-grid–current-temp-value’);
if (tempEl) {
tempEl.textContent = tempValue;
tempEl.setAttribute(‘aria-label’, tempValue + ‘ degrees Fahrenheit’);
}
Advertisement
var iconEl = container.querySelector(‘.weather-grid–current-icon’);
if (iconEl && weatherData.current.icon_name) {
iconEl.className=”weather-grid–current-icon weather-current-icon icon icon-weather-” + weatherData.current.icon_name;
}
var skyEl = container.querySelector(‘.weather-grid–sky’);
if (skyEl) {
skyEl.textContent = skyValue;
skyEl.setAttribute(‘aria-label’, ‘Current condition: ‘ + skyValue);
}
var feelsEl = container.querySelector(‘.weather-grid–feels’);
if (feelsEl) {
feelsEl.textContent = feelsLikeValue + ‘°F’;
feelsEl.setAttribute(‘aria-label’, feelsLikeValue + ‘ degrees Fahrenheit’);
}
var weatherContainer = container.querySelector(‘.weather-temp-container’);
if (weatherContainer) {
var summary = ‘Current temperature ‘ + tempValue + ‘ degrees Fahrenheit, ‘ +
skyValue + ‘, feels like ‘ + feelsLikeValue + ‘ degrees’;
weatherContainer.setAttribute(‘aria-label’, summary);
}
function updateForecastTabs(weatherData) {
var visibleItems = isWeatherBoxV2 ? 6 : 5;
if (weatherData.hourly) {
var hourlyContainer = container.querySelector(‘.weather-hourly-forecast’);
if (hourlyContainer) {
var html=””;
var maxHours = Math.min(visibleItems, weatherData.hourly.length);
for (var i = 0; i 0 ? currentIndex – 1 : tabs.length – 1;
tabs[prevIndex].focus();
break;
case ‘ArrowRight’:
e.preventDefault();
var nextIndex = currentIndex