Fix plastic skin in AI photos: prompt and negative-prompt patterns for realistic skin texture, pores, film grain and uneven light in Flux, Nano Banana, Midjourney and SDXL portraits. Checklist of 'AI tells' plus a Claude Code skill and Cursor/Codex rules that rewrite your portrait prompt. By UniqAI.
翻译准备中
正在加载完整 README。
查看完整 README ↗Fix plastic skin and fake-looking AI portraits: prompt rules, edit locks, and a linter.
Quickstart · How it works · Examples · Install · FAQ
English · Русский · 简体中文 · Español · Português (BR) · 日本語 · 한국어
AI portraits look fake for a short list of reasons: poreless skin, a mirror-symmetric face, light from nowhere, bokeh painted on, teal-and-orange grade, no grain. Each one is the model's default, and each has a sentence that overrides it. no-plastic is a Claude Code skill (with Cursor and Codex adapters) that rewrites your image prompt into a photographic brief with those sentences in it, writes edit prompts that change one thing and keep the person, and ships a zero-dependency linter that scores any prompt against the checklist. Written for Flux, Nano Banana, Midjourney and SDXL; the vocabulary is photography, so it carries to the next model too.
| Brief, not tags | Edits that keep the face | Lint before you render |
|---|---|---|
| Subject, framing, camera, light, palette, texture, era, negatives: eight fields, three to five sentences, the anti-plastic rules folded in. | One change plus four locks (identity, realism, framing, seams), with templates for remove, background, outfit, hair, enhance and selfie-to-headshot. | scripts/lint_prompt.py scores coverage, flags the words that cause the plastic look, and prints a brief skeleton for the gaps. Python 3 stdlib only. |
git clone https://github.com/uniqaiapp/no-plastic ~/.claude/skills/no-plastic
cd ~/.claude/skills/no-plastic
python3 scripts/lint_prompt.py examples/01-linkedin-headshot/before.txt examples/01-linkedin-headshot/after.txt
You should see the first prompt ("professional headshot of a beautiful woman, perfect skin, 8k...") score 0/100 with the words that sink it listed, and the rewritten brief score 100/100. Then in Claude Code type /no-plastic and paste a prompt, or just say "this looks plastic" with the prompt attached.
python3 scripts/lint_prompt.py --brief prompt.txt prints the eight-field brief with the phrases it found and ? where the prompt is silent; the plain report lists the flagged words (8k, masterpiece, flawless skin, cinematic lighting, tag soup, the SD1.5 negative ritual) and what each costs.natural skin texture with visible pores, slight asymmetry, a named light source with falloff, fine film grain, not over-processed, no retouched plastic look.--style raw, a lower --stylize and a short --no; SDXL gets the brief with subject, light and texture in the first 77 tokens and a short negative field. See references/model-notes.md.loose request ──▶ lint (gaps + flags) ──▶ brief / edit with locks ──▶ per-model variant ──▶ re-lint ≥ 85 ──▶ pilot ──▶ review ──▶ batch
The scores in this README are produced by python3 scripts/lint_prompt.py on the files in examples/; tests/test_examples.py fails if they drift. The linter reads words, not pixels: a 100 is a complete brief, not a guaranteed image. That is what the pilot is for.
Nine pairs with reports in examples/. Two of them in full:
Before (examples/01-linkedin-headshot/before.txt, score 0/100)
Professional headshot of a beautiful woman, perfect skin, studio lighting, 8k, ultra realistic, masterpiece, sharp focus
After (examples/01-linkedin-headshot/after.txt, score 100/100)
以上为 README 的开头部分。其余内容请阅读原文。 查看完整 README ↗