-
-
The same song, rated two different ways: red when it plays, green when a character names it.
-
Start with a PDF screenplay.
-
Parsed deterministically, by measuring the document's own margins.
-
Four stages, and the arc moves only when one genuinely completes.
-
Research establishes facts. A separate stage applies the rubric.
-
Every finding shows its reasoning, the rights required and the rights holders.
-
The sources it read and the exact searches it ran, kept per entity.
-
What it flags red: brand disparagement, and a copyrighted artwork in shot.
-
And what it leaves green, because a tool that flags everything is useless.
-
Findings and script are linked both ways. Light theme.
-
Filter by the kind of right involved.
-
Filters never silently hide the finding you had open.
-
Track what still needs a human ruling.
-
Export a clearance report, with the disclaimer on the cover.
Inspiration
Clearing legal rights for a film is expensive and requires a lot of reading. Someone has to scan a script to find every song, brand, artwork, location and real person. Then they have to figure out if each item needs a license. Missing just one can halt a movie's release. We quickly realized a simple keyword scanner does not work. If a script says a song is playing on a radio, you need a costly license. If a character just talks about the song in dialogue, you do not. The context is everything.
What it does
Our AI tool reads the script like a human and understands the layout automatically. It spots every real world reference and groups duplicates together. Then it searches the web up to six times for each item to gather facts. Finally, it grades every mention as red, amber or green based strictly on how it is used in the scene. You get a clean PDF report showing the required rights, the owners, the sources it read and the searches it ran.
How we built it
We built the backend with FastAPI and Postgres inside Docker. The frontend runs on Next.js. We use Google ADK to run our agents. Gemini Flash spots the references and Gemini Pro grades the risks. To save time and money, our research stays in a shared cache. We also completely separated the research step from the judgment step. The web search tool only looks up facts so it stays totally objective.
Challenges we ran into
Challenges we ran into • Silent failures: Our test runs kept freezing at the final step. We blamed the AI but we actually had our error logs turned off. A simple time zone mix up in our code was quietly crashing the entire system right at the finish line. • Deleted warnings: A tiny connection error caused ten items to lose their risk ratings. Worse, the system still called the run a success. We added a smart retry system and changed our rules so a run only passes if every single item gets a full rating. • Database jams: Our research step runs six web searches at once. Sending them all through one database connection caused crashes so we had to give each search its own dedicated lane.
Accomplishments that we're proud of
We built a tool that actually understands the difference between showing a brand on camera and just talking about it in dialogue. On our test script it successfully found and graded 23 different mentions across 11 items in about three minutes. It successfully does the heavy lifting of reading and looking things up so a human expert can jump straight to reviewing the final report.
What we learned
We learned that most of our bugs were exactly the same issue. The information existed but our own system threw it away before we could see it. We also learned that a test that never fails is completely useless. We now intentionally break our code just to make sure our alarms actually go off. Finally we used color contrast math to find the perfect shades for our warning colors so they are perfectly readable on both a dark screen and a printed white paper report.
What's next for Script to Clearance
• Adding live status updates so you can watch the progress without refreshing the page. • Building a bulk upload feature for entire stacks of scripts. • Creating special warning flags for tricky edge cases where a human definitely needs to double check the results.
Built With
- alembic
- asyncpg
- docker
- fastapi
- gemini
- google-adk
- google-cloud-aiplatform
- google-gemini-2.5-flash
- google-gemini-2.5-pro
- next.js
- parallel
- pdfplumber
- postgresql
- pydantic
- python
- react
- reportlab
- sqlalchemy
- tailwindcss
- tanstack-query
- typescript
- uvicorn
Log in or sign up for Devpost to join the conversation.