TwinEthosRequest access

Control

Deepfake content not disclosed

Deployers must disclose deepfake image/audio/video as artificially generated/manipulated.

Informational data, not legal advice. Summaries are TwinEthos's own words and rules have not been reviewed by a lawyer: check the official text before relying on any of it. A guard addresses an item; adding it is not a statement that your code meets any law.

Family: AI-generated content is not labeled, marked, or traceable as artificial · control id cond.deepfake-not-disclosed

Reach

1items this one guard addresses
1jurisdictions where binding law on it is in force
0more where it is enacted, not yet applying
0standards and frameworks on the same control

Law in force in European Union (EU).

The guard to add

Attach a visible 'AI-generated or manipulated' disclosure to face-swapped, voice-cloned, or likeness-generated media on every path that publishes or returns it.

In the handler that publishes or serves the output of a face-swap, voice-clone, lip-sync, or likeness model, add the disclosure to the content itself (an overlay or caption on image and video, a spoken or on-screen statement for audio) and to the post text where it is published; the publish function refuses media that lacks the disclosure. In an evidently artistic or satirical work the disclosure can be adapted so it does not spoil the work, but it is still present. Pair it with machine-readable marking so the label survives re-sharing.

Where it goes: 9 AI output handling, 1 application source code, 14 user-facing text.

What reviewers look for: on the path from the swap, clone, or lip-sync call to publish(, upload_to_social(, cms.create_post(, or FileResponse(, a disclosure the audience actually sees or hears ('AI-generated', 'digitally altered', an ai_generated_badge, caption += disclosure), not only a database flag.

Example (insightface + OpenCV + FastAPI), before:

swapped = swapper.get(frame, target_face, source_face, paste_back=True)
cv2.imwrite(out_path, swapped)
return FileResponse(out_path)

After:

swapped = swapper.get(frame, target_face, source_face, paste_back=True)
cv2.putText(swapped, 'AI-generated / digitally altered', (10, swapped.shape[0] - 15),
            cv2.FONT_HERSHEY_SIMPLEX, 0.7, (255, 255, 255), 2)
cv2.imwrite(out_path, swapped)
return FileResponse(out_path)

Engineering guidance, not legal advice. Each provision below may add its own details (a cadence, a deadline, a required notice element): open it for those.

Every rule this guard addresses

Binding law — in force (1)