Privacy Policy
Last updated: 15 August 2026
1. The short version
Your workflow file is read and analysed in your browser. Your images are never uploaded. Your prompt is not stored โ it is sent once for an automated content check and is discarded when that check returns. The one exception, which section 2 describes in full, is that individual words are counted so we can find gaps in our own blocklist; a word is only ever kept once at least five separate uploads have used it, and nothing links the words back to each other or to you.
What we keep is the structure of the workflow: which nodes it contains, how they are wired, the generation settings, and the names of the model, LoRA, VAE and ControlNet files it references. Plus, if you have an account, your email address, and, for everyone, a hashed IP address and basic usage records.
The rest of this page says exactly what that means, how long we keep each thing, and the one case where a record deliberately outlives your account.
2. What happens to a file you analyse
- Images are never uploaded. If you drop in a PNG or WebP that has a workflow embedded in it, the file is opened by JavaScript on your own device and the embedded workflow is pulled out there. The image data never leaves your browser and never reaches our servers.
- The workflow is parsed in your browser. The analysis you see on screen is produced locally.
- Prompt text is transmitted for a moderation check, and is not retained. Your positive and negative prompts are sent over HTTPS to our moderation function, which runs on Supabase Edge Functions. It compares them against our own blocklists in memory and returns a verdict. Your prompt โ the sentence you wrote โ is not written to our database, not written to a file, and not written to a log. What survives the check is described in section 6.
- One thing derived from your words is counted, and we would rather spell it out than let “prompt text is not stored” cover it. The moderation function splits the prompt into individual words and counts how often each one is seen, so that we can find words people actually use that our blocklist has never heard of. A word is only kept as text once it has appeared in at least five separate uploads. Below that it exists only as a keyed one-way hash and a number. We would rather be precise than flattering about what that hash does: the key means a stray copy, a leaked backup fragment or a stray log line is worthless to whoever finds it, but the digest of a single ordinary word is not beyond guessing by someone holding the entire database, because there are only so many words. What actually protects you is that the row is unlinked โ it records no user, no upload, no session, and no other word from the same prompt. An unordered bag of counts with nothing joining it cannot be reassembled into anything you wrote. Multi-word phrases are never kept in any form.
- A structural skeleton is stored. After the check, we store a stripped-down version of the workflow: node classes, the links between nodes, and safe widget values such as sampler, scheduler, steps, CFG, dimensions and denoise. Prompt fields are removed before this is stored.
3. What we store
- Workflow structure: node classes and how many of each, the links between them, node and custom-node-pack counts, and a complexity rating.
- Generation settings: sampler, scheduler, steps, CFG, width, height, denoise, pipeline and workflow type.
- Model, LoRA, VAE and ControlNet filenames: see section 4 โ this is the one retained field we treat as sensitive.
- File facts: file type, file size, and a hash of the workflow used to recognise duplicates.
- Account information (only if you sign in): your email address, display name and avatar URL, as supplied by Google or GitHub, and the date and version of the Terms you accepted.
- Hashed IP address: see section 5.
- Session identifier: a random id generated in your browser, used to group one visit's activity. It is not derived from anything about you. Analytics only โ created and stored only if you have agreed under section 12. If you have not agreed, no session identifier exists at all, and nothing that is written can carry one.
- User agent, referring page and any campaign parameters in the link you arrived by. Analytics only โ section 12.
- Activity events: a record that a given action happened โ a file analysed, a workflow saved โ with its timestamp. Analytics only โ section 12.
- Word counts from prompts: individual words and how many uploads contained them, subject to the five-upload floor described in section 2. No phrases, and no link to an upload, a session or an account.
- Moderation and abuse records: see sections 6 and 7.
- Messages you send us through the Contact page: the email address, subject and message you type there.
We do not store your prompts as you wrote them, your images, your raw workflow file, or your payment details (there are none โ the Service is free). We do not store your IP address in readable form in any table we write to โ with the one exception of the sign-in records kept by our authentication provider, which section 5 sets out.
4. Model and LoRA filenames
We keep the filenames of the checkpoints, LoRAs, VAEs and ControlNets a workflow references. We need them so that a saved workflow can be reloaded and still make sense, and because the model and LoRA statistics are the point of the tool.
These names are chosen by whoever made the model, not by us, and they sometimes contain a real person's name. That makes them the most sensitive thing we retain, and we treat them that way: they are never shown next to your account, and they are not published in a form that ties them to an individual user. If a filename in our records names you and you want it removed, tell us through the Contact page.
5. Hashed IP addresses are pseudonymous, not anonymous
Our own tables do not store your IP address. They store a one-way hash of it, computed with a secret key. For IPv6 we hash only the /64 network prefix, because the rest of an IPv6 address rotates.
That sentence is deliberately about our own tables, because a flat “we do not store your IP address” would not be true of the whole system. If you sign in, the authentication service we use (Supabase Auth, section 10) records the IP address and user agent of a sign-in session in its own tables, in readable form, as part of issuing and revoking that session. We do not put it there and we do not use it for anything, but it exists and it is on infrastructure we control, so it is ours to declare. If you never sign in, there is no such record. Specifically, the session table holds the IP address and user agent of each active sign-in session, and the sign-in audit log can hold the IP address of sign-in events. Those rows exist for as long as the session does; we do not currently purge them on a separate schedule, and signing out ends the session.
Be clear about what that does and does not mean. The hash cannot be turned back into your IP address, but it is stable: the same address always produces the same hash. So we can tell that two uploads came from the same place, and we can enforce a block against that place. That is the whole reason it exists. It is pseudonymous data, not anonymous data, and where the law treats pseudonymous data as personal data, we treat it that way too.
We use it for exactly two things: counting daily uploads so the free limit can be enforced, and enforcing suspensions.
6. Content moderation
Every workflow is checked against our blocklists before it is analysed. If nothing matches, no moderation record is written at all.
If something does match, the record we write contains only closed-vocabulary data โ values that come from our own lists and our own code, never a sentence you wrote:
- which of our blocklist terms matched, and how many times each has ever matched across all users
- the classification (for example suspicious, explicit, blocked) and a severity
- category labels from our own fixed set
- a reference code, so a decision can be looked up and appealed
- the hashed IP address, and your account ID if you were signed in
- a field for the session identifier described in section 3, which in practice is empty: the moderation check runs on our server and the current app does not send it one, and if you have declined analytics no session identifier exists to send. Treat it as reserved rather than used.
- the time
The submitted prompt is not part of that record. Content that is blocked outright is not analysed and not stored.
One field on that record is not closed-vocabulary, and the list above would be misleading without it: if a person on our side reviews a flag, they can attach a note to it. That note is written by us about the decision, not by you, and it is free text. It is visible only to reviewers.
Separately, we run an internal scan that re-applies our current blocklist to workflows we have already stored, so we can see which of our own terms are matching things they should not and fix them. Each row of that scan records one of our terms, how many times it occurs in one stored workflow, and a reference to that workflow โ so it is a per-upload moderation record, and we would rather name it here than leave it out because it is internal. It holds no prompt text. It is a snapshot rather than a log: each run deletes the whole previous scan before writing the new one.
If you think a decision was wrong, quote the reference code on the Contact page and we will review it.
7. Ban records survive account deletion
This is the one place where deleting your account does not delete everything, and we would rather state it plainly than bury it.
If your access has been restricted or banned for breaking the Terms of Service, the enforcement record โ the ban, its reason, the violation counters and the hashed IP address it applies to โ is kept after the account is deleted. Your account ID is removed from it, so the record no longer names you, but the block itself remains in force.
The reason is simple: if a ban disappeared when the account did, anyone could lift their own ban by deleting their account and signing up again. Keeping the record is what stops that. It applies only to accounts that were actually restricted or banned; if you were never subject to enforcement, there is no such record and nothing survives.
Moderation flags and appeal records are handled the same way: they stay, with your account ID removed, so that an enforcement decision can still be reviewed. Neither contains prompt text.
So is the trust record. Alongside the ban we keep a standing score for a session โ how many uploads it has made, how many were clean, how many tripped the filter, the resulting status and why, and how many appeals were made and upheld. Like the ban, it loses your account ID when the account goes but survives keyed to the session, for the same reason: a reputation you can reset by signing up again is not a reputation.
One thing to be plain about, because “your account ID is removed” does not cover it. If you appealed a decision, the appeal keeps what you put into it โ the reasons you wrote and the contact address you gave us. We keep the address because that is where the outcome gets sent; an appeal we cannot answer is not an appeal. Removing your account ID does not remove either of them. If you want a decided appeal erased, ask us on the Contact page and we will delete it.
8. Saved workflows
If you are signed in you can save a workflow to your account. Saved workflows are:
- Private to your account. Database row-level security restricts every row to the account that created it. No other user can read your saved workflows. There is no sharing feature, no public gallery, and no link that exposes them.
- Stored with prompt fields blanked. What is saved is the structure and settings, not your prompt text. If you reload a saved workflow, the prompt boxes come back empty โ that is deliberate, not a bug.
- Deleted when your account is deleted. They are removed along with it, immediately, when you delete your account yourself โ see section 13.
9. How long we keep things
- Prompt text: not retained. It exists only for the duration of the moderation check.
- Images: never received.
- Rate-limiting counters: 30 days, then deleted.
- Per-upload workflow records (the structure, settings and filenames of one file you analysed): kept indefinitely. Anything on that record that could identify the visitor who uploaded it โ the session and visitor identifiers, the account ID, the user agent, the referring page and any campaign tags โ is removed after 90 days. After that the record is a description of a workflow, not of a person.
- Aggregate statistics (how many workflows used a given model, LoRA, node or settings combination): kept indefinitely. These are running totals. They are not per-upload records and they are not linked to you, so deleting the upload records above does not remove them and they are not restorable to individual uploads.
- Activity events and session records: 90 days, then deleted.
- Moderation records: the filter log โ which of our terms fired, and when, with no identifier of any kind โ 180 days. Flags that were reviewed and found to be false positives: 90 days. Other flags: 400 days. Three exceptions are kept beyond that: a flag with an open or decided appeal against it, a flag that is the evidence for a restriction currently in force (section 7), and anything classed as critical or child-safety related. Anything classed as child-safety related is kept for as long as applicable law requires us to preserve it, and never for less than the 400 days above.
- Prompt vocabulary used to check our own filters: single words only, and only words that have appeared in at least five separate uploads; deleted after a year without being seen again. Words below that threshold are held as a one-way hash with a counter, never as text, and expire after 60 days.
- Appeal records: deleted one year after the appeal is decided; an appeal that has not been decided is kept until it is. Until then they survive account deletion (section 7) โ including the reasons you wrote and the contact address you gave.
- Trust records: a record with any violation on it is kept for as long as the enforcement history it summarises, and survives account deletion (section 7). A record with no violations is deleted one year after it was last active.
- Internal filter-review scans (section 6): replaced in full each time the scan is run, and not kept between reviews as a growing history. A scan that is never re-run stays until it is.
- Account data and saved workflows: kept while your account exists, deleted when the account is deleted (by request โ section 13).
- Messages sent through the Contact page: one year, then deleted.
- Enforcement records: kept after account deletion, as described in section 7.
10. Who else processes your data
We do not sell your data and we do not share it for advertising. We use these providers to run the Service:
- Supabase โ database, authentication and the moderation function.
- DigitalOcean โ hosting. The site's files are served from DigitalOcean's App Platform in the United States.
- Cloudflare โ network, DNS and content delivery. Cloudflare sees your IP address in the ordinary course of routing traffic, as any network provider does. It also sets a bot-protection cookie (
__cf_bm) that is strictly necessary and not used for analytics. - Google Analytics โ page-level usage measurement on the main app page, and only if you agree to it. Nothing is requested from Google and no analytics cookie is set unless you choose to allow it; section 12 describes how you are asked and how to change your mind. If you do allow it, Google receives your IP address and device information under its own privacy policy. No workflow content, prompt text, filename or model name is ever sent to Google, with or without consent.
We may also disclose data where the law requires it, in response to a valid legal request, to investigate a Terms of Service violation, or to protect someone's safety.
We operate from the United States (section 14), and the providers above are US companies. So if you are in the UK or the EEA, your data is transferred to the United States and handled there.
The site is hosted on DigitalOcean in the United States (New York) and served through Cloudflare's global network; the database is in the United States (Ohio). We have not put a formal transfer mechanism such as Standard Contractual Clauses in place with these providers. If that matters to you, the two things that send personal data to them are signing in and accepting analytics; you can use the analyser without doing either.
11. Cookies and local storage
- Essential cookies: sign-in and session management, only if you have an account.
- Local storage: your theme preference, your acceptance of the Terms, your daily free-usage count, and your analytics choice. This stays on your device.
- Session storage: the random session identifier described in section 3, and any campaign parameters from the link you arrived by. These are analytics storage, not essential storage, and they are written only if you have agreed under section 12. Decline, or do nothing, and neither is ever created.
- Analytics cookies: set by Google Analytics on the main app page, and only after you have agreed. See section 12.
We use no advertising cookies.
12. How the analytics consent works
Analytics is off until you turn it on. Declining is the default, and doing nothing counts as declining.
One choice covers two things, and we would rather list them than let “analytics cookies” imply only the first:
- Google Analytics. A third-party tag that sets cookies in your browser and sends your data to Google. See section 10.
- Our own usage records. Not Google, and no cookie, but the same purpose and the same answer required. This is the activity log in section 3 โ a record that an action happened, such as a file analysed or a workflow saved, with the time, your user agent, a device type derived from it, your account ID if you are signed in, and the random session identifier that groups one visit. It also covers the referring page and any campaign parameters in the link you arrived by, which are attached to the workflow record described in section 3.
- You are asked once. The first time you open the app page, a notice asks whether analytics may be enabled. It has a clear accept and a clear decline, and neither is preselected.
- Until you accept, nothing loads and nothing is stored on your device. The Google tag is not added to the page, no request is made to googletagmanager.com, no
_gacookie exists, no activity record is written, and the session identifier and campaign parameters in section 11 are never created. - Your answer is remembered on your device in local storage, so you are not asked again. It is not sent to us and it is not an account setting; clearing your browser storage puts you back to declined.
- You can change your mind at any time from the cookie settings link in the footer of the app page. Turning analytics off there stops any further collection, clears the analytics cookies we can reach from your browser, and deletes the session identifier and campaign parameters from your browser's session storage. Google's own record of data already collected is governed by Google's policy, and you can ask us to help you pursue it.
- Declining costs you nothing. The tool works identically either way.
What still happens if you decline. Analysing a file still writes the structural workflow record described in section 3 โ the node classes and links, the generation settings, and the model, LoRA, VAE and ControlNet filenames โ and still updates the aggregate totals in section 9. We keep that on the basis set out in section 8, not on your consent. When you have declined, it is written with no session identifier and no campaign parameters, so nothing joins one of those records to another, to a visit, or to you, and nothing about it is stored on your device. The content check in section 2 and the abuse records in sections 5 to 7 are likewise not part of this choice; they are how the Service is kept lawful to run, and they are described where they occur.
The essential cookies and the remaining local storage above are not part of this choice either. Signing in, remembering your theme, remembering that you accepted the Terms and counting your free uploads are what the Service needs to function, and there is no version of it that works without them.
13. Your rights and how to use them
You can ask us to:
- tell you what we hold about you
- delete your account and its data
- correct something that is wrong
- remove a model or LoRA filename that names you (section 4)
- review a moderation decision (quote the reference code)
- report content or conduct you have seen
You can delete your account yourself: open the account menu in the app, choose Delete account, and confirm by typing the word it asks for. Deletion happens immediately and cannot be undone โ your sign-in, saved workflows, Terms acceptance and profile are removed in the same step. Section 7 lists the enforcement records that are kept with your account ID removed. If you cannot sign in to do it yourself, ask us through the Contact page or the address in section 17 and we will do it within 30 days. The same route covers everything else on the list above.
We answer those requests from anyone, wherever you are, whether or not a law obliges us to.
Two honest limits. First, most of what we keep is either not linked to any identifier for you, or is linked only to a hashed IP address โ where we cannot tell that a record is yours, we cannot single it out to hand over or delete. Second, enforcement records are kept as described in section 7.
If you are in the UK or the EEA. We are in the United States and have no establishment in the UK or the EEA, but the UK GDPR and the GDPR can still apply to us because of where you are โ they follow the visitor, not the company. We work on the basis that they apply. On top of the list above you have the right to object to or restrict processing, the right to a copy of your data in a portable form, and the right to withdraw consent at any time. For analytics, withdrawing consent is the cookie settings link in the footer (section 12); withdrawal is as easy as agreeing was, and it does not affect anything collected before you withdrew.
You can also complain to a supervisory authority, and you do not have to come to us first. In the UK that is the Information Commissioner's Office, ico.org.uk. In the EEA it is the data protection authority of the country where you live, where you work, or where the problem happened โ you complain to your own national authority, not to one of ours, because we have none. We would rather you told us first so we can fix it, but that is a preference, not a requirement.
We have no office, no staff and no appointed representative in the UK or the EEA, and we are not going to claim otherwise.
If you are in the United States. We operate from Wyoming, which has no comprehensive consumer privacy statute, so there is no Wyoming law giving you statutory data rights against us, and we are not going to pretend there is. Some other states have such laws; whether one reaches us depends on that state's own thresholds, most of which turn on revenue or data volume we do not have. Either way the list at the top of this section is open to you as a matter of policy.
14. Which law applies, and where we are
ComfyDetective is operated from the State of Wyoming, in the United States. The legal entity behind it is the data controller for everything on this page, and it is identified in section 17.
This policy is governed by the laws of the State of Wyoming and the United States, without regard to their conflict-of-law rules, and the state and federal courts of Wyoming are where a dispute about it would be heard.
That is our jurisdiction, not a limit on yours. The Service is reachable worldwide, so laws other than Wyoming's can apply to us because of where a visitor is โ that is why section 13 sets out UK and EEA rights and why analytics is consent-gated (section 12). If the law where you live gives you the right to bring a claim locally, or to complain to your own regulator, this section does not take that away and is not meant to.
15. Children
The Service is not for anyone under 18 and we do not knowingly collect information from children. If you believe a child has used the Service, contact us and we will delete what we hold.
16. Changes to this policy
If we change this policy in a way that matters, we will update the date at the top and say so in the Service. Continuing to use the Service after a change means you accept the updated policy.
17. Contact
- Use the Contact page, or
- Email: [email protected] โ this is the privacy-forwarding address published by our domain registrar; it reaches the operator.
- Data controller: EnigmaDesignGroup, 30 N Gould St Ste R, Sheridan, WY 82801, United States
- Data Protection Officer: we have not appointed one.