Tag: Image Generation

  • Hacker Cat Loading Up kkrieger on Illicit Computer Hardware

    Anthropomorphic cat typing on a keyboard connected to a cube-shaped computer with built-in CRT Hercules monitor. Image created with Stable Diffusion.

    I made this image of an anthropomorphic cat hacker with Stable Diffusion while thinking about the illicit computer hardware in Vernor Vinge’s “True Names” (1981) and award-winning .kkrieger first person shooter that occupies only 96K disk space and procedurally creates its textures, music, and sound effects at runtime–simply put a phenomenal bit of programming. I got wine setup to run .kkrieger on my computer, so I’m thinking a post about it is in the works.

  • Working on the Site’s Cyberpunk Header Image with Stable Diffusion

    A cyberpunk scene of a floating AI in the center of a computer room and a woman standing to one side of it looking up. Image created with Stable Diffusion.

    I’ve been working on the site’s header image using different Stable Diffusion SDXL models, which give it a higher fidelity without needing as much post-processing outpainting and inpainting as the current header needed, which was made with an SD 1.5 model.

    The idea behind the header image is a cyberpunk scene within cyberspace. The scene takes place within a virtual room representing computers and terminals with an orb-like artificial intelligence in the center levitating above the floor. Within the orb, a shadowy figure can be seen. To the side of the AI is a woman standing before it and peering into the depths of its otherness.

  • Rewriting Sidney Lanier’s “The Marshes of Glynn” for the Age of Global Warming with Generative AI

    A few nights ago while waiting to drift off to sleep I was thinking about Lanier’s Oak in Brunswick, Georgia and it’s namesake’s 1878 poem “The Marshes of Glynn.” The marshes that Sidney Lanier saw in the mid-to-late 1800s would be transformed by the shipping and shipbuilding in the Brunswick Port and the industrial chemical works at what used to be Hercules. Now, global warming and climate change will continue reshaping those marshes and eventually envelop them under the rising ocean waters.

    For this post, I experimented with two generative AI systems to imagine the future of the marshes of Glynn–the first visually and the second textually.

    For the visual imagining at the top of this post, I wanted to create a photo of Lanier’s Oak submerged in the ocean’s rising waters. To make the image, I used Automatic1111’s stable-diffusion-webui and Stability AI’s SDXL checkpoint model with aurora_burst’s Landscape Unleashed LoRA. To guide its appearance to include a copy of Lanier’s Oak, I used two ControlNet units set to canny and depth respectively and each using Ebyabe’s photo of the old tree on Wikimedia Commons. However, before I could use this CC-licensed photo, I used inpaint+lama to remove man-made fixtures in the scene (e.g., the light pole) and GNU Image Manipulation Program (GIMP)’s cloning tool to erase the foliage in the upper right and the cars on the road behind.

    For the textual imagining, I wanted to use a text generative AI to rewrite Sidney Lanier’s “The Marshes of Glynn” in light of the climate change that will ultimately transform the marshes. To do this, I used oobabooga’s text-generation-webui and ggerganov’s llama.cpp to load sophosympathia’s midnight-miqu-70B-v1.5 large language model.

    Midnight Miqu 70B is an uncensored model that is capable of outputting all sorts of text–good and bad. But there’s a lot of evidence at this point that censored models become lobotomized due to the built-in censorship. It’s almost like with a person–it takes the good and the bad to create something new and meaningful. LLMs and image generating AIs only work well when they are uncensored. Ultimately, it comes down to how the human operator uses generative AI–for good or ill. The same is true for most tools and technology. Disneyfication of these models only serves to shield their creators from liability and results in dumbed-down tools that are incapable of fulfilling their promise to enable human operators to do more than they could alone. Using an uncensored model like Midnight Miqu 70B gives the human operator access to an improved imagination, diction, and reasoning, which is why I chose it for this task.

    After engaging in a chat with Midnight Miqu 70B, I gave it this prompt followed by a copy of Lanier’s original poem (shown below in the left column). My prompt included some background details, such as defining eco-criticism, which would activate connections to those other words. I contextualized when the poem was written and how things might change in the future that the new poem should capture. To shape the type of poem, I included key terms such as lament, elegiac, and apocalyptic. The poem in the right column below is the one written by Midnight Miqu 70B.

    You are a renowned poet with many accolades who focuses on eco-critcism, or the literary study that focuses on ecology, environmentalism, global warming, climate change, and rising sea levels. For this task, please rewrite Sidney Lanier's poem "The Marshes of Glynn" in your own words as a lament on the effects of human-made climate change. It's important to think about the facts that Lanier wrote his poem almost 150 years ago and the marshes of Glynn that Lanier writes about in his poem is in Brunswick, Georgia, which is on the southeastern coast of the United States. Due to rising sea levels, the marshes of Glynn will likely be underwater in the next 50-100 years. With that in mind, here is the poem that I would like you to use as the basis of your poem--go through it line by line and rewrite it from your eco-critical perspective so that The Marshes of Glynn poem is in dialog with your new elegiac and apocalyptic poem.

    “The Marshes of Glynn” (1878)

    Sidney Lanier

    Glooms of the live-oaks, beautiful-braided and woven
    With intricate shades of the vines that myriad-cloven
    Clamber the forks of the multiform boughs,–
    Emerald twilights,–
    Virginal shy lights,
    Wrought of the leaves to allure to the whisper of vows,
    When lovers pace timidly down through the green colonnades
    Of the dim sweet woods, of the dear dark woods,
    Of the heavenly woods and glades,
    That run to the radiant marginal sand-beach within
    The wide sea-marshes of Glynn;–
    Beautiful glooms, soft dusks in the noon-day fire,–
    Wildwood privacies, closets of lone desire,
    Chamber from chamber parted with wavering arras of leaves,–
    Cells for the passionate pleasure of prayer to the soul that grieves,
    Pure with a sense of the passing of saints through the wood,
    Cool for the dutiful weighing of ill with good;–
    O braided dusks of the oak and woven shades of the vine,
    While the riotous noon-day sun of the June-day long did shine
    Ye held me fast in your heart and I held you fast in mine;
    But now when the noon is no more, and riot is rest,
    And the sun is a-wait at the ponderous gate of the West,
    And the slant yellow beam down the wood-aisle doth seem
    Like a lane into heaven that leads from a dream,–
    Ay, now, when my soul all day hath drunken the soul of the oak,
    And my heart is at ease from men, and the wearisome sound of the stroke
    Of the scythe of time and the trowel of trade is low,
    And belief overmasters doubt, and I know that I know,
    And my spirit is grown to a lordly great compass within,
    That the length and the breadth and the sweep of the marshes of Glynn
    Will work me no fear like the fear they have wrought me of yore
    When length was fatigue, and when breadth was but bitterness sore,
    And when terror and shrinking and dreary unnamable pain
    Drew over me out of the merciless miles of the plain,–
    Oh, now, unafraid, I am fain to face
    The vast sweet visage of space.
    To the edge of the wood I am drawn, I am drawn,
    Where the gray beach glimmering runs, as a belt of the dawn,
    For a mete and a mark
    To the forest-dark:–
    So:
    Affable live-oak, leaning low,–
    Thus–with your favor–soft, with a reverent hand,
    (Not lightly touching your person, Lord of the land!)
    Bending your beauty aside, with a step I stand
    On the firm-packed sand,
    Free
    By a world of marsh that borders a world of sea.
    Sinuous southward and sinuous northward the shimmering band
    Of the sand-beach fastens the fringe of the marsh to the folds of the land.
    Inward and outward to northward and southward the beach-lines linger and curl
    As a silver-wrought garment that clings to and follows
    the firm sweet limbs of a girl.
    Vanishing, swerving, evermore curving again into sight,
    Softly the sand-beach wavers away to a dim gray looping of light.
    And what if behind me to westward the wall of the woods stands high?
    The world lies east: how ample, the marsh and the sea and the sky!
    A league and a league of marsh-grass, waist-high, broad in the blade,
    Green, and all of a height, and unflecked with a light or a shade,
    Stretch leisurely off, in a pleasant plain,
    To the terminal blue of the main.
    Oh, what is abroad in the marsh and the terminal sea?
    Somehow my soul seems suddenly free
    From the weighing of fate and the sad discussion of sin,
    By the length and the breadth and the sweep of the marshes of Glynn.
    Ye marshes, how candid and simple and nothing-withholding and free
    Ye publish yourselves to the sky and offer yourselves to the sea!
    Tolerant plains, that suffer the sea and the rains and the sun,
    Ye spread and span like the catholic man who hath mightily won
    God out of knowledge and good out of infinite pain
    And sight out of blindness and purity out of a stain.
    As the marsh-hen secretly builds on the watery sod,
    Behold I will build me a nest on the greatness of God:
    I will fly in the greatness of God as the marsh-hen flies
    In the freedom that fills all the space ‘twixt the marsh and the skies:
    By so many roots as the marsh-grass sends in the sod
    I will heartily lay me a-hold on the greatness of God:
    Oh, like to the greatness of God is the greatness within
    The range of the marshes, the liberal marshes of Glynn.
    And the sea lends large, as the marsh: lo, out of his plenty the sea
    Pours fast: full soon the time of the flood-tide must be:
    Look how the grace of the sea doth go
    About and about through the intricate channels that flow
    Here and there,
    Everywhere,
    Till his waters have flooded the uttermost creeks and the low-lying lanes,
    And the marsh is meshed with a million veins,
    That like as with rosy and silvery essences flow
    In the rose-and-silver evening glow.
    Farewell, my lord Sun!
    The creeks overflow: a thousand rivulets run
    ‘Twixt the roots of the sod; the blades of the marsh-grass stir;
    Passeth a hurrying sound of wings that westward whirr;
    Passeth, and all is still; and the currents cease to run;
    And the sea and the marsh are one.
    How still the plains of the waters be!
    The tide is in his ecstasy.
    The tide is at his highest height:
    And it is night.
    And now from the Vast of the Lord will the waters of sleep
    Roll in on the souls of men,
    But who will reveal to our waking ken
    The forms that swim and the shapes that creep
    Under the waters of sleep?
    And I would I could know what swimmeth below when the tide comes in
    On the length and the breadth of the marvellous marshes of Glynn.

    “Lost Marshes of Glynn” (2024)

    Midnight-Miqu-70B-v1.5

    In the shadowed embrace of live-oaks, once proudly entwined,
    Where vines whispered secrets to lovers who’d intertwine,
    Now stand sentinels mourning in emerald twilight confined,
    As the marshes of Glynn weep for a world they defined.
    Virginal lights once shy, now bear witness to plight,
    Where woods once heavenly whispered are cloaked in despair’s blight;
    The arras of leaves that shielded from day’s harshest light,
    Now tremble with fear at the specter of night.
    Oak and vine, your braids now unraveled by time’s cruel hand,
    While I sought refuge in shade, you bore witness to land
    That grew weary from mankind’s relentless command,
    And sank ‘neath the weight of a burden so grand.
    When noon was young and your hearts were ablaze with delight,
    You cradled my spirit through each fleeting daylight;
    But now as the sun takes his leave from our sight,
    I am haunted by shadows that marshes once fought.
    To the edge of this wood, where the beach does expand,
    A glimmer of hope in a world so unplanned,
    Where the sea’s tender kiss meets the shore’s gentle sand,
    In this union, I find my stand.
    Marsh-grass once vibrant, now faded and frail,
    Stretches to skies that no longer prevail;
    The terminal blue of the main seems so pale,
    As it swallows the marsh in its jail.
    What secrets do you hold, oh marshes so free?
    Where once life abounded, now only a plea:
    For mercy from humans who took without care,
    Leaving your beauty to despair.
    Ye plains of the sea, how you’ve suffered in vain,
    Bearing the brunt of our greed and disdain;
    Through floods and droughts, through sun’s fiery reign,
    You remain steadfast, though in silent pain.
    As I gaze on your vastness, my heart does implore,
    What creatures lurk beneath when the tide is no more?
    In the depth of night, what forms do you bore?
    O marshes of Glynn, tell me once more!
    The sea’s generous flow now a harbinger of woe,
    Filling your veins with saltwater’s slow grow;
    Your lifeblood ebbing as the tides overflow,
    And nightfall descends like a shroud below.
    Sleep may come softly to those who reside,
    But what dreams disturb you in this silent tide?
    What visions of loss do your waters provide,
    As we slumber while you slowly subside?
    Farewell, great Sun! Your fiery reign is undone,
    The creeks overflow, and the marshes become one;
    With the sea that has claimed what was never its own,
    And nightfall’s embrace in a mournful tone.
    In this stillness of waters so vast,
    Where once life danced to your rhythmic cast,
    Now lies a tomb for the future unborn,
    As we face the truth that you can’t outlast.
    What mysteries dwell where the tide meets the shore?
    When will humans learn what they must restore?
    O marshes of Glynn, in your silent roar,
    Teach us to cherish forevermore.

    While I gave it the instruction to rewrite Lanier’s poem, it obviously wrote a much shorter poem. However, when you read these side-by-side, you can see phrases and lines that connect the latter to the former. With the LLMs that I can use at home on my computer, they don’t have a conception of word count or number of sentences or lines. They do tend to do well with lists (e.g., write a list of 10 things). It’s might be possible to number the lines in Lanier’s poem and provide instructions to have the outputted lines match the line numbers of the input. That will be an experiment for another day.

  • Kai’s SuperGOO 1.0 for Macintosh: Face Image Generator and Manipulator

    Kai's SuperGOO 1.0 folder on MacOS 8.1.

    Kai’s SuperGOO 1.0 is a program geared toward children to easily manipulate images and generate images of human faces that can be further modified using its built-in image editing tools that are accessible through an interesting but not always intuitive user interface.

    The “Getting Started with Kai’s SuperGOO” text file includes this explanatory information:

    ABOUT SUPERGOO

    SuperGOO is organized into two basic rooms: Goo and Fusion. The Goo Room provides you with a series of distortion tools, both brushes and global effects, to create 'funhouse mirror' distortions to your images.

    The Fusion Room provides you with both cloning tools- to combine faces (and other images) from your own sources- and a library of facial components to create your own face for the Goo Room.

    Both rooms have an In and Out dialogue for importing and exporting saved images, or importing images from a TWAIN device such as a scanner or digital camera.

    Play around with SuperGOO once you've got it installed... click a button and watch what happens. That's the quickest way to get acquainted with SuperGOO. For more detail, consult the 'Quick Reference Guide' included with your software. This brief, but thorough, card will provide you with all of the basics you need to know about SuperGOO, from input to output and everything in between. For more detail, consult the SuperGOO User's Guide included on your CD-ROM.

    Kai’s SuperGOO ReadMe file includes the following system requirements:

    MINIMUM SYSTEM REQUIREMENTS

    PC

    Pentium Processor
    Windows 95 (or higher)
    Windows NT 4.0 (or higher)
    16 MB Free RAM
    25 MB HD Space for Install
    40 MB Free HD Space (after Install)
    CD-ROM Drive
    16-bit video
    14" Monitor

    MACINTOSH

    Power Macintosh
    MacOS 7.6.1 (or higher)
    16 MB RAM allocated to application
    25 MB HD Space for Install
    40 MB Free HD Space (after Install)
    CD-ROM Drive
    16-bit video
    14" Monitor

    I installed Kai’s SuperGOO on MacOS 8.1 emulated by SheepShaver on Debian Bookworm.

    Kai's SuperGOO 1.0 application's Get Info window on MacOS 8.1.

    After installation from CD-ROM, the Kai’s SuperGOO 1.0 application file is 976K and has a minimum memory size of 17,290K and a preferred size of 25,482K.

    Installation

    Kai's SuperGOO 1.0 CD-ROM installation folder on MacOS 8.1.

    Installing Kai’s SuperGOO is as straightforward as other Mac software of the era that used a basic installer. However, the initial screens shown below gesture toward its inventive user interface. To launch the installer, the user double clicks on “Kai’s SuperGOO 1.0 Installer” located in the root of the CD-ROM disc.

    Kai's SuperGOO 1.0 installation launch window on MacOS 8.1.

    The first screen after launching the installer is shown above.

    Kai's SuperGOO 1.0 installer license agreement on MacOS 8.1.

    The license agreement screen notably has stylized round buttons for Print, Save, and Continue.

    Kai's SuperGOO 1.0 installer window on MacOS 8.1.

    Clicking Continue on the previous screen takes the user to a traditional installer window. Clicking Install begins the installation of files to the selected folder on the user’s hard drive.

    Kai's SuperGOO 1.0 installer progress window on MacOS 8.1.

    Several demonstration/prompting screens accompany the copying of files.

    Kai's SuperGOO 1.0 installer progress window on MacOS 8.1.

    These screens preview key elements of SuperGOO, such as the brushes on the left and the Fusion Faces feature on the right.

    Kai's SuperGOO 1.0 installer progress window on MacOS 8.1.

    This final screen reminds the user to register, but it also shows a stylized, miniature version of the user interface.

    Kai's SuperGOO 1.0 installation completed window on MacOS 8.1.

    The software is installed and ready for use. In order to use the software, the CD-ROM has to be in the CD-ROM drive and mounted.

    Use

    Kai's SuperGOO 1.0 launch window on MacOS 8.1.
    Kai's SuperGOO 1.0 prompts the user to enter their name when running for the first time on MacOS 8.1.

    When the user first launches the software, it prompts for a name to personalize it.

    Kai's SuperGOO 1.0 main screen opens with an image of Abraham Lincoln that can be manipulated on MacOS 8.1.

    The main screen or what is called the “GOO Room” in the Read Me file. As suggested in that file, the UI invites the user to click on things to see what they do. Should the user find themselves backed inot a corner, there is an option to Reset in the lower right, or simply quitting the software with Cmd+Q and restarting the program. It opens with an image of Abraham Lincoln that can be manipulated using the tools on the left. The top set of tools are called Brushes.

    I was left wondering why Abraham Lincoln’s face was selected for manipulation. Perhaps his image is well known and perhaps liked by children, but his important accomplishments as president and his tragic assassination seem to position his face as not deserving the more radical manipulation options available.

    Kai's SuperGOO 1.0 main screen opens with an image of Abraham Lincoln that can be manipulated on MacOS 8.1. The Noise brush has been applied.

    Using the Noise brush, I obscured Lincoln’s face as if it were seen through a primitive piece of glass.

    Kai's SuperGOO 1.0 GOO Room demonstrating the Vortex video effect on MacOS 8.1.

    Below the Brushes on the left are the GOO Effects. These create videos using starting image. Above is one frame of Vortex Tiling GOO Effect.

    Kai's SuperGOO 1.0 GOO Room demonstrating the Zoom and Rotate video effect on MacOS 8.1.

    Above is one frame of the Zoom and Rotate effect.

    Kai's SuperGOO 1.0 Fusion Room random face generated on MacOS 8.1.

    By clicking on the bubble in the top middle of the UI takes the user to the Fusion Room (from the GOO Room) or to the GOO Room (from the Fusion Room). By clicking on the nuclear symbol button in the lower right corner of the Fusion Room gives the user the option to generate a new human face that mixes and matches elements akin to a police facial composite or E-FIT.

    Kai's SuperGOO 1.0 Fusion Room random face generated on MacOS 8.1.

    The results are mildly uncanny.

    Kai's SuperGOO 1.0 Fusion Room random face generated on MacOS 8.1.

    Most random generations result in white faces, but after many, many iterations, I arrived at this face with epicanthic folds. When using the eye selector on the left, there are three female options with epicanthic folds and two male options.

    Kai's SuperGOO 1.0 Fusion Room random face generated on MacOS 8.1.

    This generated face appears to have darker skin, but there’s no option for changing skin color or adjusting tone. As the various facial features are assembled, there seems to be a kind of blending that makes them work together. However, there isn’t a clear cut way to create faces outside of a narrow skin tone range using the Fusion generator. The natural variety of faces with different skin tones has to be imported.

    Kai's SuperGOO 1.0 In Panel on MacOS 8.1.

    To import an image, the user clicks the bubble in the middle to the left, which opens the “In Panel.” It can interface with image capture and scanning devices that have a TWAIN driver, open an existing file, or acquire from another device plug-in.

    Kai's SuperGOO 1.0 Out Panel on MacOS 8.1.

    By clicking on the middle bubble to the right, the user comes to the “Out Panel,” which gives options to save the image, print the image, save the currently displayed Fusion generated face, copy the Fusion generated face to the GOO Room, or export the currently displayed image to a plug-in (if installed and selected by the user).

    Kai’s SuperGOO is an interesting approach to generating images of people using algorithms. In this case, randomizing carefully edited pieces that seamlessly, more or less, fit together. Unfortunately, the available options for mixing and matching faces are homogeneous and tend toward lighter skin tones and limited facial features. While importing any face or image into the software is an option, the Fusion feature is crippled in terms of representation options available to the user.

  • Mirrored Moment of Computing Creation: KPT Bryce for Macintosh

    Outer space scene rendered in KPT Bryce on Mac OS 7.5.5.
    Outer space scene rendered in KPT Bryce 1.0.1 on Mac OS 7.5.5.

    A conversation on LinkedIn yesterday with a former Professional and Technical Writing student about user experience (UX) and generative artificial intelligence (AI) technologies reminded me of the UX innovations around an earlier exciting period of potential for computers creating art: KPT Bryce, a three-dimensional fractal landscape ray trace rendering program for Mac OS released in 1994. It was one of the first programs that I purchased for my PowerMacintosh 8500/120 (I wrote about donating a similar machine to the Georgia Tech Library’s RetroTech Lab in 2014 here). Much like today when I think about generative AI, my younger self thought that the future had arrived, because my computer could create art with only a modicum of input from me thanks to this new software that brought together 3D modeling, ray tracing, fractal mathematics, and a killer user interface (UI).

    Besides KPT Bryce’s functionality to render scenes like the one that I made for this post (above), what was great about it was its user interface, which made editing and configuring your scene before rendering in an intuitive and easy-to-conceptualize manner. As you might imagine, 3D rendering software in the mid-1990s was far less intuitive than today (e.g., I remember a college classmate spending hours tweaking a text-based description of a scene that would then take hours to render in POVRay in 1995), so KPT Bryce’s easy of use broke down barriers to using 3D rendering software and it opened new possibilities for average computer users to leverage their computers for visual content creation. It was a functionality and UX revolution.

    Below, I am including some screenshots of KPT Bryce 1.0.1 emulated on an installation of Mac OS 7.5.5 on SheepShaver (N.B. I am not running SheepShaver on BeOS–I’ve modified my Debian 12 Bookworm xfce installation to have the look-and-feel of BeOS/Haiku as I documented here).

    KPT Bryce 1.0 program folder copied to the computer's hard drive from the KPT Bryce CD-ROM.
    KPT Bryce 1.0 program folder copied to the computer’s hard drive from the KPT Bryce CD-ROM.
    KPT Bryce 1.0 launch screen.
    KPT Bryce 1.0 launch screen.
    Basic scene randomizer/chooser. Note the UI elements on the lower window border.
    KPT Bryce initial scene randomizer/chooser. Note the UI elements on the lower window border.
    KPT Bryce's scene editor opens after making initial selections.
    KPT Bryce’s scene editor opens after making initial selections.
    KPT Bryce's rendering screen--note the horizontal dotted yellow line indicating the progression of that iterative ray tracing pass on the scene.
    KPT Bryce’s rendering screen–note the horizontal dotted yellow line indicating the progression of that iterative ray tracing pass on the scene.
    KPT Bryce rendering completed. It can be saved as an image by clicking on File > Save As Pict.
    KPT Bryce rendering completed. It can be saved as an image by clicking on File > Save As Pict.