Content & creative
Build once. Publish as structured content.
Organise images and video in the Media Library or build responsive scenes in the Composer. Releases, approval and data-bound conditions keep creative changes deliberate and traceable.
Create content that adapts to every screen, sell its airtime with a promise you can check, and prove, play by play, what actually ran.
Non-commercial · not sold, licensed or monetised
AdPrecision is a working, non-commercial research platform developed in the course of research on recommender systems for public displays. The capabilities shown here are shipped unless explicitly marked as vision or research direction.
Why it existsThe platform
AdPrecision connects content, scheduling, commercial inventory, physical screens and delivery evidence in one model. Each step feeds the next instead of ending at a system boundary.
Media, AI Studio, scenes, dynamic creative and live data.
Playlists, channels, events and airtime rules.
Products, rates, bookings and guarantees.
Players, stores, zones and remote control.
Play events, delivery, comparison and settlement.
Content & creative
Organise images and video in the Media Library or build responsive scenes in the Composer. Releases, approval and data-bound conditions keep creative changes deliberate and traceable.
Programming
Order, weight and time content through playlists and channels. Blend owned, direct and programmatic demand with explicit fallback.
Physical network
Stores and zones hold the fleet. A store's opening hours and holiday calendar apply to every screen in it, on the store's own time zone.
Governance
Tenant isolation, Spaces, role permissions, advertiser memberships and content approval shape what each person or machine can see and change. An administrator can view the console as one user, never seeing more than that user may. A platform operator can operate as a user for at most 30 minutes, with a reason, under that user's rights and the operator's own name; approvals and answers to a quote stay the person's own. Sign-in supports two-factor authentication.
Targeting on every level
Geography, stores, zones, screen areas, categories, time and live data are each a place to set a rule, and they stack: a screen plays only what passes every level that is switched on. Category rules use one algebra wherever they appear: playlist items, sales products and booking spots. Switch any level off or on to see what it removes.
SpaceRegion East › Retail. Decides who may see, book and approve this booking. Not where it plays.
Where it plays 2 of 24 screens
A data condition reads the screen’s latest snapshot; stale data falls back to safe content.
The film
Create, AI Studio, program, sell, operate and prove: the whole path as one concept film, with music. Nothing plays, and nothing but the poster loads, until you press play.
What sets it apart
Booking fit, AI Studio, scenario switching, data conditions, synchronised takeover, why-this-played and the proof chain are built into the same domain model as everything else. Each one is shipped and documented; pick a chapter to jump straight to it.
AI Studio
An image studio built into the platform and tailored to retail media, running on FLUX by Black Forest Labs through its EU endpoint. Every result lands in the Media Library as an ordinary asset: marked as AI, traceable to its prompt and sources, and released through the same approval as everything else.
A prompt builder for subject, product, setting and style, and a checker that flags what the model is known to get wrong before anything is sent.
Results carry the IPTC "trained algorithmic media" mark in the file, keep prompt, model and sources as provenance, and pass the normal content approval.
Generate, or edit with AI, straight from a scene in the Composer; the result comes back into the scene it was made for.
Each tenant runs under its own credit limit per week or month, set by the platform operator, with a usage view down to the single request.
One source, several stand-alone images by daypart, weather, screen format or language; each becomes an ordinary playlist item. For one composition that changes itself per screen, see Dynamic creative.
Media Studio
Cut an image or a video into 2 to 32 wall panels, reframe it for another format, trim a video or pull a still from it. One server-side job runs them all; nothing is encoded in the browser, and every output is a new asset in the library.
Dynamic creative
A composition reads live data, such as the weather or each branch's own stock, and carries states: rules on time, live data, place, scenario or language. At the start of every play, each screen decides which states apply and draws that version, in its own language where the composition has one. Every play records the version it showed.
Feeds are fetched on the server and mapped to named fields. One ERP file can be split into one value per branch, and lists can be filtered, sorted and counted.
Each element says what it shows per state, in one priority order. A tolerance band keeps a state from flickering around its threshold.
Text is machine-translated on first entry. By default, while content approval is on, every declared language is reviewed before release.
Each play records its states, its language and what every element drew. Reporting reads the same figures per state, language and element.
Translation
Composition texts are translated through DeepL on first entry. A glossary keeps brand names as they are, a run shows its characters and cost before anything is sent, and release can wait until every declared language is reviewed. A screen takes the first of its own languages that the composition declares, and otherwise English.
Retail media
The commercial engine sits on the same scheduling and playback facts as the operator workflow. Capacity, delivery and settlement therefore describe the screen network that actually ran.
Direct · insertion order
Or the buyer requests first, and the seller confirms, sends an offer or sends it back.
Programmatic · VAST
No fill anywhere, and the channel's own content plays. It all runs on the server: a hop is capped at 800 ms, and the endpoint and its key never reach the screen.
Both fill one airtime budget, measured in seconds.
Availability returns an explainable verdict per screen before commitment; when a request conflicts, ranked repairs show what would work.
Direct bookings, SSP demand and playlist content share one airtime budget measured in seconds, not unequal spot counts.
Append-only play events feed pacing, proof of play, delivery reports and settlement instead of planned schedules.
A customer portal for advertisers and agency teams: a join link, requests that confirm, hold capacity or wait, and a buyer agent on the same rules.
Hours are counted on a half-hour grid of the hours a screen is really open. Confirmation freezes every price input, so a re-snapshot reproduces the quote.
Price per thousand plays bills plays that ran to completion inside sealed proof-of-play spans, never more than planned; the rest shows as bonus.
An ordering promise on top of the airtime promise: competing advertisers do not play back to back, and every exception is counted.
Plays are sealed hourly, anchored daily and signed by the screen where it holds a key. No blockchain: an offline script checks any export.The trust ladder →
Delivery quality
Reach says how many screens could have shown a campaign. These readings say whether its promise is being kept, and what actually ran. They come from the same play facts, and the server explains every shortfall in words, the same in the console, the customer portal and the API.
On track, at risk or behind, per booking and per day, against the airtime owed so far. A booking that falls behind shows it mid-flight, while there is still time to repair it.
How pacing is computed →How much is missing, and why. A share gap can be repaired; a volume gap is airtime that never existed, because the screens ran less than planned. The split says whether to fix the schedule or the screens.
Share and volume gaps →Where a saved booking is planned to land: eligible, cut out, crowded or closed, as a day strip or an hour grid. Read before the flight, a hole in the plan is fixed before it becomes a shortfall.
Read the coverage view →A verdict per screen before anything is sold, and ranked repairs that make a booking fit, such as moving to free hours or cutting out the clashing screens. Nothing is promised that the screens cannot carry.
Capacity and availability →Planned against measured seconds, per screen, as a post-flight export for finance. Price per thousand plays bills only plays that ran to completion, so the invoice follows what ran.
Settlement and billing →Every finished play is sealed hourly, anchored daily and, where the screen holds a key, signed by the device. A small offline script checks any export.
How the trust ladder works →When no other paid spot is due and no local content can take the turn, a booking still plays right after its competitor: the airtime promise outranks the adjacency preference, and the exception is recorded. The booking's delivery report lists those cases per local day with the seconds they took, so a separation clause is checked, not trusted.
Competitive separation →One composition plays different versions, so reporting says which ran: plays grouped by state, language or element, network-wide or per booking. A language reached through English is marked fallback, which shows where a translation is still missing.
Versions in reporting →A model of play-time energy, not a meter reading: measured seconds times the screen's datasheet draw and its country's grid factor. Only finished plays are charged, and the grams roll up per booking, with the formula and its inputs documented.
Carbon methodology →Screen operations
Presence, telemetry and play events explain the fleet at a glance. Live Preview verifies the visible output, while bounded remote commands leave a correlated audit trail.
Change a schedule and every affected player is told over its open connection; operator views update as events arrive.
Infer what each screen area is playing from fresh presence and proof-of-play facts, with stream and source provenance.
Identify, repair, restart, collect diagnostics and run safe cache maintenance with explicit lifecycle receipts.
Profiles, schedules, media and data are held at the edge so playback can continue through a network interruption.
A scenario tree gates playlists, items and events. One switch on a channel, by hand, by API or by rules, changes what plays; the schedule stays as it is.
A shared start instant on an absolute UTC grid: the same motif in the same second on many screens, or one creative split across a wall.
A player profile locks an Android player into kiosk mode, with a PIN as the way back out.
Draw one screen's programme at a chosen moment without a device, or follow what a device reports as it plays.
Integrations & automation
Browsers, players, customer systems and AI clients each receive a purpose-built surface. None of them reimplements scheduling or advertising rules.
REST and server-sent events for the Angular console, including the complete operator workflow.
Browser-facing · JWTSignalR control and read-only content delivery for paired Flutter players at the edge.
Device-facing · Player tokenVersioned REST for products, availability, bookings, media, delivery and settlement, with signed webhooks and a Scalar reference.
Customer-facing · scoped API keyTyped tools on two paths: the operator's Program, Advertising, Media Library and Player Operations workflows, and a buyer agent's own order book.
Agent-facing · Service User API keyA focused agent surface
MCP exposes workflows and resources, not a REST catalogue with different names. Tenant, permission, lifecycle and concurrency rules remain enforced by the same application handlers. A buyer's key opens only its own path and sees only its own advertisers.
Show me players in Vienna that are offline or in maintenance, then explain what the affected screens last played.
Does the Spring launch product fit two weeks in March? Check fit and price, save the draft and request it.
Counted in rules
A research project has no reach, customers or screens under contract to show. The figures below are how the platform behaves, each one stated in the documentation.
Capabilities
Every line below names a shipped capability, grouped by the five steps of the platform. Four of them are marked as flagships.
Each capability has its own page in the documentation.
Research
AdPrecision is developed in the course of research on recommender systems for public and digital-out-of-home displays: anonymous, momentary audiences and recommendations that must respect hard commercial and operational constraints.
Bookings and guarantees define promises. Capacity and delivery gaps define constraints. Proof of play and yield provide measurable outcomes. Together they turn “pick a good ad” into a problem that can be explained, evaluated and repaired.
Explore the system