‘Alien Earth’ Composer Jeff Russo Dives Into Score For FX Series

FX’s Alien: Earth — Pictured: Timothy Olyphant as Kirsh.

Courtesy of Patrick Brown/FX

***The following contains certain spoilers for Alien: Earth!***

When it came time to marry picture and music for FX’s Alien: Earth, series creator Noah Hawley did what he’s done for close to 20 years: call up Jeff Russo.

“[He] said, ‘I’m adapting the Alien IP, for television. What do you think, musically?’” Russo recalls over Zoom. “We started talking and I began writing music for it. It seemed like…not a foregone conclusion, but a conversation that was being had.”

A founder of Tonic and a previous member of Low Stars, the composer has scored all of Hawley’s film and television projects since The Unusuals (2009). “Everything I’ve learned about making music for storytelling, I learned by doing with him,” Russo adds. “He really knows what he wants. And when you have a confident filmmaker that is also open to artistic collaboration, it’s the best of all the worlds.”

The first small screen translation of the nearly 50-year-old franchise known for straddling horror, sci-fi, and action genres, Alien: Earth takes place two years before the events of the 1979 original and nearly six decades before Aliens.

“We talk a lot about trying to figure out what the underlying property is making our audience feel,” Russo explains. “Trying to create a unique narrative and way of telling the story, but at the same time, making the audience feel that same feeling. In this case, there’s that feeling of dread. There’s that tense, eerie feeling created with such a deft hand in Alien. And then [came Aliens, which was] such a great action piece. So how are we going to take those two ideas and sort of mix them together, have that be something unique and different, while eliciting the same feeling?”

To that end, he utilized “some of the same methodology” and “some of the same little tropes” of his Alien forebears like “jump scares and a delay on the horn motif,” Russo notes. “Little things I could do to tip my hat to [Jerry] Goldsmith, tip my hat to [James] Horner. It’s fun for the fans and it’s fun for me as a musician to do that, too.”

LONDON, ENGLAND – JULY 29: Jeff Russo attends the “Alien: Earth” European Premiere at the Barbican Centre on July 29, 2025 in London, England. (Photo by Kate Green/Getty Images)

Getty Images

That was only the beginning, however. Unlike Goldsmith and Horner, Russo was not constrained by a two-hour runtime, but free to let his music breathe and evolve across multiple episodes. “As I was writing, I wrote the score as though I was writing an eight-hour movie,” he says. “There is this opportunity to develop the character relationships with music, with motifs, with thematic material.”

While too young to see Alien upon its initial release, a teenage Russo did get the opportunity to check out James Cameron’s rip-roaring sequel when it first hit theaters in the summer of 1986. “It had a profound effect on me,” he proclaims. “It was the very first time I’d ever seen a movie where I was actually on the edge of my seat. I actually felt my heart pounding in my chest … I had never had that happen before.”

He hoped to capture a similar tension, emotionality, and “propulsion” with his eclectic score for Alien: Earth, which makes use of everything from a bassdescophone to an Aztec death whistle. “Most important, is that it keeps you engaged without taking you out of [the story]. It’s really meant to make you feel. Not make you pay attention to the music, but make you feel the the vibe of what you’re looking at.”

As its title denotes, the series brings the chest-bursting Xenomorph carnage to our own front door, framing the story through the lens of a fierce corporate arms race between the infamous Weyland-Yutani and newly-introduced Prodigy.

The latter, founded by arrogant trillionaire wunderkind Boy Kavalier (Samuel Blenkin), kicks off the trouble by deliberately sabotaging a W-Y research vessel, the USS Maginot, returning from deep space with a number of highly aggressive alien species, including ol’ Xeno and a nasty little ocular gremlin called the Eye Midge.

“The idea isn’t to make sure each individual species has its own theme. Then you kind of have a Frankenstein score. It’s really more about the feeling,” stresses Russo. “The underlying Alien thematic motif, the underlying Alien feeling in the music, is really applied to all of the new species. The one thing we could never do is recreate the feeling [viewers] had the first time they saw a Xenomorph. The only way to have gone about doing that is to introduce new alien characters. And then, all of a sudden, when you see the Eye Midge jump into the sheep for the first time, it’s f—ing crazy weird and really unnerving.”

After getting a small tease in the pilot, fans got to see exactly what went down on the USS Maginot in Episode 5: “In Space, No One…”

Named for Alien’s uber-famous marketing tagline, “In space, no one can hear you scream,” the episode has been hailed for the way in which it captures the claustrophobic and retro-futuristic terror of the Ridley Scott film that started it all.

“When I saw those first scenes, my breath was taken away. I called Noah and was like, ‘F***! You did it!’ Oh my God, I couldn’t believe it,” Russo admits. “All of a sudden, I was like, ‘Okay, now I have to look at this particular episode through the lens of that first movie.’ I didn’t want to just do Goldsmith music, because that wasn’t going to help us. But definitely relying on the feelings that score created; trying to get the score that I was writing to do those same things was an even higher priority in this particular episode than the other episodes. I really wanted to make you feel like you were watching a movie that could have come right after Alien. Like it could have been released in ’81. Not from a sound perspective. I’m not saying I wanted to make a retro score, but I wanted that feeling to continue.”

When the Maginot “accidentally” crashes in his territory, Kavalier plunders its zoological treasures and brings them to a private island for research and development. Incensed at being outsmarted, the CEO of Weyland-Yutani (Sandra Yi Sencindive) allows one of her employees, a cyborg with very few scruples named Morrow (Babou Ceesay), to use any means necessary to reacquire the biological specimens. For Russo, the series can be summed up by Ripley’s iconic line from Aliens: “I don’t know which species is worse. You don’t see them f—ing each other over for a goddamn percentage.”

Translation: the bloodlust of an unstoppable monster from beyond the stars still pales in comparison to the fathomless depths of human greed and cruelty.

“A lot of what we talk about is, ‘Who’s the bad guy? Who’s the villain in the story?’” says the composer. “‘Is it the alien? Is it the corporations? Is it the smart humans making dumb choices? What’s the underlying villainous feeling, and where does it come from?’”

FX’s Alien: Earth — “The Fly” — Season 1, Episode 6 (Airs Tues, Sept 9) — Pictured (L-R): Samuel Blenkin as Boy Kavalier, Ade Edmondson as Atom Eins, Timothy Olyphant as Kirsh. CR: Patrick Brown/FX

Copyright 2025, FX. All Rights Reserved.

And, of course, an Alien project just wouldn’t be an Alien project without a Synthetic or two. Hawley’s vision of the future includes the classic rendition — à la Ash, Bishop, and David — while taking the concept even further. You see, Kavalier and his scientists have found a way to transfer human consciousness into android bodies, thus setting the stage for something our species has dreamed of for centuries: immortality. The only drawback? Adult brains are ill-equipped for the swap, meaning Prodigy must rely on children with terminal diseases to be their guinea pigs.

While developing minds are better adapted for the procedure, it soon becomes clear that an emotionally immature consciousness controlling a super-powered body may not always lead to the best results. In addition to serving as an allegory for how many wield the power of AI with childlike irresponsibility, the hybrid Synthetic thread also represents the beating heart of the entire show. The de factor leader of Kavalier’s band of “Lost Boys,” Wendy (Sydney Chandler), raises important questions regarding humanity, science run amok, and the monsters we make of ourselves.

It was all a veritable treasure trove for Russo. “The relationship of all the Lost Boys to Boy Kavalier; the relationship of Wendy to the Xenomorph; the Eye Midge’s relationship to its host,” he says. “It’s an interesting thing to think about designing music that is meant to connect all these different characters.”

With just one episode left to go, I ask the composer what fans can expect from the season finale. He replies with a three-word answer: “Expect the unexpected.”


Episodes 1-7 of Alien Earth are currently streaming on Hulu

Source: https://www.forbes.com/sites/joshweiss/2025/09/17/alien-earth-composer-jeff-russo-dives-into-music-for-noah-hawley-series-i-wrote-the-score-as-though-i-was-writing-an-eight-hour-movie/

Aviso legal: Los artículos republicados en este sitio provienen de plataformas públicas y se ofrecen únicamente con fines informativos. No reflejan necesariamente la opinión de MEXC. Todos los derechos pertenecen a los autores originales. Si consideras que algún contenido infringe derechos de terceros, comunícate con service@support.mexc.com para solicitar su eliminación. MEXC no garantiza la exactitud, la integridad ni la actualidad del contenido y no se responsabiliza por acciones tomadas en función de la información proporcionada. El contenido no constituye asesoría financiera, legal ni profesional, ni debe interpretarse como recomendación o respaldo por parte de MEXC.
Compartir perspectivas

También te puede interesar

Summarize Any Stock’s Earnings Call in Seconds Using FMP API

Summarize Any Stock’s Earnings Call in Seconds Using FMP API

Turn lengthy earnings call transcripts into one-page insights using the Financial Modeling Prep APIPhoto by Bich Tran Earnings calls are packed with insights. They tell you how a company performed, what management expects in the future, and what analysts are worried about. The challenge is that these transcripts often stretch across dozens of pages, making it tough to separate the key takeaways from the noise. With the right tools, you don’t need to spend hours reading every line. By combining the Financial Modeling Prep (FMP) API with Groq’s lightning-fast LLMs, you can transform any earnings call into a concise summary in seconds. The FMP API provides reliable access to complete transcripts, while Groq handles the heavy lifting of distilling them into clear, actionable highlights. In this article, we’ll build a Python workflow that brings these two together. You’ll see how to fetch transcripts for any stock, prepare the text, and instantly generate a one-page summary. Whether you’re tracking Apple, NVIDIA, or your favorite growth stock, the process works the same — fast, accurate, and ready whenever you are. Fetching Earnings Transcripts with FMP API The first step is to pull the raw transcript data. FMP makes this simple with dedicated endpoints for earnings calls. If you want the latest transcripts across the market, you can use the stable endpoint /stable/earning-call-transcript-latest. For a specific stock, the v3 endpoint lets you request transcripts by symbol, quarter, and year using the pattern: https://financialmodelingprep.com/api/v3/earning_call_transcript/{symbol}?quarter={q}&year={y}&apikey=YOUR_API_KEY here’s how you can fetch NVIDIA’s transcript for a given quarter: import requestsAPI_KEY = "your_api_key"symbol = "NVDA"quarter = 2year = 2024url = f"https://financialmodelingprep.com/api/v3/earning_call_transcript/{symbol}?quarter={quarter}&year={year}&apikey={API_KEY}"response = requests.get(url)data = response.json()# Inspect the keysprint(data.keys())# Access transcript contentif "content" in data[0]: transcript_text = data[0]["content"] print(transcript_text[:500]) # preview first 500 characters The response typically includes details like the company symbol, quarter, year, and the full transcript text. If you aren’t sure which quarter to query, the “latest transcripts” endpoint is the quickest way to always stay up to date. Cleaning and Preparing Transcript Data Raw transcripts from the API often include long paragraphs, speaker tags, and formatting artifacts. Before sending them to an LLM, it helps to organize the text into a cleaner structure. Most transcripts follow a pattern: prepared remarks from executives first, followed by a Q&A session with analysts. Separating these sections gives better control when prompting the model. In Python, you can parse the transcript and strip out unnecessary characters. A simple way is to split by markers such as “Operator” or “Question-and-Answer.” Once separated, you can create two blocks — Prepared Remarks and Q&A — that will later be summarized independently. This ensures the model handles each section within context and avoids missing important details. Here’s a small example of how you might start preparing the data: import re# Example: using the transcript_text we fetched earliertext = transcript_text# Remove extra spaces and line breaksclean_text = re.sub(r'\s+', ' ', text).strip()# Split sections (this is a heuristic; real-world transcripts vary slightly)if "Question-and-Answer" in clean_text: prepared, qna = clean_text.split("Question-and-Answer", 1)else: prepared, qna = clean_text, ""print("Prepared Remarks Preview:\n", prepared[:500])print("\nQ&A Preview:\n", qna[:500]) With the transcript cleaned and divided, you’re ready to feed it into Groq’s LLM. Chunking may be necessary if the text is very long. A good approach is to break it into segments of a few thousand tokens, summarize each part, and then merge the summaries in a final pass. Summarizing with Groq LLM Now that the transcript is clean and split into Prepared Remarks and Q&A, we’ll use Groq to generate a crisp one-pager. The idea is simple: summarize each section separately (for focus and accuracy), then synthesize a final brief. Prompt design (concise and factual) Use a short, repeatable template that pushes for neutral, investor-ready language: You are an equity research analyst. Summarize the following earnings call sectionfor {symbol} ({quarter} {year}). Be factual and concise.Return:1) TL;DR (3–5 bullets)2) Results vs. guidance (what improved/worsened)3) Forward outlook (specific statements)4) Risks / watch-outs5) Q&A takeaways (if present)Text:<<<{section_text}>>> Python: calling Groq and getting a clean summary Groq provides an OpenAI-compatible API. Set your GROQ_API_KEY and pick a fast, high-quality model (e.g., a Llama-3.1 70B variant). We’ll write a helper to summarize any text block, then run it for both sections and merge. import osimport textwrapimport requestsGROQ_API_KEY = os.environ.get("GROQ_API_KEY") or "your_groq_api_key"GROQ_BASE_URL = "https://api.groq.com/openai/v1" # OpenAI-compatibleMODEL = "llama-3.1-70b" # choose your preferred Groq modeldef call_groq(prompt, temperature=0.2, max_tokens=1200): url = f"{GROQ_BASE_URL}/chat/completions" headers = { "Authorization": f"Bearer {GROQ_API_KEY}", "Content-Type": "application/json", } payload = { "model": MODEL, "messages": [ {"role": "system", "content": "You are a precise, neutral equity research analyst."}, {"role": "user", "content": prompt}, ], "temperature": temperature, "max_tokens": max_tokens, } r = requests.post(url, headers=headers, json=payload, timeout=60) r.raise_for_status() return r.json()["choices"][0]["message"]["content"].strip()def build_prompt(section_text, symbol, quarter, year): template = """ You are an equity research analyst. Summarize the following earnings call section for {symbol} ({quarter} {year}). Be factual and concise. Return: 1) TL;DR (3–5 bullets) 2) Results vs. guidance (what improved/worsened) 3) Forward outlook (specific statements) 4) Risks / watch-outs 5) Q&A takeaways (if present) Text: <<< {section_text} >>> """ return textwrap.dedent(template).format( symbol=symbol, quarter=quarter, year=year, section_text=section_text )def summarize_section(section_text, symbol="NVDA", quarter="Q2", year="2024"): if not section_text or section_text.strip() == "": return "(No content found for this section.)" prompt = build_prompt(section_text, symbol, quarter, year) return call_groq(prompt)# Example usage with the cleaned splits from Section 3prepared_summary = summarize_section(prepared, symbol="NVDA", quarter="Q2", year="2024")qna_summary = summarize_section(qna, symbol="NVDA", quarter="Q2", year="2024")final_one_pager = f"""# {symbol} Earnings One-Pager — {quarter} {year}## Prepared Remarks — Key Points{prepared_summary}## Q&A Highlights{qna_summary}""".strip()print(final_one_pager[:1200]) # preview Tips that keep quality high: Keep temperature low (≈0.2) for factual tone. If a section is extremely long, chunk at ~5–8k tokens, summarize each chunk with the same prompt, then ask the model to merge chunk summaries into one section summary before producing the final one-pager. If you also fetched headline numbers (EPS/revenue, guidance) earlier, prepend them to the prompt as brief context to help the model anchor on the right outcomes. Building the End-to-End Pipeline At this point, we have all the building blocks: the FMP API to fetch transcripts, a cleaning step to structure the data, and Groq LLM to generate concise summaries. The final step is to connect everything into a single workflow that can take any ticker and return a one-page earnings call summary. The flow looks like this: Input a stock ticker (for example, NVDA). Use FMP to fetch the latest transcript. Clean and split the text into Prepared Remarks and Q&A. Send each section to Groq for summarization. Merge the outputs into a neatly formatted earnings one-pager. Here’s how it comes together in Python: def summarize_earnings_call(symbol, quarter, year, api_key, groq_key): # Step 1: Fetch transcript from FMP url = f"https://financialmodelingprep.com/api/v3/earning_call_transcript/{symbol}?quarter={quarter}&year={year}&apikey={api_key}" resp = requests.get(url) resp.raise_for_status() data = resp.json() if not data or "content" not in data[0]: return f"No transcript found for {symbol} {quarter} {year}" text = data[0]["content"] # Step 2: Clean and split clean_text = re.sub(r'\s+', ' ', text).strip() if "Question-and-Answer" in clean_text: prepared, qna = clean_text.split("Question-and-Answer", 1) else: prepared, qna = clean_text, "" # Step 3: Summarize with Groq prepared_summary = summarize_section(prepared, symbol, quarter, year) qna_summary = summarize_section(qna, symbol, quarter, year) # Step 4: Merge into final one-pager return f"""# {symbol} Earnings One-Pager — {quarter} {year}## Prepared Remarks{prepared_summary}## Q&A Highlights{qna_summary}""".strip()# Example runprint(summarize_earnings_call("NVDA", 2, 2024, API_KEY, GROQ_API_KEY)) With this setup, generating a summary becomes as simple as calling one function with a ticker and date. You can run it inside a notebook, integrate it into a research workflow, or even schedule it to trigger after each new earnings release. Free Stock Market API and Financial Statements API... Conclusion Earnings calls no longer need to feel overwhelming. With the Financial Modeling Prep API, you can instantly access any company’s transcript, and with Groq LLM, you can turn that raw text into a sharp, actionable summary in seconds. This pipeline saves hours of reading and ensures you never miss the key results, guidance, or risks hidden in lengthy remarks. Whether you track tech giants like NVIDIA or smaller growth stocks, the process is the same — fast, reliable, and powered by the flexibility of FMP’s data. Summarize Any Stock’s Earnings Call in Seconds Using FMP API was originally published in Coinmonks on Medium, where people are continuing the conversation by highlighting and responding to this story
Compartir
Medium2025/09/18 14:40
Compartir