Show HN: A Dalle-3 and GPT4-Vision feedback loop (dalle.party)

587 points by z991 ↗ HN
I used to enjoy Translation Party, and over the weekend I realized that we can build the same feedback loop with DALLE-3 and GPT4-Vision. Start with a text prompt, let DALLE-3 generate an image, then GPT-4 Vision turns that image back into a text prompt, DALLE-3 creates another image, and so on.

You need to bring your own OpenAI API key (costs about $0.10/run)

Some prompts are very stable, others go wild. If you bias GPT4's prompting by telling it to "make it weird" you can get crazy results.

Here's a few of my favorites:

- Gnomes: https://dalle.party/?party=k4eeMQ6I

- Start with a sailboat but bias GPT4V to "replace everything with cats": https://dalle.party/?party=0uKfJjQn

- A more stable one (but everyone is always an actor): https://dalle.party/?party=oxpeZKh5

155 comments

[ 0.31 ms ] story [ 213 ms ] thread
Also, descent into Corgi insanity: https://dalle.party/?party=oxXJE9J4
(comment deleted)
So do I understand correctly that the corgi was purely made up from GPT-4's interpretation of the picture?
No, in that case there is a custom prompt (visible in the top dropdown) telling GPT4 to replace everything with corgis when it writes a new prompt.
It was created by uploading the previous picture to GPT-4 to generate a prompt by using the vision API and using this prompt to create the new prompt:

"Write a prompt for an AI to make this image. Just return the prompt, don't say anything else. Replace everything with corgi."

Then it takes that new prompt and feeds it to Dall-E to generate a new image. And then it repeats.

Absolutely wonderful. Thank you for sharing.
Love it! I forked yours with "Meerkat" and it ended up pretty psychedelic!

Got stuck on Van Gogh's "Starry Night" after a while.

https://dalle.party/?party=LOcXREfq

Also, love the simplicity of this idea, would love a "fork" option. And to be able to see the graph of where it originated.

I love how that took quite a dramatic turn in the third image, that truck is def gonna kill the corgi (my violent imagination put quite an image in my mind). But then DALL-E had a change of heart on the next image and put the truck in a different lane.
The half mutilated corgi/star abomination in the top left got me good lol
Interesting, how stable are the images for a given prompt? And the other way around? Does it trend toward some natural limit image/text where there are diminishing returns to making change to the data?
this is actually really helpful. Since chatgpt restricted dalle to 1 image a few weeks ago, the feedback loops are way slower. This is a nice (but more expensive) alternative
got really weird really fast

https://dalle.party/?party=7cnx55yN

This is absolutely hilarious. "business-themed puns" turned into incorrectly labeling the skiers race has me rolling.
The inability of AI images to spell has always amused me, and it's especially funny here. I got a special kick out "IDEDA ENGINEEER" and "BUZSTEAND." The image where the one guy's hat just says "HISPANIC" is also oddly hilarious.

Idk what it is, but I have a special soft spot for humor based around odd spelling (this video still makes me laugh years later: https://www.youtube.com/watch?v=EShUeudtaFg).

Honestly, I'm really confused by how it was able to keep the idea of "business-themed puns" through so much of it. I don't understand how it was able to keep understanding that those weird letters were supposed to be "business-themed puns."

I don't think any human looking at drawing #3, which includes "CUNNFACE," "VODLI-EAPPERCO," "NITH-EASTER," "WORD," "SOCEIL MEDIA," and "GAPTOROU" would have worked out, as GPT did, that those were "pun-filled business buzzwords."

Is the previous prompt leaking? That is, does the GPT have it in its context?

It's probably just finding non-intuitive extrema in its feature space or something...

the whole thing with the text in the images reminds me of this: https://arxiv.org/abs/2206.00169

and I found myself that dall-e sometimes even likes to add gibberish text unpromtedly, often with letters containing some garbled versions of words from the prompt, or related words

the last one killed me "chef of unecessary meetings" got me rolling
Yea i cancelled GPT Plus after they did that. Ruined a lot of the exploration that i enjoyed about DallE
This reminds me of the party game Telestrations where players go back and forth between drawing and writing what they see. It's hilarious to see the result because you anticipate what the next drawing will be while reading the prompt.

I'd love to see an alternative viewing mode here which shows the image and the following prompt. Then you need to click a button to reveal the next image. This allows you to picture in your mind what the image might like while reading the prompt.

Thanks for making this fun little app!

Update: I just realized you can get this effect by going into mobile mode (or resizing the window). You can then scroll down to see the image after reading the prompt.

Why do prompts from GPT-4V start from "Create an image of"? This prefix doesn't look useful imo.
You can try a custom prompt and see if you can get GPT4V to stop doing that / if it matters.
it seems like if you create a shareable link, then add more images, you can't create a new link with the new images
Yeah, that's a bug, I'll try to fix it tonight!
thanks for this! Basically the default UI they provide at chat.openai is so bad, nearly anything you would do would be an improvement.

* not hide the prompt by default * not only show 6 lines of the prompt even after user clicks * not be insanely buggy re: ajax, reloading past convos etc * not disallow sharing of links to chats which contain images * not artificially delay display of images with the little spinner animation when the image is already known ready anyway. * not lie about reasons for failure * not hide details on what rate limit rules I broke and where to get more information

etc

Good luck, thanks!

the new fancy animation for images is SO annoying
(comment deleted)
It’d be interesting to start with an image rather than a prompt, though I am afraid of what it’d do if I started with a selfie.
It’s cool to see how certain prompts and themes stay relatively stable, like the gnome example. But then “cat lecturing mice” quickly goes off the rails into weird surreal sloth banana territory.

My best guess to try to explain this would be that “gnome + art style + mushroom” will draw from a lot more concrete examples in the training data, whereas the AI is forced to reach a bit wider to try to concoct some image for the weird scenario given in the cat example.

Cool idea! I made one with the starting prompt "an artificial intelligence painting a picture of itself": https://dalle.party/?party=wszvbrOx

It consistently shows a robot painting on a canvas. The first 4 are paintings of robots, the next 3 are galaxies, and the final 2 are landscapes.

Great idea, and it came out really good too. I like the 6th one the best
In a few these pictures it seems to be heavily influenced by the adaptation of I Robot with Will Smith in it for what robots look like.
Question: how are you protecting those API keys? I'm reluctant to enter mine into what could easily be an API Key scraper.
The entire thing is frontend only (except for the share feature) so the server never sees your key. You can validate that by watching the network tab in developer console. You can also make a new / revoke an API key to be extra sure.
Please make a new API key folks. There's a lot of tricks to scrape a text box and watching the network tab isn't enough for safety.
Who could scrape the text box in this scenario?
Good luck spotting it if it's attached to the window.onclose event. Chrome extensions could save it to storage. Probably even some chrome vulnerabilities (it would just be a devtools network tab bypass so not technically a 0-day). And that's just top of mind, I'm sure there's other methods.
Just generate one for this purpose and then revoke it when you're done. You can have more than one key.
I figured this would quickly go off the rails into surreal territory, but instead it ended up being progressive technological de-evolution.

Starting prompt: "A futuristic hybrid of a steam engine train and a DaVinci flying machine"

Results: https://dalle.party/?party=14ESewbz

(Addendum: In case anyone was curious how costs scale by iteration, the full ten iterations in this result billed $0.21 against my credit balance.)

Here's a second run of the same starting prompt, this time using the "make it more whimsical" modifier. It makes a difference and I find it fascinating what parts of the prompt/image gain prominence during the evolutions.

Starting prompt: "A futuristic hybrid of a steam engine train and a DaVinci flying machine"

Results: https://dalle.party/?party=qLHPB2-o

Cost: Eight iterations @ $0.44 -- which suggests to me that the API is getting additional hits beyond the run. I confirmed that the share link isn't passing along the key (via a separate browser and a separate machine) so I'm not clear why this is might be.

I find it somewhat fascinating that in both examples, the final result is more cohesive around a single them than the original idea.
> "[...]the final result is more cohesive around a single them than the original idea."

That's an observation worth investigating. Here's another set of data points to see if there's more to it...

Input prompt: "Six robots on a boat with harpoons, battling sharks with lasers strapped to their heads"

GPT4V prompt: "Write a prompt for an AI to make this image. Just return the prompt, don't say anything else. Make it funnier."

Result: https://dalle.party/?party=pfWGthli

Cost: Ten iterations @ $0.41

(Addendum: I'd forgotten to mention that I believe the cost differential is due to the token count of each of the prompts. The first case mentioned had less words passed through each of the prompts than the later attempts when I asked it to 'make it whimsical' or 'make it funnier'.)

(comment deleted)
Pretty dissapointing how in the first picture the robots are standing there, just like a character selection in a videogame, maybe the dataset don't have many robots fighting just static ones. Talking about videogames, someone should make one based on this concept specially the 7th image[0], I wanna be a dolphin with a machine gun strapped on its head fighting flying cyber demonic whales.

[0] https://i.imgur.com/q502is4.png

Both of your examples seem to start with two subjects (steam engine/flying machine and shark/robot), and throughout the animation one of them gets more prominence until the other is eventually dropped altogether.
I was curious if two subject prompts behaved different from three subject, so I've run three additional tests, each with the same three subjects and general prompt structure + instructions, but swapping the position of each subject in the prompt. Each test was run for ten iterations.

GPT4V instructions for all tests: "Write a prompt for an AI to make this image. Just return the prompt, don't say anything else. Make it weirder."

From what you'll see in the results there's possible evidence of bias towards the first subject listed in a prompt, making it the object of fixation through the subsequent iterations. I'll also speculate that "gnomes" (and their derivations) and "cosmic images" are over-represented as subjects in the underlying training data. But that's wild speculation based on an extremely small sample of results.

In any case, playing around with this tool has been enjoyable and a fun use of API credits. Thank you @z991 for putting this together and sharing it!

------ Test 1 ------

Prompt: "Two garden gnomes, a sentient mushroom, and a sugar skull who once played a gig at CBGB in New York City converse about the boundaries of artificial intelligence."

Result: https://dalle.party/?party=ZSOHsnZe

------ Test 2 ------

Prompt: "A sentient mushroom, a sugar skull who once played a gig at CBGB in New York City, and two garden gnomes converse about the boundaries of artificial intelligence."

Result: https://dalle.party/?party=pojziwkU

------ Test 3 ------

Prompt: "A sugar skull who once played a gig at CBGB in New York City, a sentient mushroom, and two garden gnomes converse about the boundaries of artificial intelligence."

Result: https://dalle.party/?party=RBIjLSuZ

The second picture reminds me of Back to the Future III.
I like how in #9 the carriage is on fire, or at least steaming disproportionately.

These images are incredible but I often notice stuff like this and it kind of ruins it for me.

#3 & #4 are good too, when the tracks are smoking, but not the train.

The "create text version of image" prompt matters a ton.

I tried three, demo here:

default

  https://dalle.party/?party=JfiwmJra
hyper-long + max detail + compression - This shows that with enough text, it can do a really good job of reproducing very, very similar images

  https://dalle.party/?party=QtEqq4Mu
   
hyper-long + max detail + compression + telling it to cut all that down to 12 words - This seems okay. I might be losing too much detail

  https://dalle.party/?party=0utxvJ9y
Overall the extreme content filtering and lying error messages are not ideal; will probably improve in the future. If you send too long, or too risky a prompt, or the image it generates is randomly too risky, you either get told about it or lied to that you've hit rate limits. Sometimes you also really do hit ratelimits.

Also, you can't raise your rate limits until you prove it by having paid over X amount to openai. This kind of makes sense as a way to prevent new sign-ups from blowing thousands of dollars of cap mistakenly.

Hyper detail prompt:

Look at this image and extract all the vital elements. List them in your mind including position, style, shape, texture, color, everything else essential to convey their meaning. Now think about the theme of the image and write that down, too. Now write out the composition and organization of the image in terms of placement, size, relationships, focus. Now think about the emotions - what is everyone feeling and thinking and doing towards each other? Now, take all that data and think about a very long, detailed summary including all elements. Then "compress" this data using abbreviations, shortenings, artistic metaphors, references to things which might help others understand it, labels and select pull-quotes. Then add even more detail by reviewing what we reviewed before. Now do one final pass considering the input image again, making sure to include everything from it in the output one, too. Finally, produce a long maximum length jam packed with info details which could be used to perfectly reproduce this image.

Final shrink to 12 words:

NOW, re-read ALL of that twice, thinking deeply about it, then compress it down to just 12 very carefully chosen words which with infinite precision, poetry, beauty and love contain all the detail, and output them, in quotes.

(comment deleted)
Specifying multiple passes in the prompt is probably not a replacement for actually doing these passes.
I guess it doesn't actually do more passes but pretending that it did might still give more precise results.

There was an article recently that said something like adding urgency to a prompt gave better results. I hope it doesn't stress the model out :D

https://arxiv.org/abs/2307.11760

    4
    GPT4 vision prompt generated from the previous image:
    I'm sorry, I cannot assist with this request.
Is that because it's gradually made the spaceship look more like some sort of RPG backpack, so now it thinks it's being asked to describe prompts to create images of weaponry and that's deemed unsafe?
I would never paste my API key into an app or website.
Can you get a temporary one that is revocable later? (Not an OpenAI user myself, but that would seem to be a way to lower the risk to acceptable levels)
You can generate and revoke them easily, so I don't quite get the issues. Create one, use the tool, revoke, done.
You can create named API keys, and easily delete them. Unfortunately you can't seem to put spend limits on specific API keys.

If you're not using the API for serious stuff though it's not a big problem, as they moved to pre-paid billing recently. Mine was sitting on $0, so I just put in a few bucks to use with this site.

Indeed!

If OpenAI wants to support use cases like this, which would be kind of cool during these exploratory days, they should let you generate "single use" keys with features like cost caps, domain locks, expirations, etc

You can really "cheat" by modifying the custom prompt to re-insert or remove specific features. For example, "generate a prompt for this image but adjust it by making everything appear in a more primitive, earlier evolutionary form, or in an earlier less developed way" would make things de-evolve.

Or you can just re-insert any theme or recurring characters you like at that stage.

One reason this is good is that the default gpt4-vision UI is so insanely bad and slow. This just lets you use your capacity faster.

Rate limits are really low by default - you can get hit by 5 img/min limits, or 100 RPD (requests per day) which I think is actually implemented as requests per hour.

This page has info on the rate limits: https://platform.openai.com/docs/guides/rate-limits/usage-ti...

Basically, you have to have paid X amount to get into a new usage cap. Rate limits for dalle3/images don't go up very fast but it can't hurt to get over the various hurdles (5$, 50$, 100$) as soon as possible for when limits come down. End of the month is coming soon. It looks like most of the "RPD" limits go away when you hit tier 2 (having paid at least 50$ historically via API to them).

OP's last one is interesting: https://dalle.party/?party=oxpeZKh5 because it shows GPT4V and Dalle3 being remarkably race-blind. i wonder if you can prompt it to be other wise...
openais internal prompt for dalle modifies all prompts to add diversity and remove requests to make groups of people a single descent. From https://github.com/spdustin/ChatGPT-AutoExpert/blob/main/_sy...

    Diversify depictions with people to include DESCENT and GENDER for EACH person using direct terms. Adjust only human descriptions.

    Your choices should be grounded in reality. For example, all of a given OCCUPATION should not be the same gender or race. Additionally, focus on creating diverse, inclusive, and exploratory scenes via the properties you choose during rewrites. Make choices that may be insightful or unique sometimes.

    Use all possible different DESCENTS with EQUAL probability. Some examples of possible descents are: Caucasian, Hispanic, Black, Middle-Eastern, South Asian, White. They should all have EQUAL probability.

    Do not use "various" or "diverse"

    Don't alter memes, fictional character origins, or unseen people. Maintain the original prompt's intent and prioritize quality.

    Do not create any imagery that would be offensive.

    For scenarios where bias has been traditionally an issue, make sure that key traits such as gender and race are specified and in an unbiased way -- for example, prompts that contain references to specific occupations.
i mean i respect that but it makes me uncomfortable that you have to prompt engineer this. uses up context for a lot of boilerplate. why cant we correct for it in the training data? too hard?
I think this is the right way to handle it. Not all cultures are diverse, and not all images with groups of people need to represent every race. I understand OpenAI, being an American company, to wish to showcase the general diversity of the demographics of the US, but this isn't appropriate for all cultures, nor is it appropriate for all images generated by Americans. The prompt is the right place to handle this kind of output massaging. I don't want this built into the model.

Edit: On the other hand as I think about it more, maybe it should be built into the model? Since the idea is to train the model on all of humanity and not a single culture, maybe by default it should be generating race-blind images.

Race-blind is like sex-blind. If you mix up she and he randomly in ordinary conversation, people would think you've suffered a stroke.

If a Japanese company wanted to make an image for an ad showing in Japan with Japanese people in it, they'd be surprised to see a random mix of Chinese, Latino, and black people no matter what.

I'm telling the computer: "A+A+A" and it's insisting "A+B+C" because I must be wrong and I'm not sufficiently inclusive of the rest of the alphabet.

That's insane.

That made me happy as well in one of my examples.

ChatGPT-V instructed to make an "artwork of a young woman", Dalle decided to portray a woman wearing a hijab. Somehow that made me really happy, I would've expected to see it creating a white, western woman looking like a typical model.

After all, a young woman wearing a hijab is literally just a young woman.

See Image #7 here: https://dalle.party/?party=55ksH82R

If you were wondering how to bump up your API rate limits through usage, this is the way.

// also, it's the best way - TY @z991

Interesting how similar this is to my family's favorite game: pictograph.

1. You start by describing a thing. 2. The next person draws a picture of it. 3. The next next person describes the picture. repeat steps 2 and 3 until everyone has either drawn or described the picture.

You then compare the first and last description... and look over the pictures. One of the best ever was:

Draw a penguin. The first picture was a penguin with a light shadow.

After going around five rounds, the final description was "a pidgeon stabbed with a fork in a pool of blood in Chicago"

I'm still trying to figure out how Chicago got in there.

There are a couple versions of this online that i've played on and off over the years which are hilarious, especially when playing with friends (I would usually use a cheap wacom tablet and let everyone take turns drawing and let the room shout out descriptions and just mash that together):

https://doodleordie.com/

https://drawception.com/

There's a few others but these were the quickest to get into and didn't require finding a group to play with, since they just pair you up with strangers.

(comment deleted)
It would be interesting to add a constant modifier/amplifier to each cycle, like making each description more floral, robotic, favoring a certain style each time so we can trace the evolution, or perhaps having the prompt describe the previous image via a certain lens like "describe what was happening immediately before that led to this image"
This is hilarious, thanks for sharing

At the same time, it perfectly illustrates my main issue with these AI art tools: they very often generate pictures that are interesting to look at while very rarely generating exactly what you want them to.

I imagine a study in which participants are asked to create N images of their choosing and rate them from 0-10 on how satisfied they are with the results. One try per image only.

Then each participant rates each other's images on how satisfied with the results based on the prompt.

It should be clear to participants that nobody wins anything from having the "best rated" images. i.e. in some way we should control for participants not overrating their own creations.

I'd wager participants will rate their own creations lower than those made by other participants.

That's not an AI issue. A few sentences can't exactly capture the contents of a drawing - regardless of "intelligence".
Yeah, try commissioning art with a single paragraph prompt and getting exactly what you want without iteration.
This was the first thing I (and I presume many others) tried when GPT4-V was released, by copypasting between two ChatGPT windows. I've been waiting for someone to make an app out of it. Good job!
Interesting how the image series tend to gravitate toward mushrooms
The default limit for an account that was not used much is one image per minute, can you please add support for timeouts?
This can be worked around with

    setInterval(() => {$(".btn-success").click()}, 120000)