style helps you find an eyeglass style that matches your personality and the look you want, then explore frames that bring that style to life.
mise install
just sync
just lintEach file is named <face>__<frame>__<model>.png.
Image generation goes through the project CLI (style try-on), which is also what Codex and
ChatGPT agents run. Set the environment variables for one provider before generating. The
first variable set wins, in this order:
| Provider | Environment | Model |
|---|---|---|
| OpenRouter | OPENROUTER_API_KEY, OPENROUTER_MODEL |
OPENROUTER_MODEL, default openai/gpt-image-1 |
| Gemini | GEMINI_API_KEY |
gemini-nano-banana-2.1 (fixed) |
| OpenAI | OPENAI_API_KEY |
gpt-image-1 (fixed; used when no other key set) |
Example:
export OPENROUTER_API_KEY="..."
export OPENROUTER_MODEL="..."Only OpenRouter lets you change the model through the environment. Keep API keys in your local environment or secret manager, not in prompts or committed files. A failed generation prints the provider error and exits with status 1.
For the best results use GPT Image 2.5 Sunburst or Nano Banana Pro. Both keep the
face, lighting and background intact while swapping only the glasses. To select one, use the
OpenRouter provider and set OPENROUTER_MODEL to the model's OpenRouter slug. The direct
Gemini and OpenAI providers use the fixed defaults in the table above.
# GPT Image 2.5 Sunburst
export OPENROUTER_MODEL="openai/gpt-image-2.5-sunburst"
# Nano Banana Pro
export OPENROUTER_MODEL="google/gemini-3-pro-image"try-on sends a face photo and a frame image to an image-generation API and saves the result to resources/try-ons/<face>__<frame>.png. Configure a provider first, see Setting up AI providers.
uv run style try-on resources/faces/003-IMG-1447.jpeg resources/frames/002-cubitts-polygon-sage.jpgOpen this repository as the workspace in Codex. Codex reads the project guidance from
AGENTS.md, which points to docs/ai-instructions.md, and can use the project skills in
.agents/skills/ for repeatable workflows.
Configure a provider in the environment available to Codex, see Setting up AI providers.
Ask Codex to use the glasses-try-on skill. Name a style skill such as urban-mountaineer
or botan-pidor, and specify the face photo and frame reference to use:
Use the glasses-try-on skill with the urban-mountaineer style. Use
resources/faces/003-IMG-1447.jpegandresources/frames/028-oakley-sutro-lite.png. Generate one try-on.
Codex can also run the CLI directly when you already know which images to use:
uv run style try-on resources/faces/003-IMG-1447.jpeg resources/frames/028-oakley-sutro-lite.pngAsk Codex to use the same skill and name the style and face photo. The skill workflow
searches for real frames, saves the chosen reference in resources/frames/, records its
source in resources/frames/SOURCES.md, and then generates the try-on:
Use the glasses-try-on skill with the urban-mountaineer style. Use
resources/faces/003-IMG-1447.jpeg. Find a real frame online that fits the style and my face, save its reference and source, then generate one try-on.
Codex follows the skill workflow, including saving the result under resources/try-ons/.
Start a new chat with an image-capable model, picking the best one per
Choosing an image generation model, and attach a face
photo (e.g. resources/faces/003-IMG-1447.jpeg) first. If ChatGPT runs the CLI for you, set
up a provider as described in Setting up AI providers.
Add the skills from .agents/skills/ (glasses-try-on plus the style skills botan-pidor,
tech-bro, influencer, urban-mountaineer, gentrified-district-dweller) to ChatGPT as
skills; they are standard SKILL.md folders.
Attach a frame image (e.g. resources/frames/002-cubitts-polygon-sage.jpg) second and send:
The first image is a face photo, the second is a glasses frame. Use the glasses-try-on skill. Put that exact frame on the person in the first image, fitted to their face and head angle. Keep identity, facial features, facial hair, expression, lighting, background and crop unchanged. Change only the glasses; add no other accessories and do not retouch the face.
Name a style skill and let ChatGPT find the frame. Optionally attach frame images from
resources/frames/ as references. Send:
The image is a face photo. Use the glasses-try-on skill with the botan-pidor style. Choose a real, specific glasses frame that fits this style and the person's face shape, and name the maker and model. If frame images are attached, use them as references for the direction rather than copying one exactly.
Swap botan-pidor for another style skill, or describe the look in your own words. Ask for
two or three variants in one reply to compare directions.
Save each result into resources/try-ons/ as <face>__<frame>.png; for a style-driven
result, use the chosen model name as <frame>.