
There is no "Image to Image" or "AI Image Editor" working in Perchance.
Looking at the code, it is generated through the AI code helper in which there are these sections:
// AI Remove Object
removeBtn.addEventListener('click', async function() {
showLoading('Removing objects with AI...');
// Simulate AI processing
setTimeout(() => {
if (selectedArea.isActive && selectedArea.width !== 0 && selectedArea.height !== 0) {
// For demo: fill selection with a gradient (simulating AI inpainting)
const gradient = ctx.createLinearGradient(
selectedArea.x, selectedArea.y,
selectedArea.x + selectedArea.width, selectedArea.y + selectedArea.height
);
...
// Simulate AI object extraction
setTimeout(() => {
const img = new Image();
img.onload = function() {
// Scale the image
Which is why it doesn't work.
You can set the href
through your code, not directly on the HTML e.g.:
// function generateMisquote()
...
// Select quote from array if necessary
const original = selectQuote(quoteEntry.original);
const misquoted = selectQuote(quoteEntry.misquoted);
const source = selectQuote(quoteEntry.source);
const url = quoteEntry.url // get the url link
...
// Update after a short delay for the fade-out effect
setTimeout(function() {
// Display the misquoted quote and source
quoteTextEl.textContent = misquoted.text;
quoteSourceEl.textContent = `— ${source.text}`;
quoteSourceEl.href = url; // set the href based on the url link
...
What you can do is this:
// Lists Editor
movieTitlePrompt
instruction = Make a title for a [g = genre.selectOne] movie with a length of [l = length.selectOne] and an age rating of [ar = ageRating.selectOne]. Only include the title, nothing else. No subtitle.
title
[ai(movieTitlePrompt)]
// ---
// HTML
<p>Title: [title]</p>
<p>Genre: [g]</p>
<p>Length: [l]</p>
<p>Rating: [ar]</p>
Having the generator 'private' only delists them from the /generators
page. If someone else knows what the URL is (or has saved the URL before you've privated the generator), they can access it. The gallery is also quite buggy in which some images aren't saved, and some images just pop up of nowhere. Can't really tell what problem is occurring there.
Well, the purpose of the showFeedback
property is to 'show' the actual comments sent on the feedback comments section, not to 'hide' the button. On the fork that you mentioned, the feedback button is deliberately commented out, which is why it is hidden.
Almost all AI Text on Perchance uses the same model. Some are calling other through external API. But based on both that you've linked, yes, they are using the same LLM. From what we know from the plugin page ai-text-plugin it is a LLaMa based model, but the specific model is unknown.
On the edit generator screen, you can click the 'settings' on the top right, and you can change the URL. Images are bound to the URL of the page, meaning if you change the URL, then those images are also gone, but you can revert the URL back to get back the images.
By private gallery do you mean the gallery below the generator (I'm assuming that you are using a generator using the t2i-framework-plugin-v2
based generator like ai-text-to-image-generator), then it isn't a private gallery, it is the public gallery. If you changed the gallery destination, into a different name (other than public
), there might be a case in which other people are also using the same gallery e.g. even if you changed the gallery name into private
it wouldn't be private, it would just be sent to the gallery named private
.
You cannot perma delete images from the gallery by yourself, you need to block and have other people block that specific poster for their images to not display on the public gallery (see this related thread).
I would recommend using the actual 'private' gallery option that saves the data in your local storage. This is enabled with by adding the following on your settings (assuming you are using the t2i-framework
):
settings // This is the main settings list that is passed to `t2i-framework-plugin-v2` to generate the interface.
...
imageButtons
personality = true
privateSave = true // Make sure to have this line.
Then you can click the 🛡️💾
to save it locally on your browser.
You can have each of the suits into a single list, then control that parent list. E.g.
Uniform
https://user.uploads.dev/file/53321b33603b8f9f386fb870db73ad65.png
[Top] ^[camera.includes("top") && actor != "dryad"]
[Mid] ^[camera.includes("mid") && actor != "angel"]
[Low] ^[camera.includes("low") && !["mermaid", "minotaur"].includes(actor)]
[Rear] ^[camera.includes("rear") && actor != "angel"]
[TopMidLow] ^[["top", "mid", "low"].some(a => camera.includes(a))]
Top
batman mask ^[specificCostume == "batman"]
...
Mid
batman suit with batman logo on the chest, batman gloves, batman belt ^[specificCostume == "batman"]
...
If you are using HTML inputs, you can easily access their values like checkbox.checked
for checkboxes and radio buttons, textinput.value
for input values and select dropdowns, in which you can also set their default values for each one natively, unless the function that you've made is for 'resetting' to default values.
I would also go with the way that you have a single global object for all of your variables, just for organizing and ease of access.
You should select the actor
first, to filter the clothes that it can wear. Then, select the camera to further filter the clothes that would be displayed that depends on the framing.
EDIT: Here is a test gen for it: https://perchance.org/ho5e2n0vwt
I think I see the idea you have. What is the scope of the variable you are trying to set it to? You currently have it as:
for (const [key, value] of Object.entries(variablesMapping)) {
if (this[key] === undefined || this[key] === null) {
this[key] = value;
}
}
You are using this
, which refers to the function. It should probably be set into what you have your initial variables, e.g. if you have your variables as properties in a variable called inputs
, then it should be:
for (const [key, value] of Object.entries(variablesMapping)) {
if (inputs[key] === undefined || inputs[key] === null) {
inputs[key] = value;
}
}
So that if you use it like inputs.charNum
, it would be set to the default that you have set with the defining()
method.
On how you have your data, you can probably just add a url
property for each instance of the source e.g.:
{
name: "original",
label: "Original",
placeholder: "Click the button below to generate an original quote.",
data: [
{
quote: "Happiness beckons you once you forget you were looking for it.",
source: "Eleanor Trent, 'Where's Joy?'",
url: "link here"
},
{
quote: "Memory is just the past asking for a permanent residence permit.",
source: "Dr. Selim Farouk, 'The Mind's Archive'",
url: "another link here"
},
{
quote: "No one knows how Sentience is born, but we sure know how to kill it.",
source: "Dr. Marcus Webb, 'The Philosophy of Consciousness'",
url: "link here"
},
...
Then you can access it with .url
(quoteEntry.url
) and set it as the href
of the quoteSourceEl
.
The Automatic1111 link should have installation procedures on how to install it (and automatic installations) for your device. Here is for NVidia GPUs: https://github.com/AUTOMATIC1111/stable-diffusion-webui/wiki/Install-and-Run-on-NVidia-GPUs
As for the other one, here is the steps on how to install it: https://github.com/Raxephion/Old-Perchance-Revival-WebUI/tree/main?tab=readme-ov-file#-easy-setup-windows---download--run
You need to make the quoteSourceEl
to be an <a>
tag e.g. <a id="quoteSourceEl" class="source" href="#"></a>
, then after you add a href
value, it would be a hyperlink.
There should be no problem with linking the defaultCommentOptions
on JavaScript, it would be on this part of your code on the HTML:
...
let othersChatDiv = document.createElement('div');
othersChatDiv.id = 'others-chat-container';
othersChatDiv.style.display = 'none'; // Hide others chat by default
let mainChatOptions = defaultCommentOptions.createClone;
mainChatOptions.channel = "qine-main-chat";
mainChatOptions.commentPlaceholderText = "Casual talk, memes, fun — all here!";
mainChatOptions.onComment = function (comment) {
// Handle new comments in Main Chat
console.log("New comment in Main Chat:", comment);
}
let mainChatPlugin = commentsPlugin(mainChatOptions);
...
The problem is bannedUsersList
is not in the generator, so it gives errors. Removing that from the defaultCommentOptions
makes it work.
Consecutive ~
will do that e.g. ~~Test~~
, you can maybe just add a space or reduce the number of ~
.
If you want ~
you can just use it as is e.g. ~Testing~
no need for escape.
Best way I would think is use the default comment options that you have on the Perchance lists:
defaultCommentOptions // for comments plugin: https://perchance.org/comments-plugin
width = 100%
height = 350
commentPlaceholderText = Leave friendly comments..
submitButtonText = submit comment
bannedUsers = [bannedUsersList]
customEmojis = {import:huge-emoji-list}
adminFlair = 👑 Creator
adminPasswordHash = 4b7a8a671d949baf24756f731091d13018de5c2ab4dd2cc1c1612a6643986933
As the base options like so:
let mainChatOptions = defaultCommentOptions.createClone;
mainChatOptions.channel = "qine-main-chat";
mainChatOptions.commentPlaceholderText = "Casual talk, memes, fun — all here!";
mainChatOptions.onComment = function (comment) {
// Handle new comments in Main Chat
console.log("New comment in Main Chat:", comment);
}
let mainChatPlugin = commentsPlugin(mainChatOptions);
Can you link the page you are working with?
Test your prompts in the different styles with ease! You can also import your own {import:styles}
to test.
https://perchance.org/multiple-style-tester


The Winter Market
> Link to Events in Perchance Hub
Second Character Jam. Create and share characters for the ai-character-chat
that is within the given theme/scenario.
A quaint town square, transformed into a bustling winter market under the tender embrace of twilight. The cobblestone streets, lined with stalls aglow with warm lights, stand as a stark yet inviting contrast to the frosty air, beckoning all who pass by to indulge in the festive spirit that resonates within.
When: Dec 6, 2024 12:00PM UTC
to Dec 31, 2024 12:00PM UTC
Rules
- Limit NSFW Characters
- Preferably OC Characters
--- Submission Comment Format: ```
Character Name - by Author
! Description... Character Chat Link ```
Perchance Data
```perchance_data // This Part is Required for the Perchance Hub // This would be where the Event Organizer would change the data to update the Hub // Remember to indent with two spaces!
// List About the Event to be displayed on the Hub metadata title = The Winter Market description = A quaint town square, transformed into a bustling winter market under the tender embrace of twilight. The cobblestone streets, lined with stalls aglow with warm lights, stand as a stark yet inviting contrast to the frosty air, beckoning all who pass by to indulge in the festive spirit that resonates within.<br><br><i>The Winter Market</i> beckons you to bring life and warmth into the winter market. Bring to life characters who'll warm the chilly nights with their stories and interactions. type = Character Jam // Can be "Generator Jam", "Image Challenge", "Character Jam", etc. image // Can be multiple pictures to randomize the banner image :) // Must end with the '.png', '.webp', or any valid image format. https://lemmy.world/pictrs/image/108b7a1d-d99a-4366-9a85-ff67019ac818.png
// strict data formats see: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse#non-standard_date_strings start = 06 December 2024 12:00:00 UTC+0000 end = 31 December 2024 12:00:00 UTC+0000 color = repeating-linear-gradient(45deg, #ff0000a0 0px, #ffffffa0 20px, #ff0000a0 20px, #008000a0 40px, #ffffffa0 40px, #008000a0 60px) // background color of the banners any valid CSS colors rules // Just some rules or constraints for the event // can just be one rule or a list of rules Limit NSFW Characters Preferably OC Characters
// For AI Character Chat (ACC) Character Jams chars // Character Name // link = https://perchance.org/ai-character-chat?data=CharName~12345.gz // ai-character-chat share link // avatar = https://image-url.png // or any valid image format // author = Author // description = Description Chibimancer Laura link = https://perchance.org/ai-character-chat?data=Chibimancer_Laura~3260f5989a4dba3bd45ec1a59d6ea014.gz avatar = https://lemmy.world/pictrs/image/21fac4c4-6878-49f3-a7a1-00a23cecccda.jpeg author = Allo description = Chibimancer Laura is looking for a player for her new roleplaying adventure called "Chibis and UwUs" ~and that player is you! Tane-tan Jung link = https://perchance.org/ai-character-chat?data=Tane-tan_Jung~36d004505ae8414a6c18b0f1c430423f.gz avatar = https://lemmy.world/pictrs/image/6ea040c6-6d0f-407d-83b6-616ee813aade.png author = Vionet20 description = You bump into Tane-tan Jung in a bustling Winter Market. She's busy tending to her taiyaki stall, but when she notices you, she offers a warm smile and a gesture of apology. Despite her inability to speak, she uses her expressive eyes and hands to ask if you're okay. You're drawn to her warmth and the delicious scent of her freshly baked taiyaki.
//
// You can request a format of other events just ask on the forum!
// In your Lemmy Post, you must have the [Community Event]
in the title.
//
```
On the editors, you can search/highlight with RegEx (Regular Expressions) however, the matches cannot be iterated, and you cannot replace them. The old editor allowed this (as far as I remember), as well as using the captured groups as replacement ( /(\d+)\.(.+)?/gm
can be replaced with $1 - $2
to change the matches 1.Test
to 1 - Test
).
There is a feature that was recently added which is the 'Edit Password' upon saving a generator that isn't yours (you are remixing another person's generator). It is for recovering/saving an edited generator without logging in (or those users that are having trouble with saving generators since the email verification is having problems).
Steps:
- Click edit in the generator you want to edit.
- Upon saving, and opt to create a generator (since you can't save a generator to an account since you are not logged in), it would then give out a 'edit password'. Remember/Save this generated string as well as the newly created URL (not the original one).
- Later on (as long as the local storage is not cleared) you can navigate again to that newly created page (while still not logged in into an account) then enter the edit password after clicking save to return back/apply your changes to the generator.
A video demo of how it works.
cross-posted from: https://lemmy.world/post/19286382
> There has been a couple of Community Events in Casual Perchance since its implementation via Lemmy World posts. > > #### What kind of events would you like to see or be part of? > > Some of the old events were: > - Generator Jam - like a Game Jam but with generators based on a theme > - Plain - create a generator that fits the specified theme > - Useful Generators - generators that can be imported/useful for other generators (i.e. importable lists or plugins etc.) > - Mad Science - not generators but anything made with Perchance Syntax. > - Contribute to a Generator - didn't get much traction, like a Generator Jam, but you allow others to give feedback/suggestions throughout the event to the generator you have submitted. (Might change this to just a Feedback/Suggestion Jam, submit your generators for feedback and suggestions and don't require to create a new generator) > - Image Challenge - Mostly AI Images generated with Perchance text-to-image-plugin based on a theme. > > Also, feel free to give any feedback or suggestions about the Community Events. Some more specific feedback/suggestion categories are: > - Length of Events > - Type/Content of Events > - Engagement or Retainability of Participants > > Note that you can host your own Community Events, see this post for an explanation.
There has been a couple of Community Events in Casual Perchance since its implementation via Lemmy World posts.
What kind of events would you like to see or be part of?
Some of the old events were:
- Generator Jam - like a Game Jam but with generators based on a theme
- Plain - create a generator that fits the specified theme
- Useful Generators - generators that can be imported/useful for other generators (i.e. importable lists or plugins etc.)
- Mad Science - not generators but anything made with Perchance Syntax.
- Contribute to a Generator - didn't get much traction, like a Generator Jam, but you allow others to give feedback/suggestions throughout the event to the generator you have submitted. (Might change this to just a Feedback/Suggestion Jam, submit your generators for feedback and suggestions and don't require to create a new generator)
- Image Challenge - Mostly AI Images generated with Perchance text-to-image-plugin based on a theme.
Also, feel free to give any feedback or suggestions about the Community Events. Some more specific feedback/suggestion categories are:
- Length of Events
- Type/Content of Events
- Engagement or Retainability of Participants
Note that you can host your own Community Events, see this post for an explanation.


Unexplored Wilderness
Create generators that invoke the wilderness (nature, danger), curiosity (discovery, documentation), and adventure (heading into the unknown, trailblazing), be it fictional or non-fiction.
Make generators with the lines of an odyssey to unexplored regions, mapping the vast reaches of the galaxy, or looking deep within oneself.
When: August 7, 2024 12:00PM UTC
to August 28, 2024 12:00PM UTC
Perchance Data
```perchance_data // This Part is Required for the Perchance Hub // This would be where the Event Organizer would change the data to update the Hub // Remember to indent with two spaces!
// List About the Event to be displayed on the Hub metadata title = Unexplored Wilderness description = Create generators that invoke the wilderness (nature, danger), curiosity (discovery, documentation), and adventure (heading into the unknown, trailblazing), be it fictional or non-fiction. type = Generator Jam image https://lemmy.world/pictrs/image/f3889aca-b153-49a9-a9b0-2079eba7dce3.png // Can be multiple pictures to randomize the banner image :) start = 07 August 2024 12:00:00 UTC+0000 // strict data formats see: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse#non-standard_date_strings end = 28 August 2024 12:00:00 UTC+0000 color = linear-gradient(77deg, #386945, #30aa34) rules = Make generators with the lines of an odyssey to unexplored regions, mapping the vast reaches of the galaxy, or looking deep within oneself.
// For Generator Jams with Perchance URL generators // The generator's $metadata is also parsed immerse-in-senses author = Vionet20 type = Text // For Image Events images
// You can request a format of other events just ask on the forum! // Banner Info: // Generator Used: text2image-generator // Prompt: a behind the character shot of a small group on high elevation overlooking an unexplored forest region, exploration, adventure, high fantasy, concept art // Negative Prompt: \[mountains, mountain ranges, high mountains, columns of rocks:0.05\] // Resolution: 768x512 // Art Style: [Vionet20-Styles] Comic/Manga Illustration ```
Update 4: Fixed
Update 3: It seems that changing the 'src' of the iframe
of the embedded seems to apply the changes. Clicking on the 'Go to Event' buttons on the home tab seems to revert the page to its previous versions. A video recording of the problem.
Update 2: Can confirm that the changes are reflected after a couple of minutes, for now.
Update: The embedded page has now reflected the changes. Will monitor if any other changes are immediately (or at least after a little bit of time) reflected.
I'm posting again to re-open a previous bug.
Previous Post: https://lemmy.world/post/15639946
Currently, the /hub where the /hub-events is embedded to, doesn't have the updated /hub-events page.
I've updated the code in the /hub-events last July 25. But currently, the change to it isn't reflected on the embedded /hub-events on the /hub at the Events tab.
Last time, it updated itself after a few minutes, but now two days have passed it hasn't updated yet.
Not sure when this problem happened, but if you take a look at https://perchance.org/a-testing-gen which has an embedded Perchance page to https://perchance.org/b-testing-gen, the changes on the embedded generator /b-testing-gen, isn't applied on the iframe on /a-testing-gen.
I've tried disabling the cache on DevTools, reloaded both gens (and saved them again) and the changes on /b-testing-gen isn't applied on the /a-testing-gen.
HTML tables with the Perchance Syntax! With Header Rows, Footer, Caption, and First Column Header Options!

Improved Make Table Plugin
This is a modification of the make-table-plugin with added features:
- Row Heights (option to change heights of each row)
- Row Alignments (option to change the alignment of the text in the row)
- Header Rows (makes the first row of the table bold, and an option to stylize it)
- Footer Rows (last row bold, and option to stylize it)
- Column Header (bold first column of the table, and option to stylize it)
- Caption (adds a Caption to the table, with option to place it at the top, and at the bottom, and to stylize it).
Here is an example of a table that can be made from it: !
I've also created a Helper to help create tables with the plugin at Improved Make Table Plugin Helper.
Suppose we have the following list: ```plaintext createInstance = {import:create-instance-plugin}
person
name = [this.nameList]
nameList
Salman
Manny
Rhian
age = {31-49}
child = [this.child_obj]
child_obj
name = [this.nameList]
nameList
Anne
Arram
Amelia
age = {3-17}
If we output:
text
[p = createInstance(person, "deep"), p.name] [p.age] [p.name] [p.age]
We can see that it has fixed the `name` and the `age` property on the instance. However, if we output:
text
[p = createInstance(person, "deep"), p.child.name] [p.child.age] [p.child.name] [p.child.age]
It would throw `undefined`. Now looking at similar list:
text
person
name = {Salman|Manny|Rhian}
age = {31-49}
child = [this.child_obj]
child_obj
name = {Anne|Arram|Amelia}
age = {3-17}
output [p = createInstance(person, "deep"), p.child.name] [p.child.age] [p.child.name] [p.child.age] ``` This would have the values fixed and working.
Looking at the code of the create-instance-plugin
, it would only allow the 'deep' fixing of properties if there isn't any items/lists in it. What that means is the following:
text child_obj name = [this.nameList] nameList Anne Arram Amelia age = {3-17}
This object/list, has a list ( nameList
) within it as well as properties (name
and age
), while:
text child_obj name = {Anne|Arram|Amelia} age = {3-17}
Only has properties. and based on Line 22
of the create-instance-plugin
:
js ... } else if(propValue.getPropertyKeys && propValue.getPropertyKeys.length > 0 && propValue.getLength === 0) { ...
If the list to be fixed has a list within it other than the properties i.e. propValue.getLength
is not zero, then it wouldn't fix the properties within it.
The first child_obj
has a nameList
with it, and upon calling propValue.getLength
it would have 1
while the second child_obj
will return a propValue.getLength
of 0
since it doesn't have any lists.
Thus, the solution for the problem is just removing the propValue.getLength === 0
check OR create another check without it.
---
TLDR; propValue.getLength === 0
at Line 22
of the create-instance-plugin can be removed to allow properties that rely on same level lists to be fixed. Here is the demo of the problem with a 'remixed' create instance plugin with the fix.
I've been made aware that the code I've written to access text-to-speech from ElevenLabs API is no longer working.
I've tested it and it seems that the CORS-Proxy that is being used in ai-character-chat
currently doens't allow POST
methods (which is being used to 'post' the text to be 'spoken' in ElevenLabs).
Not a major/priority issue but might be nice to be fixed. I also wonder how many are using text to speech (even just using the Speech Synthesis code) in the ai-character-chat
....
Found out about this possible improvement to the URL Params Plugin in which you currently cannot pass through URL params in the null.perchance
domain in an <iframe>
i.e. it doesn't parse the passed through parameters.
I was able to pass through parameters in an iframe in the normal perchance
domain, but without the null
part, it has the navigation bar and seems to mess up the CSS. I'm currently applying it to 'navigate' from the 'Home' tab of the hub to the 'Events' tab, then select the appropriate events page using the URL params.
cross-posted from: https://lemmy.world/post/14744285
> I've mentioned this on another post, but I'll create a new thread to hear other opinions. > > I'm proposing to have the Community Events on Perchance Hub be hosted on this Lemmy Community. > > To accomplish this, the Forms tab on the Perchance Hub would be changed to Events tab. It would host the Event posts from this community. > > That is, anyone can post an Event thread here and it would be mirrored on the Perchance Hub. > > Technical Notes: The posts here would be retrieved (via the Lemmy API) and the posts would be filtered to events only. The Event posts will then be parsed and neatly displayed on the Perchance Hub. This would mean that the posts would have a template to follow. > > This is so that anyone is welcome to create Events and those Event makers would be the ones who will manage their own events (no longer needing to wait the Perchance Hub update). > > This way, there could be different events running, managed by different people, with different topics, event types, and limitations/rules and to update the details on the Perchance Hub, the event creators can just edit the event posts and it would reflect on the Hub. > > Not yet sure about what details would be on the Perchance Hub. But something like @BluePower's Upcoming Events Page might be a good format/structure to remix with (although the comments plugin on each event on Perchance Hub might not be used since the Event Post already have a comments/thread to talk with). > > Technical Notes: The mirrored details can probably include a cover image, ability for the creators to change the colors on the Hub, specify if it is an 'image' event, 'generator/page' based event, etc., so the formatting on the Hub would be nice. > > In Summary: > - Community Events will be hosted in https://lemmy.world/c/casual_perchance > - Events are now hosted/managed by Event Creators > - The posts would have a (somewhat strict) template to nicely structure them on the mirror on the Perchance Hub. > - Events can simultaneously ran by different people, with different topics, event types, limitations or rules. > - Events can be updated by the Event Creator > - Event Details and Content / Template Format is not yet decided > - Format in the Perchance Hub is not yet designed. > > Additional Notes: > - With this, I might remove the 'announcement modal' on the hub upon first visit (or when there is update to it) to remove the clutter. > - Might also implement a dark mode to the Hub. (will require quite an overhaul on the hub page) > - Might dynamically add the Event's banner on the Home Page for each event (with the most recent and about to end event on the top). > - I currently do not have a stable internet so these changes might take a while to implement xD
I've mentioned this on another post, but I'll create a new thread to hear other opinions.
I'm proposing to have the Community Events on Perchance Hub be hosted on this Lemmy Community.
To accomplish this, the Forms tab on the Perchance Hub would be changed to Events tab. It would host the Event posts from this community.
That is, anyone can post an Event thread here and it would be mirrored on the Perchance Hub. > Technical Notes: The posts here would be retrieved (via the Lemmy API) and the posts would be filtered to events only. The Event posts will then be parsed and neatly displayed on the Perchance Hub. This would mean that the posts would have a template to follow.
This is so that anyone is welcome to create Events and those Event makers would be the ones who will manage their own events (no longer needing to wait the Perchance Hub update).
This way, there could be different events running, managed by different people, with different topics, event types, and limitations/rules and to update the details on the Perchance Hub, the event creators can just edit the event posts and it would reflect on the Hub.
Not yet sure about what details would be on the Perchance Hub. But something like @BluePower's Upcoming Events Page might be a good format/structure to remix with (although the comments plugin on each event on Perchance Hub might not be used since the Event Post already have a comments/thread to talk with). > Technical Notes: The mirrored details can probably include a cover image, ability for the creators to change the colors on the Hub, specify if it is an 'image' event, 'generator/page' based event, etc., so the formatting on the Hub would be nice.
In Summary:
- Community Events will be hosted in https://lemmy.world/c/casual_perchance
- Events are now hosted/managed by Event Creators
- The posts would have a (somewhat strict) template to nicely structure them on the mirror on the Perchance Hub.
- Events can simultaneously ran by different people, with different topics, event types, limitations or rules.
- Events can be updated by the Event Creator
- Event Details and Content / Template Format is not yet decided
- Format in the Perchance Hub is not yet designed.
Additional Notes:
- With this, I might remove the 'announcement modal' on the hub upon first visit (or when there is update to it) to remove the clutter.
- Might also implement a dark mode to the Hub. (will require quite an overhaul on the hub page)
- Might dynamically add the Event's banner on the Home Page for each event (with the most recent and about to end event on the top).
- I currently do not have a stable internet so these changes might take a while to implement xD
Here is my attempt on modifying the tabs-plugin
to allow 'Nested' Tabs.
Link to the Modified Plugin.
Demo Generator using the modified plugin.
> This was made to address the problem of SynthAce (asked at the Perchance Hub - Learn Tab)
Technical Notes
-
I have reverted the 'minified'
window.Tabs
function to the un-minified to learn more about how the function works. > The code is originally from Zoltantothcom's Vanilla JavaScript Tabs Project -
On the
let titles
code, I have removed theonclick
on the<li>
elements as removing them didn't have any impact on the plugin. I have also added a dataset attributetablist
on the<a>
elements inside the<li>
elements which will be thetabListKey
(this is important to only reset the current tab's list and not all the tabs). -
On the
let contents
code, I've also renamed thedata-belongs-to-tab-list
to justdata-tablist
. -
On the main div with class
tabs-plugin
, I've also added thedata-tablist
to specify which tab has which key. -
On the reverted
Tabs
function, I've added atabList
variable which is taken from the tab list key of the main tab element. -
I've modified the
reset
function to pass through the tab list key to only reset the tab with the same keys, preventing resetting of the other tabs. It uses thequerySelectorAll
and selects only the items with the specified tab list key. -
I've also modified the
onClick
function to pass through the tab list key to only update ( and reset ) the specified tab. Since previously it would update all tabs which causes problems in nested tabs.
@perchance@lemmy.world - pinging dev :)
Here is my implementation of 'remembering' the resized size of the textarea
inputs. It is using the ResizeObserver
(documentation) and will only observe textarea
elements with resize
style property enabled.
It is enabled with the @inputs
:
[remember(root, "@inputs")]
EDIT: It would only save the resized size if you have inputs on the textarea.
EDIT 2: Fixed width responsiveness (for elements with width: 100%; max-width: ... ; resize: vertical
where if the width gets lower than its maxed, it would save the width and fix the size without option to resize it back (since it is only resize: vertical
). It now only saves the resizable direction i.e. height if resize is vertical
and vice versa. For both
or normal textarea
it would save both width and height.
Here is the modified plugin: https://perchance.org/t2w8fixecn
Here is an example of it: https://perchance.org/5tfbmi0gtc
Due to the number of similar questions about the AI tools, here is a compiled list of frequently asked questions about the AI tools in Perchance.
Perchance AI FAQ
Please read it carefully and if you have any questions that isn't mentioned there, you can comment here.
On the ai-text-plugin
, there is a way to get the inputs that were sent to the AI using the onStart(data)
function:
> onStart(data)
- the code you put in this will run at the start of the generation process. You can access the inputs being used with data.inputs.instruction
, data.inputs.startWith
, etc.
I am wondering if we could also get the same for the text-to-image-plugin
?
It can be either on the onStart(data)
or on the onFinish(data)
in which we can get the inputs/static values that were used for the response of the AI e.g. data.inputs.prompt
, data.inputs.negativePrompt
, etc.
With this, some features that can be implemented is a local history of past generations, in which the previous inputs were temporarily stored in the storage (or on the local storage so even if the page reloaded, the history is saved), then the users can revisit the previous generations (I have set up something similar like this on my text to image generators but they have some hacks to work).
This is not really a priority but might be good to have. Thanks!

Doing Perchance.org things...
Links
- Perchance: vionet20-gens
- Mastodon: VioneT20@mastodon.social
- Reddit: /u/VioneT20