ADVERTISEMENT

MOVIEGOER: Int'l film taps beauty and mystery of Manila

Published Nov 20, 2025 07:58 am
For a change, frequent Philippine traveler, singer, and humanitarian Qymira (Leslie Loh in real life) played a different role during her latest visit.
Qymira (left) and director Pedring Lopez
Qymira (left) and director Pedring Lopez
No longer as a singer behind a foundation called GAIA that comes to the aid of children and the elderly in poor communities in the regions, but as an actress starring in a full-length feature film.
The UK-based singer-songwriter is making her feature film debut, cast as the female lead in action-drama, “Shadow Transit,” described by its director, Pedring Lopez, as “a chase through survival, violence, and emotional reckoning – a grounded, visceral thriller exploring the fragility of trust in a chaotic world.”
The film is set against the backdrop of Manila’s underground DJ scene, red-light districts, and drug corridors.
Facing a handful of media Nov. 10 in Quezon City, Qymira said “Shadow Transit is more than just her first lead role.
“It’s everything I’ve ever dreamed of in a film: raw, human, wildly artistic, and unflinchingly brutal. It’s a story of survival that hits you in the gut and stays in your heart. Getting the chance to bring this to life is more than a dream — it’s an absolute honor.”
Qymira is paired opposite US-based, Indonesian-born actor Yoshi Sudarso (Bullet Train, The Paper Tigers, and Buffalo Boys) in what is to be known as the first English-language film by Lopez, known for Netflix original action film Maria. Maria also happens to be the first Filipino film to be screened on Netflix.
Playing an equally key role in the Filipino action noir is KC Montero as the crime syndicate lord.
“Shadow Transit” is a co-production between Hong Kong-based ACT3 and Lopez’s Manila-based BlackOps Studios Asia. ACT3 is a new financing and production operation that aims to make filmmaker-driven genre cinema in both English and Chinese languages.
“Shadow Transit” is the company’s first feature. A brief synopsis states: In the sleepless sprawl of Poblacion, Makati, two wanderers meet for a single night that changes everything.
Qymira earlier completed a UK-Ireland tour alongside Boyzlife. Her hit singles include Labyrinth of Life, which peaked at No. 3 on the UK Dance Chart. She also sings tracks in Portuguese, which have topped Brazil’s Bahia radio charts at No. 1 ahead of her performance at the Salvador Carnival.
Qymira also sings the film’s theme song, Shade of My Shadow.
Pedring Lopez recently wrapped an eight-part prison drama, Sellblock, starring Jericho Rosales, and is attached to upcoming international thrillers Blood Passage and JI.
I asked Lopez, “What does the film say about Manila?” He explained by talking about balance. His, he said, is a story that shows the beauty and mystery of Manila. Based on the film’s trailer, Metro Manila by night is photographed beautifully like a chain of sparkling gems. Certainly, there’s more to the glitter than just gold, fake, plated, or otherwise.
Lopez says his film lives in the chaos of the streets – fast, bruised, and human. Making my first English-language feature meant chasing the story beyond borders and into the heart of survival.”
“Shadow Transit" holds its world premiere via two screenings, Nov. 22, Gateway 16, 7.55 pm (Gala Night with Talk Back), and Nov. 23, Gateway 18, 6 pm under QCinema.
ADVERTISEMENT
.most-popular .layout-ratio{ padding-bottom: 79.13%; } @media (min-width: 768px) and (max-width: 1024px) { .widget-title { font-size: 15px !important; } }

{{ articles_filter_1561_widget.title }}

.most-popular .layout-ratio{ padding-bottom: 79.13%; } @media (min-width: 768px) and (max-width: 1024px) { .widget-title { font-size: 15px !important; } }

{{ articles_filter_1562_widget.title }}

.most-popular .layout-ratio{ padding-bottom: 79.13%; } @media (min-width: 768px) and (max-width: 1024px) { .widget-title { font-size: 15px !important; } }

{{ articles_filter_1563_widget.title }}

{{ articles_filter_1564_widget.title }}

.mb-article-details { position: relative; } .mb-article-details .article-body-preview, .mb-article-details .article-body-summary{ font-size: 17px; line-height: 30px; font-family: "Libre Caslon Text", serif; color: #000; } .mb-article-details .article-body-preview iframe , .mb-article-details .article-body-summary iframe{ width: 100%; margin: auto; } .read-more-background { background: linear-gradient(180deg, color(display-p3 1.000 1.000 1.000 / 0) 13.75%, color(display-p3 1.000 1.000 1.000 / 0.8) 30.79%, color(display-p3 1.000 1.000 1.000) 72.5%); position: absolute; height: 200px; width: 100%; bottom: 0; display: flex; justify-content: center; align-items: center; padding: 0; } .read-more-background a{ color: #000; } .read-more-btn { padding: 17px 45px; font-family: Inter; font-weight: 700; font-size: 18px; line-height: 16px; text-align: center; vertical-align: middle; border: 1px solid black; background-color: white; } .hidden { display: none; }
function initializeAllSwipers() { // Get all hidden inputs with cms_article_id document.querySelectorAll('[id^="cms_article_id_"]').forEach(function (input) { const cmsArticleId = input.value; const articleSelector = '#article-' + cmsArticleId + ' .body_images'; const swiperElement = document.querySelector(articleSelector); if (swiperElement && !swiperElement.classList.contains('swiper-initialized')) { new Swiper(articleSelector, { loop: true, pagination: false, navigation: { nextEl: '#article-' + cmsArticleId + ' .swiper-button-next', prevEl: '#article-' + cmsArticleId + ' .swiper-button-prev', }, }); } }); } setTimeout(initializeAllSwipers, 3000); const intersectionObserver = new IntersectionObserver( (entries) => { entries.forEach((entry) => { if (entry.isIntersecting) { const newUrl = entry.target.getAttribute("data-url"); if (newUrl) { history.pushState(null, null, newUrl); let article = entry.target; // Extract metadata const author = article.querySelector('.author-section').textContent.replace('By', '').trim(); const section = article.querySelector('.section-info ').textContent.replace(' ', ' '); const title = article.querySelector('.article-title h1').textContent; // Parse URL for Chartbeat path format const parsedUrl = new URL(newUrl, window.location.origin); const cleanUrl = parsedUrl.host + parsedUrl.pathname; // Update Chartbeat configuration if (typeof window._sf_async_config !== 'undefined') { window._sf_async_config.path = cleanUrl; window._sf_async_config.sections = section; window._sf_async_config.authors = author; } // Track virtual page view with Chartbeat if (typeof pSUPERFLY !== 'undefined' && typeof pSUPERFLY.virtualPage === 'function') { try { pSUPERFLY.virtualPage({ path: cleanUrl, title: title, sections: section, authors: author }); } catch (error) { console.error('ping error', error); } } // Optional: Update document title if (title && title !== document.title) { document.title = title; } } } }); }, { threshold: 0.1 } ); function showArticleBody(button) { const article = button.closest("article"); const summary = article.querySelector(".article-body-summary"); const body = article.querySelector(".article-body-preview"); const readMoreSection = article.querySelector(".read-more-background"); // Hide summary and read-more section summary.style.display = "none"; readMoreSection.style.display = "none"; // Show the full article body body.classList.remove("hidden"); } document.addEventListener("DOMContentLoaded", () => { let loadCount = 0; // Track how many times articles are loaded const offset = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; // Offset values const currentUrl = window.location.pathname.substring(1); let isLoading = false; // Prevent multiple calls if (!currentUrl) { console.log("Current URL is invalid."); return; } const sentinel = document.getElementById("load-more-sentinel"); if (!sentinel) { console.log("Sentinel element not found."); return; } function isSentinelVisible() { const rect = sentinel.getBoundingClientRect(); return ( rect.top < window.innerHeight && rect.bottom >= 0 ); } function onScroll() { if (isLoading) return; if (isSentinelVisible()) { if (loadCount >= offset.length) { console.log("Maximum load attempts reached."); window.removeEventListener("scroll", onScroll); return; } isLoading = true; const currentOffset = offset[loadCount]; window.loadMoreItems().then(() => { let article = document.querySelector('#widget_1690 > div:nth-last-of-type(2) article'); intersectionObserver.observe(article) loadCount++; }).catch(error => { console.error("Error loading more items:", error); }).finally(() => { isLoading = false; }); } } window.addEventListener("scroll", onScroll); });

Sign up by email to receive news.