A catalogue in, a disclosure label per item out — worded and length-capped the way each surface wants it, plus a machine-readable manifest of the whole library and a CSV of the lot.
Nothing opens in this browser — this one takes a job and does the work on our own graphics cards in Oregon. The free allowance below is how you try it: 30 items, no card and no payment, on the key you are issued.
Which obligations bite is worked out in Python. A label that fails the does-it-actually-disclose check twice falls back to a plain Python line and is not charged.
The problem
The rules say AI-generated or AI-modified content has to be disclosed, machine-readably where that is possible, in a way the person seeing it will actually understand. That is not one decision for the business — it is one decision per item, multiplied by every surface the item appears on, each of which caps the label at a different length and wants it in a different place. Doing it by hand is not a project with an end.
One label per item per surface, inside that surface's own cap. A label that does not fit is not shipped at a length the surface will truncate — truncation is how a disclosure stops disclosing.
A machine-readable manifest of the whole library alongside the human-readable labels, because the obligation is to both and most tools only do the second.
A label that twice fails the check asking whether it actually discloses anything drops to a plain line written in Python — and that item is not charged. A clever label that does not disclose is worse than a blunt one that does.
Whether an item is in scope — generated or modified, which surface, which jurisdiction, what kind of content — is a rules question with yes-or-no answers, and it is answered in code so it answers the same way every time. The model writes the wording. It never decides whether a disclosure is required, because that is the part a regulator would ask you to justify.
How it works
Items with whatever you hold about how each was made — fully generated, modified, untouched — and the surfaces it appears on. The scope decision needs that column and will say so if it is missing.
In Python, per item: in scope or not, and under which obligation. Printed on the row with the rule named, so an item you think is wrongly scoped is visibly wrongly scoped.
A label per item per surface, a machine-readable manifest for the library, and one CSV holding all of it for whoever has to file or audit.
What it will never do
A disclosure tool that produces something which looks like a disclosure and is not one has done active harm. Two of these refusals are about exactly that.
Pricing
An item is a catalogue item labelled, across every surface you asked for — not one unit per surface. Thirty free on every key is enough to label a small release and read the manifest.
A small release labelled across every surface.
A working catalogue brought into compliance in one pass.
A library ten thousand items deep.
Per item, not per surface. Labelling the same item for five surfaces is one unit, because it is one decision and five lengths of the same sentence. Your licence key is emailed to you within two working days of payment.
Checkout is our own bitcoin server, not a card processor. The units you buy are added to your key: buy from the Buy more box inside the program and they arrive on their own once the payment confirms, or buy here and paste the invoice number from your receipt into that box.
Questions
It produces the labels and the manifest the obligation asks for, against the catalogue you described. It does not certify you.
The honest framing: the expensive part of this obligation is doing it per item at catalogue scale, and that is the part this program removes. Whether your scoping columns are right is a question only you can answer, and the rule applied to each item is printed so somebody qualified can check it.
The machine-readable half of the obligation. A human-readable label on a page does not satisfy a requirement to mark content in a form other systems can read.
Most tools in this space produce the sentence and stop, which leaves the harder half undone and invisible.
It comes back out of scope with the reason named: the information needed to decide was not supplied.
It is not quietly labelled anyway, and it is not quietly skipped. An item nobody has classified is a known gap rather than a silent one.
No. Label writing runs on Tower 1's own graphics cards in Oregon and the scope rules run in Python beside it.
A key. One line of text, issued to you and shown exactly once — only its hash is kept here, so it cannot be looked up later and we could not tell you what yours is. Every key arrives with a free allowance already on it, which is the tier at the top of the pricing above, and the work starts the first time you send a job with that key on it.
Each job is metered in the unit named in the pricing, and a unit that fails — a file that will not read, a row the model held back — is not charged and is named in the job report rather than silently skipped. When an allowance runs out the next job is refused before any work starts, with the number it used printed on the refusal.
More units are bought in bitcoin. The checkout is a bitcoin server we run ourselves. Buy from the Buy more box inside the program and the units are added to your key on their own as soon as the payment confirms; buy from the plan buttons above and paste the invoice number from your receipt into that same box. Each payment adds its units once, to one key.
The labels are the obvious half. The manifest is the half that is usually missing, and seeing it is what tells you whether you had a disclosure problem or a disclosure-plumbing problem.