• Stars
    star
    185
  • Rank 208,271 (Top 5 %)
  • Language
    JavaScript
  • License
    Other
  • Created over 3 years ago
  • Updated 8 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

A minimalist generative art thing – press the buttons and play with the sliders!


A minimalist generative art thing –
press the buttons and play with the sliders!

The interface is designed (or, rather, deliberately not designed) for exploration through play – both for you, as the user, and me, as the person who made the weird-ass interface. It's intended to facilitate a vaguely meditative and creative environment.

It's not desktop-only, by the way!

The tiled buttons at the top are presets – use them as jumping-off points, or click your way through them to see what's possible before starting afresh by yourself. The ⌘ preset has all options set to their defaults, so it's a good starting point once you've played around a bit.

The sliders determine all aspects of the generated images. Hover over the icons next to them (which feature glyphs from Imperial Aramaic and Phoenician) for descriptions of what each slider does. You can also edit the options directly through the text inputs next to the sliders, which you're able to conveniently tab through. And pressing +, β†’, or ↑ while your mouse pointer's hovering over a slider will increase its value (-, ←, or ↓ will decrease it instead). Press shift at the same time to adjust in 10Γ— larger increments.

🎨 Play around with the various options at doersino.github.io/uji/!

If you find that changing a slider slightly modifies some behavior you'd expect to be the domain of other sliders: Let's just say that's a constraint designed to send your creativity down fresh paths (and not a result of lazy implementation details).

At the bottom of the sidebar, there's a couple of buttons: Firstly, the conjoined buttons sporting chevron icons provide undo/redo functionality (the usual keyboard shortcuts work as well). Upon clicking the self-explantory "Export" button, you'll be presented with a choice of available formats: PNG, JPEG, SVG, and JSON, the latter two of which are intended for pen plotting. The adjacent "Share" button reveals a shareable URL that encodes your options, which comes in real handy if you want to show a thing you've made with UJI to someone else. (If you press alt while clicking either button, the default action is performed in each case – PNG download slash URL-to-clipboard-copying.)

This is how your apartment could look with one simple trick! (The trick is: Makin' stuff with this tool.)

About the name: I could pretend that it's referring to the concept of uji in Zen Buddhism, but really, the letters just lend themselves to a pretty logo, an initial iteration of which I had previously cobbled together with my pen plotting tool Brachiosaurus and later made the final logo (along with the undo, redo, export, and share icons) using the Markdeep Diagram Drafting Board.

πŸ““ Read about the algorithm and view a whole bunch of examples on my blog!

Notes

Setup

It's just some HTML, JavaScript, an image, and a few webfonts – so no setup is required! If you want to run this tool locally, simply git clone this repository or download a ZIP, then open index.html in your favorite browser. Of course, link sharing doesn't make a whole lot of sense in that context, but the rest should work just fine.

Features I wanted to add but didn't because I would've gotten bored of it and never released this thing in the first place

Perhaps I'll knock some of those down at some point if motivation strikes. (Update: Done quite a few, but there's always more!) In the meantime, feel free to file an issue if you really want one of them to be implemented (or do it yourself and send a pull request!).

  • Some way of randomizing options without constantly generating junk, see here.
  • WebGL rendering for performance – although blend modes and blurring might not be so easy there, and the current <canvas>-based approach would still be needed as a fallback.
  • Exporting the generation process as a video, see here – this might be worth revisiting later since it's only been made possible at all somewhat recently. [In a similar vein, "meta sliders" that enable the generation of short animations like this one. But that seems too complex from a user-interface perspective (and prohibitively slow to render all the frames for even just a preview), so this is really just a pipe dream.]
  • Due to an oversight early on, for circle/square/triangle-shaped lines, the line terminates a bit short of its origin – the lower the segment count, the more apparent this is. That's not a difficult fix, but it would subtly change the appearance of previously-created-and-then-accessed-through-share-URLs drawings – for some of which the present behavior may constitute a point of important visual interest – so, if this was to be addressed, some sort of drawing algorithm versioning scheme appended to share URLs and downloaded filenames would be required.
  • The ability to drop a previously-created drawing back into UJI and resume modifying the parameters (extracted from the filename).

Known bugs

Chrome tends to draw less distinct/clear/bright lines than other browsers.

License

You may use this repository's contents under the terms of the bespoke It's the MIT License Except You're Not Allowed to Make an NFT Unless You Use the Proceeds to Feed Birds & Send Me Pictures of Them license, see LICENSE.

However, the subdirectory fonts/ contains third-party webfonts with their own licenses:

  • Renzhi Li's Iosevka Aile, the typeface used throughout the interface, is licensed under the SIL Open Font License Version 1.1, see here.
  • Google's Noto Sans, which provides the glyphs of the ancient scripts used for presets and slider labels, is also used in accordance with its SIL Open Font License Version 1.1, see here.

Further, the stock photo of the laptop was taken by Howard Bouchevereau, the one showing the chair and the picture frames was captured by Christopher Burns, and both have been sourced from Unsplash.

Finally – this isn't relevant of licensing but I'd like to mention it – the general layout has been adapted from Markdeep Diagram Drafting Board and Crop Circles, both are previous projects of mine.

More Repositories

1

aerialbot

A simple yet highly configurable Mastodon/Twitter bot that posts geotagged aerial imagery of a random location in the world.
Python
219
star
2

nyum

A simple Pandoc-powered static site generator for your recipe collection – it effortlessly turns a set of Markdown-formatted recipes into a lightweight, responsive, searchable website.
HTML
183
star
3

markdeep-slides

Build presentation slides with Markdeep and present them right in your browser.
JavaScript
170
star
4

tixyz

A minimalist three-dimensional coding environment. Control 8x8x8 dots with a single JavaScript function.
JavaScript
157
star
5

markdeep-thesis

Write your (under)graduate thesis with Markdeep and typeset it right in your browser.
JavaScript
144
star
6

google-maps-at-88-mph

Google Maps keeps old satellite imagery around for a while – this tool collects what's available for a user-specified region in the form of a GIF.
Python
123
star
7

handwriting

A SQL implementation of an ancient handwriting recognition algorithm.
TeX
79
star
8

cellular-automata-posters

Simple Python script that generates cellular automata posters as PDF files.
Python
55
star
9

scriptable-widgets

A collection of Scriptable widgets I've built.
JavaScript
43
star
10

UnicodeMathML

JavaScript-based translation of UnicodeMath to MathML that can be integrated into arbitrary HTML or Markdeep documents. An interactive "playground" allows for experimentation with the syntax and insight into the translation pipeline.
JavaScript
41
star
11

earthacrosstime

Mastodon/Twitter bot that posts videos showcasing how random locations in the world have changed since 1984.
Python
40
star
12

markdeep-diagram-drafting-board

Draft Markdeep diagrams with a live-updating preview overlaid onto your source code.
HTML
29
star
13

apple-photos-export

An Apple Photos export script.
Python
21
star
14

ffmpeg-koraktor

An occasionally-growing selection of FFmpeg invocations that have proven handy in various situations.
18
star
15

tweakpane-plugin-infodump

Infodump plugin for Tweakpane, provides a text-displaying blade with basic Markdown support intended for long descriptions (i.e., infodumps).
JavaScript
16
star
16

hashing-indexes-tikz

LaTeX packages for drawing extendible hashing indexes and linear hashing indexes using TikZ.
TeX
14
star
17

ReAD

A PHP-based reading list for web articles. Maintains a searchable archive and computes lots of stats.
PHP
10
star
18

cropcircles

A tool for cropping circular center pivot irrigation fields from aerial imagery.
HTML
9
star
19

sundryautomata

Mastodon/Twitter bot that posts a randomly generated cellular automaton every 12 hours.
Python
9
star
20

gomati

A simple Google Maps tile downloader and stitcher.
Shell
8
star
21

brachiosaurus

An incredibly basic turtle drawing tool I've built for making generative art with my BrachioGraph pen plotter.
Python
8
star
22

snooker-commentary-generator

Just a silly little toy.
JavaScript
8
star
23

vol

Simple bash script for adjusting the system volume on macOS.
Shell
7
star
24

genuary2022

Code and SVG files underlying the plotter drawings I made for #GENUARY2022.
HTML
4
star
25

spell

Haskell implementation of Peter Norvig's spelling corrector.
Haskell
4
star
26

Tumblr-Themes

The source code of any Tumblr themes I've released to the Theme Garden.
HTML
4
star
27

scripts

Various scripts that don't really necessitate their own repositories
Shell
4
star
28

dotfiles

My dotfiles, plus various other configs.
Shell
3
star
29

cpi-video-creation

A quickly-thrown-together tool for making a series of videos.
Python
3
star
30

wikipediastats

A Haskell-powered Twitter bot that posts milestones and statistics of various Wikipedias.
Haskell
2
star
31

corridor

Simple text adventure game.
Prolog
1
star
32

doersino

1
star
33

acm-boobytraps

My Python 2.7 solution of the ACM Programming Contest problem "Booby Traps", along with a map generator and a LaTeX beamer slide and TikZ map visualization generator.
Python
1
star
34

leaflet-zoom2markers

Basic Leaflet control that zooms the map to show all markers.
JavaScript
1
star
35

leichter

A bare-bones weight tracking app with a simple and responsive web interface.
PHP
1
star
36

minecraft-server-utils

A few utility bash scripts that 1. start a vanilla Minecraft server on system boot, 2. keep an up-to-date incremental backup of the world and server files, as well as daily snapshots for the history books, and 3. optionally purge old snapshots whenever disk space runs low.
Shell
1
star