Part of the Terms · countersigned on request

Data Processing Agreement

Between your studio and Somnolent Team Limited, for what Mulno Cloud stores and what a lent read key lets us read. It is part of the Terms from your first use; Enterprise customers can ask for a countersigned copy.


Part of the Terms. This DPA is part of Mulno's Terms of Service (section 7) from the first time the customer uses Mulno. It needs no signature. This rider names the parties and settles what a click-through can:

For a countersigned copy only: the Controller is [[STUDIO LEGAL NAME]], [[STUDIO ADDRESS]], [[STUDIO REGISTRATION NUMBER]], effective [[DATE]], and the Agreement is [[MAIN AGREEMENT / ORDER FORM REFERENCE]]. The two are each a "Party".

1. Definitions

1.1 "Data Protection Law" means, as each applies to a Party's processing: Regulation (EU) 2016/679 (the GDPR); the GDPR as it forms part of UK law with the Data Protection Act 2018 (the UK GDPR); Thailand's Personal Data Protection Act B.E. 2562 (2019) (the PDPA) and its subordinate regulations; the California Consumer Privacy Act as amended by the California Privacy Rights Act and its regulations (the CCPA), and other US state privacy laws; and any other law on personal data that applies to the Controller or the Processor.

1.2 "Personal Data", "Processing", "Data Subject", "Controller", "Processor", "Sub-processor" and "Personal Data Breach" have the meanings in the GDPR, and the corresponding terms of the PDPA ("data controller", "data processor", and so on) are read as the same.

1.3 "Service" means the Processor's hosted service for remote playtests (the "broker": invite codes, redemption, upload authorisation, NDA acceptance records, the Controller's privacy notice for testers and records of which version the Launcher showed, capture-health records, campaign administration, deletion requests), the platform service beside it (workspaces, projects, builds and their storage settings), and, only where Annex 1 §4 says so, storage the Processor provides for Recordings or a read key the Controller lends it.

1.4 "Software" means the Processor's software that runs on devices the Processor doesn't operate: the Unity package and capture library in the Controller's game, the uploader, the Mulno Launcher, Mulno Studio and the mulno command-line tool.

1.5 "Recordings" means what the Software records of a tester: gameplay video, game audio, microphone, webcam, voice notes, in-game events and positions, the session manifest (including the consent and NDA records), and anything derived from them (transcripts, notes).

2. Scope: what the Processor processes, and what it doesn't

2.1 The Service. The Processor processes Personal Data on the Controller's behalf only in the Service, as described in Annex 1.

2.2 The Software is not processing by the Processor. The Software runs on testers' and the Controller's own devices under the Controller's control, and sends Recordings to storage the Controller chooses. The Processor doesn't receive, access or control Recordings through the Software. The Controller is solely responsible for its processing with the Software, including its configuration (§7). The Processor warrants that the Software records only the streams a tester's consent record allows, and sends the Processor only what Annex 1 §2 lists (and, where it applies, what Annex 1 §4 lists).

2.3 Recordings in the Controller's own storage ("Private bucket", Annex 1 §4) are outside this DPA while the Controller lends the Processor no read key: the Processor never holds or reads them. Recordings in storage the Processor provides ("Mulno-hosted bucket" or "Mulno Cloud", Annex 1 §4) are within it, and so is everything the Processor reads or derives from Recordings under a lent read key (Annex 1 §4).

2.4 The Controller's own processors are outside this DPA: its storage provider (for a Private bucket), a speech-to-text provider it uses from Mulno Studio (such as OpenAI or ElevenLabs, under the Controller's own account and key), and an AI assistant it connects to mulno mcp. The Processor doesn't engage or instruct them, and they are not its Sub-processors.

2.5 What the Processor keeps for itself. The traffic log in Annex 1 §2, which Thai law asks the Processor to keep, and the statistics in §4.3 are the Processor's own processing as a controller, not processing for the Controller.

3. Subject matter and duration

The subject matter is the Service. The Processor processes Personal Data for the term of the Agreement and afterwards only as §16 allows.

4. Nature and purpose of processing

4.1 Checking testers' invite codes and the campaign's limits; issuing short-lived, single-object upload authorisations to the Controller's storage; recording upload progress; receiving and summarising capture-health records for the Controller; passing testers' deletion requests to the Controller and deleting a session's records on its instruction; limiting abuse; keeping an audit log of account actions; and, where Annex 1 §4 says so, storing Recordings for the Controller.

4.2 The Processor doesn't process the Personal Data for its own purposes, except as §2.5 and §4.3 allow.

4.3 Aggregate statistics. The Controller authorises the Processor to combine capture-health records (Annex 1 §2, only the fields of mulno.capture-health/v1) with those of its other customers into statistics about recorder, encoder, graphics hardware and upload performance, to find and fix faults in the Software. The statistics must not contain session IDs, campaign IDs or anything else that relates to a Data Subject or to the Controller, and they end the records' link to any person. That purpose is the Processor's own, so for combining the records into statistics the Processor is an independent controller (GDPR Art. 28(10)), not the Controller's processor: it relies on its own legitimate interest (GDPR Art. 6(1)(f); PDPA s.24(5)), publishes its own statement of that processing, and leaves out the record of any Data Subject who objects. The Controller discloses the records to it for that purpose, tells its testers so (the notice template's §6 does), and may turn capture-health off.

5. Data Subjects and Personal Data

Testers of the Controller's games, and anyone else a Recording captures, such as other players or people near a tester's webcam or microphone; and the types of Personal Data in Annex 1 §2 (and, for a Mulno-hosted bucket, Mulno Cloud or a lent read key, Annex 1 §4). The Controller's staff who use the Service are the Controller's own contacts with the Processor; the Processor handles their details as a controller under its own privacy notice, not under this DPA.

6. Instructions

6.1 The Processor processes Personal Data only on the Controller's documented instructions, including as to transfers to third countries (§14), unless the law it is subject to requires otherwise, in which case it tells the Controller before processing unless that law forbids it.

6.2 The Controller's instructions are this DPA, the Agreement, and the Controller's use of the Service: its campaigns' settings (limits, expiry, minimum age, capture-health on or off, the kill switch), its storage destination and the storage mode it chooses for each project (and any change to it), whether it lends a read key, its codes and their revocation, the sessions it deletes, and its requests under §11.

6.3 The Processor tells the Controller immediately if, in its opinion, an instruction infringes Data Protection Law.

7. The Controller's responsibilities

The Controller:

8. Confidentiality

The Processor ensures that everyone it authorises to process the Personal Data is bound by confidentiality, by contract or by law, and processes it only as this DPA allows.

9. Security

9.1 The Processor implements the technical and organisational measures in Annex 3 (GDPR Art. 32; PDPA s.37(1), s.40), and reviews them at least once a year and after any significant change to the Service.

9.2 The Processor has chosen those measures for the risk of the processing, taking into account that, in Private-bucket mode, the Service holds no Recording and no direct identifier of a tester (Annex 1 §2). Where the Processor holds Recordings (a Mulno-hosted bucket or Mulno Cloud) or reads them (a lent read key), Annex 3's hosted-storage measures apply as well, and the Processor reviews them before it first holds or reads a Recording and after any change to how it does.

10. Sub-processors

10.1 The Controller gives general written authorisation for the Sub-processors in Annex 2.

10.2 The Processor gives the Controller at least 30 days' notice, by e-mail to the workspace's owner, before adding or replacing a Sub-processor. The Controller may object on reasonable data protection grounds within that period; if the Parties can't resolve the objection, the Controller may terminate the affected part of the Service without penalty and receive a refund of prepaid fees for it.

10.3 The Processor imposes on each Sub-processor, by contract, data protection obligations giving at least the protection of this DPA, and remains liable to the Controller for its Sub-processors as for itself.

11. Data Subjects' requests

11.1 The Processor passes to the Controller, without undue delay, any request it receives from a Data Subject about the Controller's data, and doesn't answer it except on the Controller's instruction. A tester's request made on the Processor's deletion page shows on that session in the Controller's campaign. A session ID is not a secret (it is on every moment link), so the page can't tell the tester's request from anyone else's, and the Processor doesn't delete on it at once. Where the Recording is in Mulno Cloud (or the Processor indexed it under a lent read key), the Service hides the session from everyone at once, so nobody in the Controller's workspace can open, search or export it unless an owner or admin restores it first (the restore is audited), tells the Controller's owners by e-mail and in the campaign, and deletes the Processor's copy for good 30 days after the request, unless an owner or admin restores it first. A plan change's hold (Annex 1 §4) does not delay that deletion. The Controller should restore it only if it is sure the request was not the Data Subject's own, or the law lets it keep the Recording (GDPR Art. 17(3)), and should then tell the Data Subject. A Data Subject's own request is an erasure request (the template tester notice grounds the Recording on the Controller's legitimate interests, so it is not a withdrawal of consent) that the Controller must honour unless the law lets it keep the Recording. If a Data Subject asks again after the Controller restored the session, the Service does not hide it again, so that repeating a request cannot keep a Recording hidden: it records the repeat in the Controller's audit log, e-mails each owner once (at most one such e-mail per session in 7 days) and lists the request again in the campaign with Delete now and Keep. Keep closes the request and is audited; Delete now is the Controller's instruction to delete at once (§11.2(b)). The Controller can also delete it right away, at any time (§11.2). Where the Recording is in the Controller's own storage and the Processor holds nothing of the session, the Processor only passes the request on and the Controller decides.

11.2 The Processor helps the Controller answer requests (access, rectification, erasure, restriction, portability, objection) by appropriate technical and organisational measures. Most are self-service in the Service and take effect at once; the 10 business days below apply only to what the Processor does on a request:

Database rows deleted under this clause leave the point-in-time backups within 30 days more (§16.1).

12. Assistance

Taking into account the nature of the processing and the information available to it, the Processor helps the Controller meet its obligations on security, Personal Data Breaches, data protection impact assessments and prior consultation with a supervisory authority (GDPR Arts 32–36; UK GDPR; PDPA s.37), including by providing the information in Annexes 1–3 and answering reasonable questions about the Service and the Software.

13. Personal Data Breaches

13.1 The Processor notifies the Controller without undue delay, and in any event within 48 hours, after becoming aware of a Personal Data Breach affecting Personal Data it processes for the Controller, so the Controller can still meet its own 72-hour deadline to authorities (GDPR Art. 33(1), PDPA s.37(4)).

13.2 The notice describes, as far as then known: the nature of the breach, the categories and approximate numbers of Data Subjects and records concerned, the likely consequences, the measures taken or proposed, and a contact for more information; the Processor sends what isn't yet known as soon as it is.

13.3 The Processor takes reasonable steps to contain the breach and helps the Controller notify authorities and Data Subjects. The Controller decides whether and how to notify them. Notice under this clause is not an admission of fault.

14. International transfers

14.1 The Processor is established in Thailand. The Service runs on Cloudflare's global network: requests are handled at the Cloudflare location nearest the tester, and the database is kept where Annex 1 §5 says.

14.2 Where the Controller's transfer of Personal Data to the Processor is a restricted transfer under the GDPR or UK GDPR — including where the Controller is outside the EEA but subject to the GDPR under Art. 3(2), and where both Parties are in Thailand — the Parties' EU Standard Contractual Clauses (Commission Implementing Decision (EU) 2021/914) are incorporated as Annex 4: Module Two (controller to processor) for the processing this DPA covers, and Module One (controller to controller) for the capture-health records the Processor uses for its own statistics (§4.3); for UK data, with the UK International Data Transfer Addendum. Where the Processor is itself subject to the GDPR under Art. 3(2), which those clauses don't address, the Parties use them until the European Commission adopts clauses for that case, and then put those in place. Where Thai Personal Data leaves Thailand for a country the PDPC hasn't recognised as adequate, the Parties rely on the appropriate safeguards recognised under PDPA s.29 and the PDPC's notification on transfers under s.29 (in force March 2024), namely standard contractual clauses.

14.3 The Processor's onward transfer to Cloudflare, Inc. (USA) relies on Cloudflare's customer data processing addendum, which incorporates the EU standard contractual clauses (Module Three where, as here, Cloudflare's customer acts as a processor) with the UK Addendum, and on Cloudflare's certification under the EU-US Data Privacy Framework and its UK Extension; for Thai Personal Data, on the same clauses as the PDPA s.29 safeguard.

15. Records and audits

15.1 The Processor keeps a record of its processing for the Controller (GDPR Art. 30(2), PDPA s.40(3)) and makes it available to a supervisory authority on request (GDPR Art. 30(4)).

15.2 On request, the Processor makes available the information needed to demonstrate compliance with this DPA: this DPA's annexes kept up to date, its what we store page and the database description behind it (which a test holds to the database schema), and the results of its security reviews.

15.3 Where that isn't enough, the Controller (or an independent auditor bound by confidentiality) may audit the Processor's compliance, including by inspection, at most once a year on 30 days' notice, and in addition where there are indications of non-compliance, after a Personal Data Breach, or where a supervisory authority requires it (on the notice the circumstances allow), during business hours, at the Controller's cost unless the audit finds a material breach, and without access to other customers' data.

16. Deletion and return

16.1 On termination of the Agreement, or earlier on the Controller's request for a campaign or the whole account, the Processor deletes the Personal Data it processes for the Controller within 30 days, unless the law requires it to keep it, and confirms in writing. Closing the workspace in the Service is such a request: access to it ends at once, and the deletion starts on the 14th day and ends within the 30. Before it deletes, the Controller may instead ask for the data to be returned: the Processor then gives it a copy of the Service's records for its campaigns in a machine-readable form, and its Recordings as §16.3 says, and deletes the rest. Because closing ends access at once, the Controller asks before it closes the workspace. Two audit logs are kept after the deletion, as the record of what was done with the data, and hold no direct identifier of a Data Subject: the broker's (Annex 1 §2), whose entries name no person and are deleted when each is a year old; and the workspace's own, from which the deletion removes every member's e-mail address, account id and IP-address hash, so that what is left (the action, its time and outcome, and the id of what it touched, which can be a session ID) stays until each entry is a year old and is deleted within 30 days after that. Deleted data leaves the database's point-in-time backups (Cloudflare D1 Time Travel, which can't be turned off) within 30 days more, and the Service's logs within 7 days.

16.2 In Private-bucket mode nothing else needs returning: the Processor never held the Recordings. Where a lent read key was in use, §16.1's 30 days covers what the Processor derived from them (its index, frames, cached transcripts), which is deleted rather than returned because the Controller holds the Recordings it came from; the Recordings themselves stayed in the Controller's own bucket throughout.

16.3 For Mulno-hosted storage (Annex 1 §4), before deleting, the Processor makes the Recordings available for the Controller to download for 30 days if the Controller asks before termination.

17. Liability

17.1 Each Party's total liability arising out of or in connection with this DPA, whatever the cause of action, is limited to the greater of (a) the fees paid for the Service under the Agreement in the 12 months before the event giving rise to the claim, and (b) US$100. This is one cap for the Agreement and this DPA together, not two: the two are never added up (Terms section 15). The Controller's duty to pay the fees, and its duty under the Agreement to cover the Processor for a claim by one of its testers, are not counted against it. The same limit applies in both storage modes (Annex 1 §4).

17.2 Nothing in this DPA limits a liability that the applicable law doesn't allow to be limited, including for fraud or wilful misconduct, or either Party's liability to Data Subjects or supervisory authorities under Data Protection Law (GDPR Art. 82 and 83; PDPA s.77–90).

18. Representatives

The Processor is established in Thailand and has not named an EU or UK representative (GDPR and UK GDPR Art. 27) yet. It names both before it opens accounts to people in the EEA or the UK. Until then, the Controller doesn't recruit testers there (Terms section 8), and the Service refuses a campaign whose audience is Europe or Worldwide. If the Processor learns that it holds Personal Data of testers in the EEA or the UK, it tells the Controller, which closes the campaign. The Processor is established in Thailand, so PDPA s.37(5) asks it for no representative there.

19. Governing law and jurisdiction

This DPA is governed by the laws of Thailand, and the courts of Bangkok, Thailand, have exclusive jurisdiction, without prejudice to Data Protection Law that applies regardless of that choice, and to the governing law and forum the standard contractual clauses in Annex 4 require.

20. Term

This DPA lasts as long as the Processor processes Personal Data for the Controller, and §16 survives it.

21. US state privacy laws

Where the CCPA or another US state privacy law applies to the Personal Data, the Processor acts as the Controller's service provider (or processor, as that law says) and:


Countersigned copy only. Signed for [[STUDIO LEGAL NAME]]: ____________________ Name: __________ Date: __________

Signed for Somnolent Team Limited: ____________________ Name: __________ Date: __________


Annex 1: Processing details

1. How the Software runs, and where the Service comes in

2. What the Service keeps (remote playtests)

The same in every storage mode.

HeldRetentionNever held
Invite codes as SHA-256, the last 4 characters as a hint, the Controller's own tag, limits and stateUntil 90 days after the campaign closes or expires, then deleted automaticallyA code in readable form
Per session (redemption): the session ID (random, made by the tester's build), its state, the yes/no age answer, times started / last seen / completed, byte counts, when the tester withdrew, if they did, and when a deletion was requested on the deletion page, if it wasas above, or sooner when the Controller deletes the sessionThe tester's name, e-mail, birth date or year, or answers to surveys
NDA acceptances: the NDA's version, the SHA-256 of its exact text and the time the tester accepted it, stored against the invite code's ID, whether or not the tester then recordedas aboveThe NDA's text; the tester's name
Which version of the Controller's privacy notice the Launcher showed a tester: the notice's version, the SHA-256 of its exact text and the time the Service received the Launcher's report (after the redemption, a little after the text was on screen), stored against the sessionas for redemptionsThe notice's text; the tester's name; whether the tester read it or agreed to it
Upload tickets as SHA-256Valid until the session closes, at most 72 hours (one digest then authorises only the capture-health record until then); the digest is deleted with its redemptionA ticket in readable form
Which of the session format's fixed file names a session was authorised to upload, and their sizes (the names show which streams were recorded, e.g. webcam_000.mp4, flag-note-001.wav)as for redemptionsAny file's contents
One capture-health record per session: recorder and ABI versions, Windows build, GPU vendor (a closed set), encoder name, pre-check preset, capture seconds, frames kept and dropped, governor steps, upload bytes, seconds and resumes90 days, then deleted automatically; earlier with its campaign or sessionPicture, sound, events, positions, transcripts, notes; the GPU's model or serial; the machine's or game's name; any free text
For rate limiting, a keyed, truncated HMAC of the tester's IP addressAbout an hourThe IP address, or any hash of it in the database beyond this and the traffic log below
Log lines per request: the route pattern, status, time, the session ID, the campaign ID, Cloudflare's location and a truncated HMAC of the address7 days (Workers Logs)A code, ticket, token, credential, request body or raw path
The traffic log, kept by the Processor for itself (§2.5): per request, the time, method, route pattern, status and the readable source IP address, as Thailand's Computer-Related Offences Act s.26 asks90 days, then deleted automaticallyAny session, campaign or studio ID, code, ticket or token, so it can't be joined to a Recording
The Controller's campaign settings, its encrypted campaign configuration (which the Processor can't read), and the text of an NDA and of a privacy notice for testers that the Controller sets for the launcher to show before download (readable, so the launcher can display them; only the current text of each is kept)The Agreement; when the workspace is closed, deleted within 30 days with everything above (§16.1)The readable consent text or an in-build NDA's text (the Controller's builds carry it; any copy sent to the Service is encrypted)
An audit log of account actions (codes minted or revoked, campaigns created or killed, bucket changes, a tester's redemption and upload completion, a privacy notice set or shown, a deletion request and a session's deletion, without a person's name)One year, then deleted automatically, also after the workspace is closed (§16.1)
The Controller's bucket credentials, encrypted (AES-256-GCM) under a key outside the databaseUntil replaced, or with the campaign

Deleted rows remain in the database's point-in-time backups for up to 30 days (§16.1). Cloudflare, as Sub-processor, sees each connection's metadata (IP address, approximate location, TLS details) while handling it; that is not copied into the records above.

Labels and free-text fields (campaign names, code tags, kill reasons) can hold whatever the Controller types; §7(d) keeps Personal Data out of them.

3. Data Subjects

Testers of the Controller's games, and anyone else a Recording captures (other players, people near a tester's webcam or microphone). Testers may include people under 18 (the Software records only events of a tester under the Controller's minimum age, unless the Controller collected parental consent).

4. Storage mode

The Controller chooses a storage mode for each project in the Service, and may change it; each choice and change is a documented instruction (§6.2), recorded in the Controller's audit log. This DPA covers every mode below without a new signature. Only the modes the Controller actually uses apply to it.

5. Region

The Controller's workspace region is the one it chose when the workspace was created: APAC, EU or US: its own rows, and its Mulno Cloud buckets, are kept there — under Cloudflare's EU jurisdiction (a guarantee) for the EU, and by a location hint (Cloudflare's best effort, not a guarantee) for APAC and the US. The broker's records in §2 are an exception, whatever the workspace's region: until the broker becomes regional, they are kept in one Cloudflare D1 database with an Asia-Pacific (Singapore) location hint, together with the campaign's name and the workspace's own id — never its name. An EU-region Controller cannot create a campaign at all today: the Processor refuses the request outright, so no EU workspace's campaign metadata reaches this database until the broker itself becomes regional. The Workers run on Cloudflare's global network. The Controller's own storage is wherever the Controller put it.

Annex 2: Sub-processors

Sub-processorLocationServicePersonal Data
Cloudflare, Inc.USA; global network; database per Annex 1 §5Workers (compute), D1 (database), Email Service (sign-in, invite and plan-notice mail)Annex 1 §2, and connection metadata
Cloudflare, Inc., for a Mulno-hosted bucket, Mulno Cloud or a lent keyThe workspace's region (Annex 1 §5)R2 (object storage); Durable Objects and Queues (each project's session index and the queue that fills it)The Recordings (a Mulno-hosted bucket or Mulno Cloud), or what the Processor derives from them (a lent key: an index, frames, transcripts)

Not Sub-processors (§2.4): the Controller's storage provider (Private-bucket mode), a speech-to-text provider the Controller's own reviewers use from their own account, and an AI assistant a reviewer connects over MCP under their own account. Nor is Paddle, which bills the Controller as merchant of record: it sees only the Controller's own billing contact, which the Processor handles as a controller (§5), never a Data Subject's data. Nor is the provider of the Processor's mailbox (Google), which the Processor uses only for its own correspondence as a controller; §7(j) keeps the Personal Data it processes for the Controller out of it. See subprocessors.md for why these are listed there for transparency without being Sub-processors here. The Processor runs no AI of its own on Personal Data as of this DPA's date; hosted AI would be added to this list under §10 before use, named, with the terms ai-statement.md states.

Annex 3: Technical and organisational measures

Data minimisation by design

Access and authentication

Uploads

Encryption

Input and logging

Retention and backups

Assurance

Hosted storage (Mulno-hosted bucket, Mulno Cloud, or a lent read key)

Annex 4: Standard contractual clauses

The EU standard contractual clauses (Commission Implementing Decision (EU) 2021/914), in the Commission's own text, unchanged, are incorporated by reference where §14.2 applies, with these choices. The Processor gives a completed copy on request:

Storage mode (Annex 1 §4)Controller → ProcessorCapture-health statistics (§4.3)Processor → Cloudflare
Private bucket (no Recording held)Module Two, for Annex 1 §2's recordsModule OneCloudflare's DPA: Module Three, UK Addendum, EU-US DPF
Mulno Cloud (or a Mulno-hosted bucket)Module Two, adding the Recordings to its Annex I.BModule OneThe same
A lent read keyModule Two, adding what the Processor reads and derives to its Annex I.BModule OneThe same

Changes (2026-10-07)

Changes (2026-10-04)