I wrote LLgen because of images not loading on people's sheets. Now that's not a problem, since I can just generate my own sheets that don't rely on a flaky web API. As a side effect, the images aren't blurry and don't have holes in them. I might try and make clones of some popular ZBLL sheets that use those kinds of things for their images, like Juju's, so that other people don't have to deal with that either, but this depends on how frequently they're updated, since I wouldn't want it to become outdated shortly after adding new changes.

The llgen program reads an algorithm from standard input, then prints an SVG image depicting the case that it solves. You can also pass -oll as an argument to grey out everything except the yellow stickers.

I call it from python with lxml like this:

for e in page.iter("{*}llgen"):
    llgen = subprocess.run(["llgen"], input=e.text, capture_output=True, text=True)
    if llgen.returncode != 0:
        print("llgen error:", llgen.stderr, file=sys.stderr)
    e.getparent().replace(e, etree.fromstring(llgen.stdout))

which takes a tag like <llgen>R U R' U'</llgen> and replaces it with an image. You can see how it looks below.


Adjacent Corners, Minus G-perms

Case Image Algorithm Notes
Aa x (R' U R') D2 (R U' R') D2 R2
Ab x R2 D2 (R U R') D2 (R U' R)
T (R U R' U') (R' F R2 U') (R' U' R U) R' F'
F R' U' F' (R U R' U') (R' F R2 U') (R' U' R U) R' U R
(R' F R f') (R' F R2 U) (R' U' R' F') (R2 U R') S
This second one turned this case into one I'm glad to get, since it's also easy to recognise
Ja R' U L' U2' (R U' R') U2' (L R)
Jb R U R' F' (R U R' U') R' F R2 U' R'
Ra (R' U2' R U2') R' F (R U R' U') R' F' R2 This one isn't so popular these days, probably because of the two U2s, but it's what I'm used to
Rb R U R' F' (R U2' R' U2') R' F R U R U2 R' This one also has the same "two U2s" thing as above


No Oriented Edges

Case Image Algorithm Notes
1 R U2 (R2 F R F') U2 (R' F R F') Always do this from an angle where UFL and UFR are the same colour if you can
2 (R U' R2 D') r U r' (D R2 U R')
3 (R' F2 R2 U2) R' F R (U2 R2 F2 R)
4 (R' F2 R2 U2) R' F' R (U2 R2 F2 R)
17 (F R' F' R) U S' (R U' R') S
18 (F S') R U' R' S (R U2 R' U') F'
19 S' (R U R') S U' (R' F R F')
20 M U (R U R' U') M2' U R U' r'