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)
sys.exit(1)
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.

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 |

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' |