Inspiration

A film shooting day costs anywhere from $50,000 to a few hundred thousand dollars. And the entire day, the 1st Assistant Director has one job: figure out if the crew's going to make it — finish the pages before overtime, before the light goes, before someone's contractual rest period gets breached.

They do that with a clipboard. And math in their head.

That's genuinely it. No instrumentation, no baseline, no alert. Nobody knows the day is lost until it's already lost, usually mid afternoon, by which point every option left is an expensive one.

Every other complex, time-critical operation on earth runs on telemetry and alerting. Film sets run on a clipboard and a walkie. That gap is where MARTINI came from.

What it does

MARTINI treats a shooting day like a production system, not a spreadsheet.

  • It provisions its own monitoring. Give it a day plan and the agent computes that day's error budget, then creates the actual Grafana dashboard and alert rules for it — live, through the Grafana Cloud MCP server. It even picks the alert threshold itself, based on how much slack the day actually has.
  • It instruments the day. Pages shot, setups, takes, each performer's turnaround clock, all streaming into Grafana as real OpenTelemetry metrics.
  • It watches the burn rate. When a scene runs long and the budget starts draining, the alert the agent wrote earlier fires — against its own dashboard.
  • It replans. Gemini looks at the day's actual state through Grafana and proposes recovery options, grounded in what's actually in the scenes, not just how long they run.
  • And then the part that actually matters: a deterministic gate checks every option against real production rules — turnaround minimums, meal penalties, minor working hours — before it's ever shown as viable. The agent proposes. The rules dispose. Gemini doesn't get a vote on what's legal.

You can also upload a real screenplay PDF and MARTINI breaks it into scenes itself using Gemini's multimodal document understanding, builds a full shooting day, and runs the same live loop against your own production instead of the bundled sample.

How we built it

  • Agent: google-adk, native MCPToolset, no wrapper libraries
  • Model: Gemini on Vertex AI in production
  • Partner integration: Grafana Cloud MCP server — read and write. Dashboards, alert rules, incidents, all created live at runtime
  • Telemetry: OpenTelemetry → Grafana Cloud OTLP
  • Backend: FastAPI, SSE for live state
  • Frontend: React 19 + TypeScript + Tailwind, no chart library — the visuals are hand-built SVG, because I wanted it to look like actual production paperwork, not another dashboard
  • Deploy: Docker on Cloud Run, secrets in Secret Manager

Challenges we ran into

Most of the real challenges weren't technical, they were sequencing. I lost a lot of time to a GCP billing account that kept failing verification, which is a genuinely unglamorous thing to burn hackathon time on.

That pushed me to build the whole agent loop against the free-tier AI Studio API first, which caps at 20 requests a day. So I had to design an explicit quota-fallback path from the start — and the one rule I held onto through all of it was that the gate always re-evaluates live, even when the recovery options themselves come from a cached run. I never wanted the rejection moment to be fake, even under quota pressure. Eventually moved the whole thing to Vertex AI so the deployed app isn't quota-limited for judges.

The other real challenge was making the console readable. It's easy to build something that looks like a monitoring dashboard. Getting it to read like something an actual 1st AD could glance at for five seconds and understand took several passes.

Accomplishments that we're proud of

Getting the agent to genuinely write to Grafana, not just read from it — creating its own dashboard, its own alert rules, opening its own incidents, live, through MCP. And the gate: watching it reject a real, Gemini-proposed option for a real turnaround violation, computed by actual deterministic code, not a hallucinated excuse.

What I have learned

That the hard part of an agentic demo isn't the agent, it's the constraints around it. Anyone can get an LLM to suggest a fix. The thing that makes it trustworthy is a hard boundary the model can't argue its way past — and building that boundary as plain, editable data rather than more prompt engineering made the whole project feel more honest.

Also learned a lot more than I wanted to about Grafana Cloud service account scopes and GCP billing verification.

What's next for MARTINI

Real cast-to-scene continuity across a multi-day shoot, and pulling call sheets directly instead of manual cast entry.

Built With

Share this project:

Updates

Submission history