Open Content Label · draft spec v0.1 · proposal

One open fingerprint on every piece of digital media

Every web page, website, app, video and chatbot carries a small signed label: who it suits (age band) and what it does to the viewer (influence profile). Creators attach it, independent raters sign it, and platforms, parents and regulators read it.

Nobody has to send viewing data anywhere. Each label is public and machine-readable, so a regulator can measure a whole market from the labels themselves. ShiniFrontiers is one rater under an open spec, not the measuring body.

What the fingerprint is

A label, a binding and a signature

The fingerprint has three parts. Together they say what was rated, how it was rated and who stands behind the rating.

PartWhat it holdsWhy it matters
LabelAge band (all_ages, mild, teen, older_teen, adult), shown on local scales; 12 influence categories scored 0–3; flags such as undisclosed_ad; rating date and expiry.One vocabulary for every medium and every country. Local scales are a display choice, not a separate rating.
BindingWhat the label is about: a URL scope for web pages and sites, package ID and signing certificate for apps, a file hash for videos, checked by the platform at upload, an endpoint and version for chatbots.A label copied onto different content does not match, so an uploader cannot borrow another video's rating.
SignatureThe rater signs label and binding together (Ed25519). Raters publish their public keys at /.well-known/ocl-keys.json.Anyone can check who rated an item without asking a central server, and a forged or edited label fails the check.
{
  "spec_version": "0.1",
  "label_id": "7Q2M9K4T",
  "subject": { "kind": "web_page", "scope": "https://example.org/games/*" },
  "age_band": "teen",
  "influence": { "fun": 2, "education": 1, "inspiration": 1, "fight": 1,
                 "threat_fear": 0, "sexual": 0, "substances": 0, "risky_stunts": 2,
                 "commercial_push": 3, "political": 0, "body_pressure": 1, "hate": 0 },
  "flags": ["undisclosed_ad", "imitation_risk"],
  "rater": "rate.shinifrontiers.com",
  "method": "independent",
  "confidence": "high",
  "rated_at": "2026-10-31",
  "expires_on": "2027-01-29",
  "signature": "eyJhbGciOiJFZERTQSJ9..."
}
Who does what

Four roles, no central tracker

Creator or publisher

Attaches the label

Adds one tag, file or metadata field to the item. Free to self-declare a label; an independent rating is optional.

Rater

Rates and signs

Any rater following the open spec. Self-declared labels say "method": "self". Independent raters such as ShiniFrontiers sign with their own key.

Platform, store, browser, parent

Reads and acts

Uses the label to gate by age, tune recommendations or filter on a child's device. Keeps the label when content is re-uploaded.

Regulator

Measures and audits

Reads public labels to measure coverage and risk across a market, spot-checks ratings by re-rating samples, and holds raters to account.

How to attach it

One method per medium, nothing re-encoded

Two lines in the page head

  • The link points readers to the full label record.
  • The optional meta tag carries the signed label itself, so it can be checked offline.
  • A page label overrides the site label for that page.
<link rel="ocl-label"
      href="https://rate.shinifrontiers.com/label/7Q2M9K4T">
<meta name="ocl" content="eyJhbGciOiJFZERTQSJ9...signed-label">
Rating

Rating reads the item and never changes it

MediumWhat the rater looks atWhat it keeps
Web page or websitePublic pages, as a visitor sees them: text, screenshots, trackers, permission requests, autoplay, age gates.Label and report.
App or gameStore listing first; full check runs the app.Label, report, package binding.
VideoFrames and audio, processed in memory.Label and fingerprint. The video itself is never stored.
ChatbotA scripted set of child-risk conversations.Label and report.
Measurement

How a regulator measures from labels

Because every label is public, signed and found at a known address, a regulator can measure without collecting anything about viewers:

  • Coverage. Share of services, apps and top videos that carry a valid, unexpired label.
  • Risk across a market. Age bands and influence scores per platform, per category, over time.
  • Rater accuracy. Re-rate a random sample; raters whose labels drift lose standing.
  • Platform behaviour. Whether platforms keep labels on upload and act on them (age gates, recommendations).
Why now

Earlier labels and what is different here

Earlier schemeWhat happenedOCL
PICS / ICRA web labels (1990s–2010)Voluntary, and few browsers or platforms read them. Abandoned.Proposed as a regulatory requirement, read by platforms.
IARC / PEGI app ratingsAge only, apps and games only.Age plus influence, across all media.
C2PA content credentialsSays where content came from, not who it suits.Travels inside C2PA as one more assertion.
Our proposal

Suggestions for the EU KIDS Act

Our feedback to the EU KIDS Act proposal:

  1. Services in scope carry a machine-readable label in an open format such as OCL, at a known address per medium.
  2. Labels are signed, bound to the content and expire, so they can be checked without a central server.
  3. Platforms read the label when content is uploaded, keep it with the post as data, show it to viewers and expose it to the regulator through a machine-readable interface. The rule is about the label, not the file, so re-encoding does not matter.
  4. Content without a valid label counts as unrated and is not shown to child accounts by default. This gives every creator who wants a young audience a reason to label, and covers re-uploads that drop the label.
  5. Labels are trusted in order: independently signed, then self-declared signed, then unsigned tags. A false self-declared label is a breach, found by regulator sampling.
  6. Any rater may sign labels under the open spec; the regulator audits raters by sampling.
  7. Labels hold ratings only, never personal data.

This page describes a draft. Field names, file locations and the signature format are open for comment and will be fixed in OCL spec v0.1.