nanites retro web designer (bundle of two LoRAs)

A pre-Y2K web designer's desk

One repo, two fine-tuned LoRA adapters that turn a plain request into a complete pre-Y2K (1994-1999) web page with materialized image assets:

  • web/adapter/ โ€” a Gemma-4-E4B-it QLoRA (bilingual 4B-class) fine-tuned on real archived pages (GeoCities / Tripod / Angelfire / personal sites) to emit era-correct HTML (<center>, <font>, <marquee>, table frames...).
  • image/adapter/ โ€” a Stable Diffusion 1.5 LoRA fine-tuned on GIFCities era GIFs (buttons, banners, dividers, backgrounds, clipart) so every src/background in the generated page resolves to an on-era asset.

The two are loaded together in one process (fine on 8 GB) to produce a fully local, self-contained page.

Trigger tokens

expert token
web coder retro web 1999
image asset retroweb90s

Quick start (web coder)

import torch
from peft import PeftModel
from transformers import AutoModelForCausalLM, AutoTokenizer

base = "unsloth/gemma-4-E4B-it"           # the base the LoRA trains against
model = AutoModelForCausalLM.from_pretrained(
    base, torch_dtype=torch.bfloat16, device_map="cuda").to("cuda")
model = PeftModel.from_pretrained(model, "./web/adapter")
tok = AutoTokenizer.from_pretrained(base)
prompt = "retro web 1999, make me a website about my cat.\n<html>"
ids = tok(prompt, add_special_tokens=True)["input_ids"]
out = model.generate(
    torch.tensor([ids]).to("cuda"), max_new_tokens=700,
    do_sample=True, temperature=0.8, top_p=0.9)
print(tok.decode(out[0][len(ids):], skip_special_tokens=True))

The adapter config ships with local base paths blanked; pass your own base explicitly. For the full generate flow (page + synthesized assets) run the repo's generate.py --assets synth with these adapters mounted at run/adapter/<expert>.

Quick start (image asset)

import torch
from peft import PeftModel
from diffusers import StableDiffusionPipeline

base = "stable-diffusion-v1-5/stable-diffusion-v1-5"
pipe = StableDiffusionPipeline.from_pretrained(
    base, torch_dtype=torch.float16, safety_checker=None).to("cuda")
pipe.unet = PeftModel.from_pretrained(pipe.unet, "./image/adapter")
img = pipe("retroweb90s, a small 1990s web button graphic named boost.gif, "
           "theme visiting, vintage 90s website clipart").images[0]

Samples

samples/ holds pages generated end-to-end by this bundle (LLM page + synth assets): goat soap, honda civic, personal notes, cat homepage. Each *.html is openable directly; every image ref points at the sibling file next to it.

Training

  • web: QLoRA r16 on ~thousands of real 1994-99 archived pages (experts/retro_web_designer/data/); NF4 quantized linears + CPU embeddings on RTX 4070 8 GB, raw continuation (no distillation).
  • image: LoRA r16 on ~1500 curated GIFCities era GIFs (filtered, despeckled, deduped) at 256px (experts/retro_image_designer/data/); SD1.5 UNet, fp16.

License

  • The web adapter is a derivative of Gemma 4 weights (Gemma Terms of Use apply to the base and derivatives).
  • The image adapter is a derivative of Stable Diffusion 1.5 UNet weights (CreativeML Open RAIL-M applies).
  • Training pages are historical archives reproduced for research/art; training assets remain the property of their original creators.
Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. ๐Ÿ™‹ Ask for provider support

Model tree for Nanite-Labs/nanites-retro-web-e4b-designer

Finetuned
(404)
this model