91³Ô¹ÏÍø

Watch CBS News

Atlanta's indie film boom: Why more creators are taking over the screen

Atlanta's film industry has long been associated with major studio productions, but independent filmmakers are stepping into a bigger role as the landscape changes.

At the Plaza Theatre, filmmaker Alex Woodruff said he is seeing growing momentum among Atlanta's independent creators. 

"There's a huge upswing in filmmakers here," Woodruff said. "People are just going to go and get it themselves."

Woodruff is an Atlanta filmmaker whose latest film, "Thomasville," has been making the festival rounds. He said the project is deeply personal and rooted in the city.

Woodruff said independent filmmaking is not driven by money in the early stages, but by passion and purpose. 

"You're probably not going to make much money," he said. "So you have to make something that will always be a success to you."

He said the work also requires persistence and buy-in from others. 

"The first thing you have to do is get someone to believe in your idea," Woodruff said. "And then you have to do that again, over and over."

screenshot-2026-04-09-at-9-12-35-am.png
CBS News Atlanta

Industry leaders said the shift became more visible after the 2023 Hollywood strikes. Martina Lindo, co-founder of On Set ATL, said major studio activity in Atlanta dropped significantly, creating room for independent creators to step forward. 

"Before the strikes, there were about 400 productions," Lindo said. "After the strikes, that cut down to less than 50%." 

Lindo said that the decline opened the door for more local filmmakers to create and share their work. 

"Those spaces are now available for independents to come in and create and make work," she said.

She said Atlanta is in a strong position for that growth because the city already has the crews, talent, and production infrastructure in place. Lindo said many filmmakers are also changing the way they see themselves and their work. 

"They're owning their stories," she said. "They're creating their brands. They're seeing themselves not only as artists, but as entrepreneurs."

Woodruff said more filmmakers are finding ways to support themselves financially while continuing to create projects they care about.

"People are getting their money elsewhere and then coming to film with their heart and their passion," he said. 

Lindo said that mindset is helping turn independent filmmakers into a growing force within Atlanta's film industry. That momentum will be on display this weekend at On Set ATL's Slate Awards at the Fox Theatre, an event celebrating Atlanta's independent filmmakers.

View CBS News In
CBS News App Open
Chrome Safari Continue
const link = doc.createElement('link'); link.rel = 'stylesheet'; link.href = '/fly/fly/bundles/cbsnewscontent/css/cmp-banner.min.css?v=296763317a51cab90faa73f1bb146d5c'; doc.head.appendChild(link); doc.body.innerHTML = CONSENT_MESSAGE; } else { el.insertAdjacentHTML('afterend', CONSENT_MESSAGE); } }); } function hidePrivacyMessage() { // Remove from the main document document.querySelectorAll(`.${CONSENT_MESSAGE_CLASS}`).forEach(el => el.remove()); // Remove from inside any iframes document.querySelectorAll('iframe').forEach(iframe => { const doc = iframe.contentDocument || iframe.contentWindow.document; doc.querySelectorAll(`.${CONSENT_MESSAGE_CLASS}`).forEach(el => el.remove()); }); } function activateGatedScripts() { // Handle both new format (cmp-gated-script) and old OneTrust/Ketch format (optanon-category-4) const gatedScripts = Array.from(document.querySelectorAll('script.cmp-gated-script, script.optanon-category-4')); // Activate scripts sequentially with a small delay to avoid timing issues let delay = 0; gatedScripts.forEach(function(placeholder, index) { setTimeout(function() { // Skip if already processed if (placeholder.hasAttribute('data-cmp-processed')) { return; } placeholder.setAttribute('data-cmp-processed', 'true'); const newScript = document.createElement('script'); newScript.type = 'text/javascript'; // Try new format first (data-cmp-src), then fall back to old format (data-src) const src = placeholder.getAttribute('data-cmp-src') || placeholder.getAttribute('data-src'); if (src) { newScript.src = src; } else if (placeholder.textContent) { // Inline script - just copy the content newScript.textContent = placeholder.textContent; } // Handle new format attributes (data-cmp-attrs) - for both inline and external scripts const attrs = placeholder.getAttribute('data-cmp-attrs'); if (attrs) { const tempDiv = document.createElement('div'); tempDiv.innerHTML = '
<\/div>'; const tempAttrs = tempDiv.firstChild.attributes; for (let i = 0; i < tempAttrs.length; i++) { // For external scripts, allow defer/async. For inline scripts, skip them (not valid) if (src || (tempAttrs[i].name !== 'async' && tempAttrs[i].name !== 'defer')) { newScript.setAttribute(tempAttrs[i].name, tempAttrs[i].value); } } } // Copy other attributes from old OneTrust format for (let i = 0; i < placeholder.attributes.length; i++) { const attr = placeholder.attributes[i]; // Skip attributes we've already handled or don't want to copy if (!['class', 'data-src', 'data-type', 'data-cmp-src', 'data-cmp-attrs', 'data-cmp-processed', 'type', 'async', 'defer', 'src'].includes(attr.name)) { newScript.setAttribute(attr.name, attr.value); } } placeholder.parentNode.replaceChild(newScript, placeholder); // If external script, manually trigger window.onload handlers after it loads // This handles widgets that use window.onload for initialization if (src) { newScript.addEventListener('load', function() { // If page already loaded and script set a new onload handler, trigger it if (document.readyState === 'complete' && window.onload) { const originalOnload = window.onload; window.onload = null; // Clear temporarily to prevent loops originalOnload(); // Execute the handler } }); } }, delay); delay += 500; // 500ms delay between each script to allow full loading }); } cbsoptanon.onScriptsReady(function(cmp) { cmp.ot.targetingAllowed(function(allowed) { if (!allowed) { showPrivacyMessage(); } else { activateGatedScripts(); } }); cmp.ot.awaitInitialConsent(function(consent_model) { cmp.ot.addOnConsentChangedHandler(function() { cmp.ot.targetingAllowed(function(allowed) { if (allowed) { hidePrivacyMessage(); activateGatedScripts(); } else { showPrivacyMessage(); } }); }); }); });