perchance

joined 2 years ago
MODERATOR OF
[–] [email protected] 1 points 3 days ago

Ah thank you! Fixed. It shouldn't save as new gen when you're using a collab link anymore, even if you're logged in and not the gen's owner.

[–] [email protected] 3 points 3 days ago* (last edited 3 days ago)

There are a few factors here, but it's most likely up to the laws in your country, and as far as I know, most countries do allow (or at least not explicitly ban) you to sell AI generated content, but some countries have laws which don't allow you to claim copyright over that content - meaning that you're allowed to sell it, but you couldn't e.g. prevent others from copying your book cover image and using it in their own work.

[–] [email protected] 5 points 4 days ago* (last edited 4 days ago) (1 children)

Fair, sorry. I've taken it down. You mentioned in a comment in this thread that you'd be okay with me keeping it there if I added credit, which is nice of you. I think your profile (and your original nsfw version of this character) is probably too nsfw to link to unfortunately. A lot of the character cards and character card sites seem to be very heavy on the nsfw content.

I should probably create all the example characters from scratch with some help from Claude or R1. Some of them have already been almost completely rewritten and have different pics, but even then the original creator still deserves credit for the core idea.

(That said, I'll probably attempt to selfishly put off a re-write of the examples for now because at some point in the hopefully-very-near future I'll finish creating the "database plugin", and at that point the work to redo the examples would be wasted because the examples will be removed in favor of a community-contributed database of characters, implemented using that plugin.)

[–] [email protected] 1 points 5 days ago* (last edited 5 days ago) (1 children)

I think all the weird browser issues are fixed (I think it was to do with bad cache headers resulting in different versions depending on when editor was first loaded in the browser being tested), but please let me know if not.

If the gen owner CTRL-Zs, it affects everyone’s edit if they are editing in real time.

Thanks! I think this is fixed now, if not let me know.

It needs the owner to ‘save’ the generator to create a backup of the old edit.

I'm not sure what you mean by "create a backup of the old edit" - but to be clear it should be possible for anyone with the collab link to save - i.e. not just the owner. Please let me know if that's not the case.

Changes are to the editors are LIVE, but a reload/auto-reload is needed for generator viewers to see the changes in the preview window. If there are changes made by other collaborators and the gen owner tries to refresh the page, there would be a prompt that there are unsaved changes, but the changes are still applied to the page.

The "unsaved changes" prompt is actually correctly warning you in the sense that you need to save the changes to be sure that they're not lost, since (currently) if all collaborators leave, then the collab server will (eventually) "garbage collect" the session. I could make it so the session state is persisted to disk - that would perhaps be more intuitive (this may have to wait for now though, so the warning should be taken seriously until it no longer appears).


Also, in https://perchance.org/collab-testing-01-01 you have Password: hello (or maybe someone else added that), but it's not possible to manually set an "edit password" (unless I've forgotten a feature I added...). It should be a random string of letters/numbers. Note that the edit password is different to the collab password/link. Edit passwords are really only necessary for anon-created generators, which is why you're not given an edit password for generators that are created when you're logged in. The "edit password" gives you more permissions than the collab password. For example, the edit password has the capability to disable/enable collab links. Whereas the collab link/password just gives you the ability to edit/save a generator and participate in the live editing session.

[–] [email protected] 3 points 5 days ago* (last edited 4 days ago) (1 children)

It's a good underlying question, despite some misunderstandings¹. Your overall point here is this:

technically you don’t really have privacy if you’re using someone else’s generator.

which is correct, and is unfortunately how the internet works in general. I.e. any webpage on the internet can do whatever it wants with the data that you input into it. I must stress that Perchance generators are no different to any other webpage on the internet in this regard.

(As Vionet20 mentioned, I wrote some related comments here, which includes info about how Perchance sandboxes generators, which means that in terms of privacy from ads/trackers, Perchance is arguably much more private than the average ad-supported website, since ads/trackers aren't able to see what you input into Perchance generators at all, ever.)

That said, I've just added a feature which allows you to "lock down" a generator so that it can only communicate with external servers that you explicitly specify, so data can't leave your browser unless you allow it to. Ideally this would be a feature that's built into web browsers themselves, but until then this is an improvement.

Here's the explainer:

https://perchance.org/custom-content-security-policy?$csp

TL;DR: Add ?$csp to the end of the generator URL (like you see in the above URL) to prevent it from making requests to external servers, which means your data will always remain in your local browser storage only. But be sure to read the above-linked page to e.g. see how to add exceptions for generators that need it, since the default filter is quite strict.

Alternate/additional tips to protect your privacy on the web:

  • As mentioned on the above page, you can use a VPN, and you can also make sure you never input personal info (e.g. your real name) into any web page unless you trust it. This is the most simple and practical approach to privacy on the internet.
  • Perchance-specific tip: You can fork a generator to make your own copy, so once you've checked it then you can be sure it won't change. That said, you should also be sure to fork any plugins that it imports (ones that aren't 'official', at least).
  • Mostly Perchance-specific since other websites tend to have minified/obfuscated code: You can copy the code of a generator, and/or things it imports, and ask an AI like ChatGPT/Claude/DeepSeek to analyse it for any data exfiltration.
  • You may be interested in running AI models locally, which is by far the best way privately use AI models - if you can afford the hardware that's required (i.e. one or more high end gaming GPUs): https://www.reddit.com/r/SillyTavernAI and https://www.reddit.com/r/LocalLLaMA and https://www.reddit.com/r/StableDiffusion/

@[email protected]

¹ Misunderstanding: "ostensibly for logging purposes" - no, rather, it's because they literally wrote the entire application/experience/game that you're viewing - it's not possible for the Perchance platform to shield your prompts from the generator author, since the author is the one writing the code that e.g. pre-processes your prompts (maybe adds styles to it, for example), sends those prompts to the AI, post-processes the results, integrates the resulting data with other plugins, etc. to create the whole experience. This does not mean that generator authors on Perchance automatically see your prompts. By default everything is private. They'd have to specifically write sneaky code to send your prompts to an external server, and that can be blocked by this new ?$csp feature. But to be honest, the best approach to privacy is to just (1) use a VPN and (2) never put personal/sensitive info into random websites on the internet. If you can't do both of those, then try to use reputable websites/generators, since they presumably have a good track record and also have "more to lose" by screwing over users. They'll also be under more public scrutiny as a result of being more popular.

[–] [email protected] 1 points 1 week ago* (last edited 1 week ago) (2 children)

it requires the gen owner to save to apply any edits [...] And the collab editor saving the gen will making a new copy.

Hmm this definitely shouldn't be the case. Anyone with the collab link should be able to save/apply the edits. Can you try again, and if you're able to reproduce it, can you let me know the steps to take to replicate?

If someone with the collab link saves it, it should just save it as if they were the gen owner (i.e. not make a new copy).

[–] [email protected] 4 points 2 weeks ago* (last edited 2 weeks ago)

Thank you! Done. I really appreciate the work you did to find those quick fixes 🙏

[–] [email protected] 1 points 2 weeks ago

Hi, I might be misunderstanding, but the custom code below seems to work for me (after sending each message, the button's number increases). Can you please send me a character link or some custom code which replicates this issue?

let count = 0;
oc.thread.on("MessageAdded", function() {
  count++;
  oc.thread.shortcutButtons = [{autoSend:false, insertionType:"replace", message:"/ai test", name: "test " + count, clearAfterSend:true}];
});
[–] [email protected] 3 points 2 weeks ago* (last edited 2 weeks ago) (3 children)

The issue is before many try and error

Can you let me know any details about the issue you had? It may have been that the server's rate limits were too strict. I've just edited them to give a bit more leeway, so hopefully that's solved your issue.

If there’s multiple dev, they should keep using the link for a long period without nuke the gen?

Luckily it's not possible to 'nuke' the gen with this feature (even if there remain some early issues with the collab server), since you can always just open the 'backups' list and download any older version of your gen. That said, it's certainly possible that there are 'annoying' bugs where you e.g. temporarily get out of sync with other devs in your collab due to stuff like the aforementioned rate-limiting. And again, please do let me know (and give as much info as possible) if you come across any issues like this.

 

You can now click the gear icon in the text editor and create a "collab link" for your generator. If you share that link with others, they'll be able to edit/save the generator, and you'll be able to see each others text cursors/carets.

You can disable/invalidate the link, and regenerate a new one.

Please let me know if there are any issues! I may be able to improve the performance/latency of it after some more work on the server.

[–] [email protected] 3 points 3 weeks ago* (last edited 3 weeks ago) (4 children)

Hmm can you please share the URL? When visiting the URL did you see a 404? I suspect it was just a temporary cloudflare issue or something. It definitely wasn't deleted by the upload moderation unless something has gone catastrophically wrong, since the moderation rejects files during upload. So if it was working several hours ago, then it can't have been due to the upload moderation.

 

Several months ago I said new image generation quality would be coming soon. Then flux came out and I was like "oh cool, i'll just wait a month or so for community finetunes", and once again informed people that an image gen upgrade was not far off. But it turns out flux is really hard to finetune in its current form.

Aside: There have been attempts to fix this issue, but we're not quite there. I've been helping some people who are working on this (mainly dataset stuff, I'm no ML researcher), and progress is being made, but we're still at least a month away from 'serious' flux finetunes.

So base flux still doesn't know 'basic' stuff (e.g. doesn't even know most pokemon), and illustrious (another new model) requires a very specific prompting format.

While helping with the eventual open source flux finetune, I have also been attempting to put together a system that would intelligently route to the best model based on prompt content, and also generate tags for illustrious based on a natural language prompt, but it's still not good enough.

So Perchance images are atrociously bad at this point, and I considered just upgrading to SDXL, but this would likely mean two upgrades in a short period of time, both of which would require prompt engineering adjustments on the part of perchance generator devs. That would be annoying, and maybe more painful than just dealing with bad generation quality for another month or two.

In hindsight, I should have just upgraded to SDXL midway through 2024 (or even earlier). We may actually get another text gen upgrade before the image gen one at this rate. We're also getting close on video gen now with models like HunyuanVideo, which seems to be finetunable, and is quite fast with FastVideo.

Tangentially, I've been spending a lot of time on behind the scenes server stuff recently. For example, I've had to add filters to prevent people from uploading literal CSAM to perchance.org/upload - a problem that I naively did not consider when first creating the upload feature. This sort of work is annoying because it doesn't result in fun new features or plugins, but spending time on automating this sort of thing is important, because it ensures that e.g. using features like /upload doesn't require logging in, and doesn't e.g. require employing people for moderation. I'd much rather move a bit slower, and ensure perchance's sustainability and complete independence.

And tangential to that: One thing that I want to publicly promise, just so I can say "I told you so" in 20 years, is that Perchance will never "sell out" or "rug pull" in any sense of either phrase. It'll always be a bit weird. It'll never get investors, I'll never sell it, never require login, never send you emails (except e.g. password reset), never put ads on generators (unless it imports an AI/server-GPU-powered plugin), never add user-hostile social mechanics that try to increase 'engagement metrics', and so on. The OG devs here know this I hope, but there are newbies and non-devs here who think perchance is just another "AI site" that is burning investor money to keep it free, in preparation for a rugpull once they have market share. Perchance is a different kind of website. It's a public good that I maintain, not a "startup". The price you pay for this as someone who uses perchance is slower development, which I think is worth it, especially considering that it's always been like this, and people seem to like perchance (though I'm sure many wish I could fix/improve things faster).

So anyway, this was (supposed to be) just a quick post about what's been happening recently on the dev side of things. Apologies for the huge delay on the image gen side of things. Also sorry for the lack of response to a lot of posts and messages - I have a large backlog of stuff to get to (as usual, please feel free to ping me again and/or repost weekly).

[–] [email protected] 3 points 1 month ago* (last edited 1 month ago) (1 children)

Okay I just made it so if you add background:transparent to the containerStyle option, then that propagates into the iframe and makes the background transparent. Let me know if that doesn't work, or if you think it should work in a different way. I've tested only in Chrome linux:

https://perchance.org/comments-plugin-transparent-background-example#edit

[–] [email protected] 1 points 1 month ago* (last edited 1 month ago) (1 children)

RE Perchance as a Lorebook - I think this could be used instead?

https://perchance.org/api/downloadGenerator?generatorName=noun&listsOnly=true

listsOnly=true was only documented on perchance.org/advanced-tutorial but I've just added a note about it to perchance.org/download-button-plugin to help make people more aware of this.

12
submitted 3 months ago* (last edited 3 months ago) by [email protected] to c/[email protected]
 

I've received a few messages from experienced developers asking how they might be able to help improve Perchance. I typed out a decently long (but somewhat rambling and incomplete) response to a message just now and figured I might as well post it publicly for the benefit of others who are interested.

The TL;DR is probably: The most impactful thing that devs can do for the perchance community is to just have fun building things (generators/plugins/etc) that are interesting/useful to you, and then share your creations with friends or communities that might enjoy them. This is very helpful!

Message response below:


The Perchance site itself is really just a code editor with a sandboxed iframe (that the code is thrown into), and a mongodb server for accounts/generators, so not a lot of my dev time goes into that level of the platform. And the DSL/engine doesn't change much at this point (though an overhaul will likely come at some point), so most of my time is spent on creating plugins, examples/applications, and stuff like that.

I could add a bunch more features to the site, but I prefer to keep the foundation very simple, which is why I create plugins like perchance.org/upload-plugin and perchance.org/comments-plugin and so on. I.e. instead of adding comments as a "native" feature, I just add it as a plugin, which allows me to be more nimble and experimental.

There are limits to this, of course. One native feature that is sorely needed imo is collaborative editing - akin to Google Docs, so you can just share a link to start working on stuff with others. Another is optional AI-assisted code auto-completion. For both of those I need to upgrade to CodeMirror 6, but the Lezer stuff is kinda gnarly. If someone managed to get the Perchance DSL highlighted with CodeMirror 6 that would be very handy, but this is definitely not a "good first issue". I did spend one day on it, thinking that's all it'd take, but I now realize that it's something which I'll need to set aside several days for, and I've been putting it off.

Here's the basic setup for CodeMirror 6: https://perchance.org/codemirror6-basic-html#edit

And I originally thought I'd use the same mixed parsing approach that @codemirror/lang-html uses, except instead of the HTML script tags triggering the transition from non-JS text to JS-highlighted text, it'd be square brackets (and function headers), but I think the problem with that is that the HTML parser has the advantage that the closing script tag in HTML code always means "end of JS" (even if it's e.g. in the middle of a JS string! this can be somewhat surprising to many web devs), whereas closing square brackets can 'validly' occur in JS code without necessarily indicating the end of a square block. Someone here seems to have come to the conclusion that Lezer might not be a good fit for this sort of thing, and so a stream parser might be the way to go, but I'm not so sure, because IIUC, @codemirror/lang-javascript manages to do it with template strings. I.e. ${ to indicate start of JS, and } to indicate end. That's almost identical to what is needed for the Perchance DSL, so it seems like Lezer can do this. But maybe @codemirror/lang-javascript is doing some non-Lezer stuff, since IIRC there are some proprocessing/tokenization things you can do before it gets passed to Lezer. Either way, using the official JavaScript (or html/markdown/etc - which includes it as a sub-module) parser, with some minimal modifications, is probably the way to go, since I don't want to have to maintain a from-scratch lib of that level of complexity.

So that's one thing that comes to mind right now, but that said, probably the most helpful thing that community members can to do to help Perchance is to create generators/plugins/games/etc. An interesting one that I noticed a few days ago, as an example: https://perchance.org/ai-roguelike and another: https://perchance.org/infinitecraft-but-its-a-trading-card-game

The advantage of helping in this way is: 1) it's fun and you can just build stuff that's interesting to you, and 2) it doesn't require any coordination with me or anyone else. The latter point is pretty important because I'm a pretty solitary/hermit type of person, so it may be hard to get in contact with me for several weeks at a time.

I've spent quite a bit of time recently building generators to try and provide examples of games/experiences/tools that can be created with the AI plugins. The more people there are doing this, the more I can move down to the lower levels of Perchance. My bottleneck is currently at the higher "application" level, rather than the platform level, if that makes sense.

 

By "hide" I mean it shows a button in the top-right, which when clicked, shows the full header bar.

Examples:

Please let me know if you run into any issues or have feedback 🙏

Edit: Also, for people who know some JavaScript, you can use the public generator list API to get generators with specific tags like this:

let data = await fetch(`https://perchance.org/api/getGeneratorList?tags=foo`).then(r => r.json()); // returns generators tagged 'foo'
let data = await fetch(`https://perchance.org/api/getGeneratorList?tags=foo,bar`).then(r => r.json()); // foo AND bar
 

I think I got to the root of what was causing this. If anyone is still having issues signing up, please comment here.

 

See plugin page for details and examples:

https://perchance.org/favicon-plugin

 

As was noted on the plugin page, this was on the roadmap, but not yet supported. I've added support now thanks to a prod from @wthit56 so you can treat it just like you would a normal 'static' import.

One nice use case that this properly/robustly unlocks is the situation where you e.g. have a plugin that you've made, and you want to import the comments plugin so people can chat about your plugin and ask questions, but you don't want to cause all importers of your plugin to automatically get the comments plugin as a dependency.

If you just dynamically import the plugin in your HTML panel, then importers of your plugin won't get the comments plugin as a dependency. Example:

https://perchance.org/import-only-in-html-panel-no-dependency-example#edit

(Reminder that, as mentioned on the dynamic import plugin page, you should only use the dynamic import plugin in very particular scenarios, like this one, or e.g. when you have hundreds of imports but only a subset of those imports tend to get used by any particular user of your generator. Regular imports will generally allow for much faster generator loading, since all the data is preloaded.)

 

As usual, the Chrome team is leading the charge on some exciting new web platform tech. The goal is to release some prototypes and eventually write up the feature as a browser standard that would make its way into all browsers (i.e. not just Chrome).

The point is, it'd run completely on-device (no cloud access, works offline), so it'd be a very small model, but would likely still be smart enough for a lot of tasks - e.g. summarizing text, converting a list of words into a grammatically correct sentence/description, guessing an appropriate emotion based on some character dialogue, etc.

Article: https://developer.chrome.com/docs/ai/built-in

The key problem with these text generation models is how massive they are. They're so big that they could literally fill your entire device (for smart phones and cheap laptops, at least), and would bloat the initial browser download time from a few minutes to a few days for a lot of people.

Still, smaller models are getting surprisingly smart, and while they're still several times the size of the actual browser download itself, this download can be done in the background.

Either way, I'm excited about this new direction, because there are lots of tasks that don't require an extremely smart model, and so it's overkill to use /ai-text-plugin, especially since it means ads will be shown for non-logged-in users.

One problem that I do anticipate, is that the models will be extremely "safety-oriented", meaning refusal to even generate stuff like violence in a DnD fantasy adventure, and stuff like that. I know from experience that Google's Gemini models have false-positive-refusal rates that almost make them unusable even for many sfw tasks. There is a mention of LoRA fine-tuning in the article, which is very exciting and might help with that. If you're a web dev, you can use the links on the page to test their prototypes and give constructive+professional feedback on them. It'd be good for the health of the web platform to have some of the feedback be for use-cases like Perchance, and not just e.g. business applications.

Tangentially, builders here may also be interested in Transformers.js which allows you to run AI models in your browser. Ad-free AI plugins could already be created using this project, although for a lot of models the download times are a bit too long, and processing times also a bit too long (for mobile devices especially). Still, the situation is improving quite rapidly. /ai-character-chat already uses Transformers.js for text embedding.

 

It basically allows you to specify to different colors - one for if the user's device is in light mode, and the other if they're in dark mode. Here's an example gen showing how to use it:

https://perchance.org/css-light-dark-test#edit

<style>
  html { color-scheme: light dark; } /* this line is important! otherwise the code below won't work */
  
  body {
    background: light-dark(lightgrey, black);
  }
</style>

<p style=" color:light-dark(blue,lime); ">this text will be blue in light mode and lime in dark mode</p>

Note that this is a very new browser feature, and a lot of people are on older browser versions, so for at least the next few months you should probably still add a default color before your light-dark color like color:blue; color:light-dark(blue,lime);. That way the older browsers will still get the right colors, but in the newer browsers the light-dark color will override the default color.

5
submitted 8 months ago* (last edited 8 months ago) by [email protected] to c/[email protected]
 

I know there are a few people here who enjoy archiving - e.g. https://perchance.org/vionet20-abulafia-conversions

So I figured I'd mention this which I just stumbled across - from this post:

https://www.stevensavage.com/blog/2023/09/seventh-sanctum-next.html

I’m going to start making my generator notes and data available to you. The data is pretty easy to just bundle up, but I also want to make some notes on how to use it. I’ll make this very visible on the site so you can just download it and go do your own thing.

Replicate my generators. Enhance them. Build your own. Learn from them. Whatever works for you.

I know I can’t maintain the site forever – if nothing else, I won’t be around forever.

Perchance, on the other hand is going to be around until the heat death of the universe, so if anyone wants to help Steven preserve his work via Perchance versions of his gens, here's the data:

https://www.seventhsanctum.com/archive/sanctumdata.zip

If you work out the conversion rules, I or someone else can write the JavaScript code for a mostly-automated converter.

 

First, some context:

When you call list.evaluateItem, it evaluates the square and curly blocks of course, but it also removes backslashes that were before any square or curly blocks. Backslashes are used to tell the Perchance engine that a square or curly bracket should be interpreted 'literally' - i.e. not as a character with a special meaning.

So, for example if we call evaluateItem on a list item like this: {1|2|3} \[cool\] the output will be something like 2 [cool]. If we didn't put the backslash before the square bracket, the Perchance engine would look for a variable/list called "cool" and if it didn't find one, you'd get an error. The backslash says "treat this as a normal/literal square bracket - not a fancy Perchance thing".

Now to the point of this post:

Notice how in the above example of using evaluateItem on a list, the output (2 [cool]) has the backslashes removed? As previously mentioned, that is the correct/desired behavior. But I just found a bug where if you call evaluateItem on a string like {1|2|3} \[cool\] it would output 2 \[cool\] instead of 2 [cool].

I've just fixed this bug - so the backslashes are now removed (just like when using evaluateItem on lists and list items), but I've made it so the bugfix is only applied when you next save your generator - just in case there are any issues with the fix. So please go ahead and save your generator, and if you run into any issues, even if you fixed them, please let me know in the comments. Any examples of issues will help me build an understanding of the effect of this change.

Thanks!

 

This likely won't be relevant to a lot of devs here, because the remember plugin does the job fine in most cases, but:

Here's a normal text input (id is not needed for this example, but is almost always needed so adding it here):

<input id="thingyInput">

And here's one which remembers what you type into it even after page refresh:

<input id="thingyInput" oninput="localStorage.thingy=this.value" value="[localStorage.thingy || '']">

Of course, the remember-plugin can do this for you, but I often find myself reaching for the above pattern for its simplicity.

localStorage is what the remember-plugin uses behind the scenes - whatever you store in it will be persisted even after page refresh. It's a built-in browser/JavaScript feature - not something that's specific to Perchance.

The || '' in [localStorage.thingy || ''] means or ''. In other words, it means or output nothing. If you want a default value for when the user loads the page for the first time, you could write [localStorage.thingy || 'blah'] which means "use whatever is in localStorage.thingy if it exists, otherwise use 'blah'"

view more: next ›