Sorry for the delay here, I think I've fixed this - please let me know if you still see issues (pls refresh the page to get new updates).
Thanks again for all your bug reports. I'm still in the process of fixing a bunch of issues. Hopefully things will be back to a more stable state soon.
Sorry about all these bugs, and thank you for all your bug reports! I've been migrating everything to new, bigger servers (to hopefully fix comments plugin lag and a bunch of other issues), and so I've likely introduced a bug in collab stuff during that process. That said, I have tried about 5 times now and haven't been able to reproduce the issue. Have you noticed any specific sequence of actions which I might be able to try to reproduce it?
Some great answers here already, I'd just add that Gemma 4 31B is a surprisingly good model for its size (competitive with massive models like DeekSeek/GLM 5.1/etc.) and also it's worth visiting https://www.reddit.com/r/SillyTavernAI and https://www.reddit.com/r/LocalLLaMA if you're just getting into local models.
It shouldn't be possible to make CSAM on Perchance, even if generator authors have combinations of dropdowns which combine age keywords with NSFW keywords. If there are combinations of keywords that produce CSAM, then that's a bug with the text-to-image-plugin that should be reported (you can DM me here). Reporting generators that are clearly designed to generate CSAM is helpful, but less so - it's more whack-a-mole, rather than solving the underlying issue.
If your concern is that people are generating non-CSAM pictures of children, and are possibly being sexually gratified by them (e.g. child beauty pageant pictures or similar), then it's quite hard to prevent that at the text-to-image-plugin level, since it's about the mind of the observer rather than the image itself. There's a surprisingly long tail of things in this category that even extend to semi-nude children in non-sexual situations - e.g. cherubs / renaissance paintings, tribal settings, swimsuits, and even semi-nude children with semi-nude adults in the same picture - e.g. breastfeeding, childbirth.
That said, there is certainly still a lot of room for improvement on the current CSAM-prevention system. Taking it to the next level is unfortunately more like a research project (mainly becasue of how cheap I need to run it) than simply flipping a "enable stronger CSAM filtering" switch, so I don't have a clear ETA at this point, but in the meantime it's helpful if people can report loopholes in the current system.
Thanks! It should be fixed now. Note that it's a client-side issue so if users report the issue still, it's possible they still have the old code, so they should refresh the page. If they still get the issue after refresh, then let me know.
That does narrow it down a lot, thank you. I expected it to work in a different browser, so this is surprising.
The things I'm most curious about next are: (1) whether it works if you create a new account - you should be able to use a temp-mail or other throwaway email provider - and try again to fork https://perchance.org/blank and (2) whether it works on a different internet connection, like phone hotspot (with wifi disabled so it uses your phone data connection) or similar.
Can you try a different internet connection? (e.g. wifi vs phone hotspot)
The strangest part is this:
can’t even get the backup versions, because it’s just “save” (broken), and account
If you can't see the "backups" button, then the only thing I can think of is maybe an ad blocker or some other browser extension is doing something weird to the UI and/or network requests.
I’m seriously considering looking into alternatives
Neocities (https://neocities.org/) might be a handy alternative/backup if you mainly need HTML/JS hosting, and not the perchance engine/plugins/etc. It's fully open source too: https://github.com/neocities/neocities so it's objectively better than perchance in that (important) regard.
any reassurances that Perchance is NOT closing, it’s just bugged?
Rest assured it's just a bug. I think shutting down perchance would be kind of like deleting wikipedia in terms of "level of betrayal". It doesn't compute for me.
Edit: I did just fix an issue where invalid unicode sequences were blocking saves, but I doubt that was the cause because it wouldn't explain the lack of backups button or 'view your generators' list failure. My best guess is still something related to your browser or browser extensions or network issues, or something like that.
For any website on the internet (not specific to perchance):
If you're not using a VPN, then your IP is visible to any webpage you visit. From your IP, the author of the page can guess at your country/state/region (definitely not street address or anything close to that, to be clear).
If you are using a reputable VPN, and you've got their browser extension installed, then it shouldn't be possible for anyone to see your IP, regardless of whether WebRTC is being used on the page (via peerjs or any other multiplayer/peer-to-peer type frameworks). For example, I know that the NordVPN browser extension enables WebRTC leak protection by default.
A side note just to clarify: peerjs is not a malicious script - it's used all over the internet for multiplayer games, video conferencing, and that type of thing.
TL;DR: If you want to hide your IP, you need to use a reputable VPN like NordVPN, and make sure you've got their browser extension installed. This applies to any website on the internet, not just perchance, to be clear.
Ah good point! Sorry for the delay here, I've just added the ability to write imageOptions as a function - so you should now be able to just replace your original imageOptions with something like this:
imageOptions() =>
gs = input.Gscale.evaluateItem;
return {
guidanceScale: gs,
saveDescription: `Guidance Scale is ${gs}`,
// ... etc.
};
I'm not sure which generator you're talking about here. I don't think I've substantially changed the UI of any of my own generators recently. Note that anyone can create their own generator on Perchance, so you might have been using someone else's. Can you share a link?
Hmm I wasn't able to reproduce this. I made a character with just oc.window.show() in custom code and opened it on Android Chrome, and closed the window with the button, and I was still able to scroll down the chat feed. Can you share more details (and/or a character share link) so I can reproduce?
Fixed, thanks! I've just removed that old default regex filter list entirely since it's literally one character to work around the blocked words, and I can't defend against that without even more false positives like your example. We have the (much more intelligent) report system now, so it's less needed I think. Generator devs can of course add their own custom regex filters, like before.
Yeah I agree it's confusing for newbies. The choice to make the tags separate from the comments plugin is partly to avoid centralizing plugin stuff, and partly to reduce the chance of accidental deanonymization/identity-linking - same idea behind why people get a new/separate comments plugin tag for each generator they visit.
The reasons I added the tag btw were:
To make impersonation harder/less-disruptive in galleries that people use to chat.
The tag was, in effect, already "visible" to non-newbies - e.g. by using the block button and seeing which images disappear, or via browser's "inspect element" debugging tool, or by activating moderation view (which anyone can do) and double-clicking on an image. So by not displaying the tag, the interface was giving users the false impression that each image post was completely/independently anonymous, which is bad.
It wouldn't be too hard for me to add a way for the comments plugin to be used as 'auth' for other plugins, so that if you have a username on the comments plugin, you could use it to "prove" who you are to other plugins like the text to image plugin, which could then sign/tag the image with your username. That would be one way to keep the plugins composable rather than coupled/centralized, and would allow people to opt-in to deanonymization/identity-linking.
That beforeGenerate function runs right after the user clicks the generate button, but before any images are actually generated, so you can use it to do any preprocessing work, like in this example where we create a variable with a specific guidanceScale value that'll be used in multiple other places in your code during the later phases.
Pro tip: This, btw, is just regular JavaScript stuff (the syntax/code inside square blocks is always just executed as JavaScript), rather than anything specific to the perchance engine itself, so you can ask an AI something like:
why isn't this javascript working? tooltip(<img style="height:12px" src="[buy.Cons.PowerCharge.img]"/>, example text)
And it should give you an answer even if it doesn't know anything about perchance (though it may be a bit confused by [buy.Cons.PowerCharge.img] because that's perchance syntax, and it probably expects to see a plain https url there in place of that).
Thanks for your detailed investigation here. I'm not sure, but I think editing "hidden from AI" / etc. is actually just triggering a re-render, which "shows" the issue, rather than actually causes it.
One possibility is that you're using some custom code in that character that (likely via oc.messageRenderingPipeline) purposefully/inadvertantly edits the prompt inside the <image>...</image> tag, which would cause a mismatch.
I was thinking I could match it via a heuristic like just checking (imgN:0) if the initial __savedImages exact-prompt-match fails, but I think that would mean editing the message to change an image prompt wouldn't work - i.e. it'd just load the stale one rather than loading the new one. I could maybe make imgN increment for any prompt that's manually edited, but I haven't thought that through fully and my suspicion is that that gets a bit iffy. I think we do need to keep exact-match, and if so, then any custom code that 'renders' a message (oc.messageRenderingPipeline) shouldn't touch anything inside <image> tags. Same goes for custom code that edits the actual content of a message of course.
sometimes generates images with a completely empty prompt
Thanks for letting me know about this! I think I've fixed it (for now, at least) by optimizing away some bottlenecks. I'm overdue a server upgrade for the comments plugin, so if you continue to get problems, please let me know and I'll expedite the move to a larger server.
I just made an edit a few hours ago which might have fixed this. Can you refresh the page, clear all your data/chats with the trash emoji button (beside export button), and then create a few chats, and then export them, and then import and let me know if the 'modelName' issue still occurs?
If it does still occur, then can you tell me if your device's storage is nearly full (like >90%), and let me know which device/OS (like iphone vs android) and browser (like chrome vs safari) you're using?
Sorry for the delay here, I think I've fixed this - please let me know if you still see issues (pls refresh the page to get new updates).
Thanks again for all your bug reports. I'm still in the process of fixing a bunch of issues. Hopefully things will be back to a more stable state soon.
Sorry about all these bugs, and thank you for all your bug reports! I've been migrating everything to new, bigger servers (to hopefully fix comments plugin lag and a bunch of other issues), and so I've likely introduced a bug in collab stuff during that process. That said, I have tried about 5 times now and haven't been able to reproduce the issue. Have you noticed any specific sequence of actions which I might be able to try to reproduce it?
Some great answers here already, I'd just add that Gemma 4 31B is a surprisingly good model for its size (competitive with massive models like DeekSeek/GLM 5.1/etc.) and also it's worth visiting https://www.reddit.com/r/SillyTavernAI and https://www.reddit.com/r/LocalLLaMA if you're just getting into local models.
It shouldn't be possible to make CSAM on Perchance, even if generator authors have combinations of dropdowns which combine age keywords with NSFW keywords. If there are combinations of keywords that produce CSAM, then that's a bug with the text-to-image-plugin that should be reported (you can DM me here). Reporting generators that are clearly designed to generate CSAM is helpful, but less so - it's more whack-a-mole, rather than solving the underlying issue.
If your concern is that people are generating non-CSAM pictures of children, and are possibly being sexually gratified by them (e.g. child beauty pageant pictures or similar), then it's quite hard to prevent that at the text-to-image-plugin level, since it's about the mind of the observer rather than the image itself. There's a surprisingly long tail of things in this category that even extend to semi-nude children in non-sexual situations - e.g. cherubs / renaissance paintings, tribal settings, swimsuits, and even semi-nude children with semi-nude adults in the same picture - e.g. breastfeeding, childbirth.
That said, there is certainly still a lot of room for improvement on the current CSAM-prevention system. Taking it to the next level is unfortunately more like a research project (mainly becasue of how cheap I need to run it) than simply flipping a "enable stronger CSAM filtering" switch, so I don't have a clear ETA at this point, but in the meantime it's helpful if people can report loopholes in the current system.
Thanks! It should be fixed now. Note that it's a client-side issue so if users report the issue still, it's possible they still have the old code, so they should refresh the page. If they still get the issue after refresh, then let me know.
That does narrow it down a lot, thank you. I expected it to work in a different browser, so this is surprising.
The things I'm most curious about next are: (1) whether it works if you create a new account - you should be able to use a temp-mail or other throwaway email provider - and try again to fork https://perchance.org/blank and (2) whether it works on a different internet connection, like phone hotspot (with wifi disabled so it uses your phone data connection) or similar.
Sorry about this, it sounds like a bug.
You mentioned:
If you could answer these questions that would be very helpful:
The strangest part is this:
If you can't see the "backups" button, then the only thing I can think of is maybe an ad blocker or some other browser extension is doing something weird to the UI and/or network requests.
Neocities (https://neocities.org/) might be a handy alternative/backup if you mainly need HTML/JS hosting, and not the perchance engine/plugins/etc. It's fully open source too: https://github.com/neocities/neocities so it's objectively better than perchance in that (important) regard.
Rest assured it's just a bug. I think shutting down perchance would be kind of like deleting wikipedia in terms of "level of betrayal". It doesn't compute for me.
Edit: I did just fix an issue where invalid unicode sequences were blocking saves, but I doubt that was the cause because it wouldn't explain the lack of backups button or 'view your generators' list failure. My best guess is still something related to your browser or browser extensions or network issues, or something like that.
For any website on the internet (not specific to perchance):
TL;DR: If you want to hide your IP, you need to use a reputable VPN like NordVPN, and make sure you've got their browser extension installed. This applies to any website on the internet, not just perchance, to be clear.
Sorry about that! It was a bug on my end, not your fault. It should be fixed now - please let me know if it's still occuring.
Ah good point! Sorry for the delay here, I've just added the ability to write
imageOptionsas a function - so you should now be able to just replace your original imageOptions with something like this:I'm not sure which generator you're talking about here. I don't think I've substantially changed the UI of any of my own generators recently. Note that anyone can create their own generator on Perchance, so you might have been using someone else's. Can you share a link?
Hmm I wasn't able to reproduce this. I made a character with just
oc.window.show()in custom code and opened it on Android Chrome, and closed the window with the button, and I was still able to scroll down the chat feed. Can you share more details (and/or a character share link) so I can reproduce?Fixed, thanks! I've just removed that old default regex filter list entirely since it's literally one character to work around the blocked words, and I can't defend against that without even more false positives like your example. We have the (much more intelligent) report system now, so it's less needed I think. Generator devs can of course add their own custom regex filters, like before.
Yeah I agree it's confusing for newbies. The choice to make the tags separate from the comments plugin is partly to avoid centralizing plugin stuff, and partly to reduce the chance of accidental deanonymization/identity-linking - same idea behind why people get a new/separate comments plugin tag for each generator they visit.
The reasons I added the tag btw were:
It wouldn't be too hard for me to add a way for the comments plugin to be used as 'auth' for other plugins, so that if you have a username on the comments plugin, you could use it to "prove" who you are to other plugins like the text to image plugin, which could then sign/tag the image with your username. That would be one way to keep the plugins composable rather than coupled/centralized, and would allow people to opt-in to deanonymization/identity-linking.
Sorry for the delay on this, it's a good question. I'm assuming you're talking about using this plugin: https://perchance.org/t2i-framework-plugin-v2
If so, I've just added a
settings.beforeGeneratefunction to make this easy to do:That
beforeGeneratefunction runs right after the user clicks the generate button, but before any images are actually generated, so you can use it to do any preprocessing work, like in this example where we create a variable with a specificguidanceScalevalue that'll be used in multiple other places in your code during the later phases.I've added example usage at the bottom of the settings in this generator: https://perchance.org/ai-text-to-image-generator#edit
Let me know if you notice any bugs or have any issues with it.
This should do the trick:
There are a couple of gotchas here which are easy to trip on:
For the second issue, you can actually use single quotes for the outer quotes instead, which means you don't need to backslash the inner quotes:
Pro tip: This, btw, is just regular JavaScript stuff (the syntax/code inside square blocks is always just executed as JavaScript), rather than anything specific to the perchance engine itself, so you can ask an AI something like:
And it should give you an answer even if it doesn't know anything about perchance (though it may be a bit confused by
[buy.Cons.PowerCharge.img]because that's perchance syntax, and it probably expects to see a plain https url there in place of that).Thanks for your detailed investigation here. I'm not sure, but I think editing "hidden from AI" / etc. is actually just triggering a re-render, which "shows" the issue, rather than actually causes it.
One possibility is that you're using some custom code in that character that (likely via
oc.messageRenderingPipeline) purposefully/inadvertantly edits the prompt inside the<image>...</image>tag, which would cause a mismatch.I was thinking I could match it via a heuristic like just checking
(imgN:0)if the initial__savedImagesexact-prompt-match fails, but I think that would mean editing the message to change an image prompt wouldn't work - i.e. it'd just load the stale one rather than loading the new one. I could maybe makeimgNincrement for any prompt that's manually edited, but I haven't thought that through fully and my suspicion is that that gets a bit iffy. I think we do need to keep exact-match, and if so, then any custom code that 'renders' a message (oc.messageRenderingPipeline) shouldn't touch anything inside<image>tags. Same goes for custom code that edits the actual content of a message of course.Thanks! Fixed.
Thanks for letting me know about this! I think I've fixed it (for now, at least) by optimizing away some bottlenecks. I'm overdue a server upgrade for the comments plugin, so if you continue to get problems, please let me know and I'll expedite the move to a larger server.
Thanks! I think this is fixed now (assuming you meant
tabbed-comments-plugin-v1)I just made an edit a few hours ago which might have fixed this. Can you refresh the page, clear all your data/chats with the trash emoji button (beside export button), and then create a few chats, and then export them, and then import and let me know if the 'modelName' issue still occurs?
If it does still occur, then can you tell me if your device's storage is nearly full (like >90%), and let me know which device/OS (like iphone vs android) and browser (like chrome vs safari) you're using?