Inspiration

When the day breaks, rebuild it around who shares a crowd.

A storm does more than interrupt a festival. It turns a carefully arranged day into competing promises: keep the headliner, respect the finish time, give artists enough changeover, and avoid making the same fans choose twice.

Counterset is for the festival programmer holding the radio at that moment. It turns an incident message into a proposed timetable, with Qloo cultural evidence inside the decision and a person in control of approval.

Our starting point was Bonnaroo's storm-hit Sunday, 14 June 2026. Press reports listed 11 cancelled sets. We reconstructed the published day and the reported outcome, then asked which alternatives fit an explicit set of operating assumptions.

Bonnaroo, 14 June 2026: a storm cancelled 11 sets. The replay explores alternatives under explicit assumptions.

Bonnaroo, 14 June 2026: a storm cancelled 11 sets. The replay explores alternatives under explicit assumptions.

What it does

Your day → Fix it → Send it.

Start with one of four published festival days, edit its lineup, or paste your own spreadsheet rows. The desk identifies the acts through Qloo and shows the overlapping pairs it flags, including within-bill ranks and the cultural tags behind the signal. Unconfirmed identities remain unknown.

Pick a published festival day, or paste a new lineup for live Qloo lookups.

Pick a published festival day, or paste a new lineup for live Qloo lookups.

Describe a stage closure, late arrival or site-wide interruption in plain language. Set the last finish, the shortest acceptable sets and whether an act may be dropped. The agent records the incident and calls a constraint solver to explore plans within those limits. When no plan fits, it offers specific changes that have themselves been checked.

A saved agent run: inspect the attempted rescues and the solver response at each step.

A saved agent run: inspect the attempted rescues and the solver response at each step.

The result includes a timetable, a recommendation, a trace of attempted repairs and a comparison against the same solver without Qloo. Ask why an act moved, inspect a similar crowd, or request another plan. Nothing is committed until the programmer approves. Approval runs validation again, saves a numbered version, and produces a shareable timetable plus draft messages for affected acts.

The agent proposes. The programmer approves and sends.

The Bonnaroo replay: 27 sets instead of 17, under stated assumptions

The recorded demonstration uses the real 28-set timetable across five main stages and a reconstruction of the reported cancellations and revised times.

Scenario Sets that play Cancelled or dropped Known shared-crowd clashes
Reconstructed outcome on the day 17 of 28 11 1
Counterset: full-length sets only 24 of 28 4 0
Counterset: sets may shrink to 75% 27 of 28 1 0

The 75% replay finishes by midnight. It assumes every act is still available, accepts a shorter performance where permitted, and can move within the modelled stage groups. Changeovers are inferred from the published timetable. Three protected headline sets remain full length. Crew hours, flights, site conditions and artist consent are not established.

This is a feasible alternative inside a model, not a claim that the festival should have done it. It also requires substantial changes: the recorded recommendation moves 24 sets and shortens the day’s performances by 160 minutes in total. The operational cost is visible, rather than hidden behind the headline.

Recorded Bonnaroo rescue: 27 of 28 sets play, with zero clashes among known Qloo pairs.

Recorded Bonnaroo rescue: 27 of 28 sets play, with zero clashes among known Qloo pairs.

What Qloo changes

A timetable can be technically legal and still make the same audience choose between two acts. Counterset uses Qloo to make that cultural cost part of the repair.

  • Identity and popularity — /search. Resolve the billed performer and obtain Qloo's popularity signal. A doubtful match is not silently accepted.
  • Within-bill relationships — /v2/insights. Ask each confirmed act to rank the exact bill. Reciprocal near-top ranks identify the pairs the planner should protect. Ranks are interpreted within their own response, not compared as universal audience percentages.
  • Inspectable explanations — /v2/analysis/compare. Show the taste tags two crowds share so the programmer can understand and challenge a flagged relationship.

Compare the published day, reconstructed as-run timetable and the proposed rescue.

Compare the published day, reconstructed as-run timetable and the proposed rescue.

In the recorded 75% rescue, removing both Qloo pair signals and popularity still permits 27 sets, but leaves two known shared-crowd clashes and drops Spacey Jane instead of Little Stranger. That is one recorded solver outcome; the particular drop without popularity can vary because those acts then tie in the objective.

The comparison is the same constrained solver with Qloo removed, not a fabricated LLM-only baseline. When Qloo changes nothing, the desk says so. “Zero clashes” refers to known flagged pairs; it is not a measurement of fan satisfaction, attendance or every possible audience overlap. Eleven Bonnaroo acts lack a usable confirmed Qloo identity.

Inspect what changed when the same solver ran without Qloo signals.

Inspect what changed when the same solver ran without Qloo signals.

How we built it

The system separates three jobs that need different kinds of trust.

The agent interprets and explores. Gemini selects structured tools in a bounded loop. Incident facts must quote the supplied message. The controller enforces the programmer's terms and requires comparisons before accepting a recommendation. Summaries are checked against computed tool results.

The solver places the sets. OR-Tools CP-SAT handles stage occupancy, closure windows, changeovers, artist limits, protected performances and rescue terms. It prioritizes dropped sets, which acts are dropped, entered attendee must-sees, Qloo clashes, shortening and movement. It reports proven objectives separately from the best result found before time runs out.

The validator recounts. A separate Python implementation checks the proposed grid and objective values. Approval validates again. The model cannot invent placements or approve its own recommendation.

FastAPI serves the application; vanilla JavaScript renders the interactive desk. SQLite stores versions with stale-proposal checks. Qloo and Gemini requests stay server-side, with caching and usage limits. An MCP interface exposes audit, rescue and evidence tools to other agents. The public MIT-licensed repository includes setup, deployment, evaluation and validation documentation.

A person approves the proposal; the independent validator checks it again.

A person approves the proposal; the independent validator checks it again.

Challenges and what we learned

Identity mistakes matter more than a polished explanation. A same-name artist can be the wrong performer. Unknowns stay visible instead of becoming reassuring zeroes.

A working solver is not proof that the cultural signal is correct. Our published evaluation includes a test specified before fetching Qloo data: press-named Outside Lands clashes did not consistently rank strongly. Only 3 of 8 testable pairs were in the stronger half. We report that result. Qloo's demonstrated advantage here is usable cultural coverage and a decision the programmer can inspect; real audience benefit remains to be measured.

A plan that fits may still be hard to run. Shortening sets and moving many artists can be operationally expensive. Counterset exposes those costs, assumptions and unresolved facts before approval. When constraints conflict, a useful answer explains what would have to change.

Saved and live must be distinguishable. An unchanged worked example plays a labelled recording, including its attempted steps. Editing the message, settings or lineup triggers a fresh run. The supplied video and animated walkthrough show that recorded example; they are not a promise of live speed. On the small hosted server, fresh model-and-solver runs can take roughly one to two minutes, and the first visit may need a cold start.

Ask why an act moved, inspect similar crowds, or request a new proposal.

Ask why an act moved, inspect similar crowds, or request a new proposal.

Accomplishments

Counterset connects cultural evidence to an operational decision and carries that decision through to approval and handoff. Judges can inspect the input, the Qloo evidence, failed attempts, constraint checks, the counterfactual and the resulting timetable in one product.

The validation work includes solver checks against brute-force solutions, constraint and versioning tests, and browser walkthroughs. The evaluation documentation keeps software correctness, cultural-proxy validity and real-world usefulness separate.

Try it yourself

Open the live desk. No account is required.

  1. Choose Bonnaroo Sunday and check the day. Run the unchanged incident to watch the labelled saved agent replay.
  2. Compare Before, What really happened, Without Qloo and With Qloo. Read the assumptions and inspect which act was dropped.
  3. Ask why an act moved. Approve the proposal, open its shareable timetable and review the draft messages.
  4. For a fresh run, change the incident or paste your own lineup. Allow time for the live model and solver; the saved replay remains the quickest introduction.

Watch the demonstration · Read the source and setup instructions · Inspect the evaluation

Share the approved timetable and copy the affected acts’ draft messages.

Share the approved timetable and copy the affected acts’ draft messages.

What's next

Blind review with festival programmers is the next meaningful test: do they prefer the Qloo-protected plans, and are the required moves practical? We also want confirmed artist availability, production constraints and attendee must-see preferences, which the solver already prioritizes above the Qloo proxy when supplied.

Counterset is an independent hackathon project, not affiliated with Bonnaroo, Lollapalooza, Outside Lands or any performer. Published schedules and reported incidents are credited in the repository; replay assumptions remain visible in the app.

Built With

Share this project:

Updates

Submission history