Ugc Photo Prompts logo

Ugc Photo Prompts

Organization
palmier-io
ugc-photo-prompts

Generate ultra-realistic, UGC/influencer-style photos inside Palmier Pro — candid selfies, flash photos, lifestyle shots, and product-in-hand ad creative that read as genuine phone photos instead of AI-generated images. Drives Palmier Pro's get_timeline/get_media/generate_image tools directly (correct aspect ratio, model choice, reference-image handling). Use whenever the user wants UGC-style imagery, influencer selfies, "make it look like a real iPhone photo," authentic/non-AI-looking ad creative, or product photos held by a model — even if they don't say "UGC" explicitly.

Overview

Publisherpalmier-io
Repositorypalmier-skills
Skill nameugc-photo-prompts
Stars
82
Forks
10
Bundled files
Instructions only
LicenseApache-2.0
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • Self-contained

    Everything the model needs lives in the instructions — no extra files to sync.

  • Open source

    Published by palmier-io on GitHub. Read the source before you install it.

Installation

Install the Ugc Photo Prompts AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
    https://github.com/palmier-io/palmier-skills/tree/main/skills/ugc-photo-prompts
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/palmier-io/palmier-skills.git /tmp/palmier-skills
mkdir -p .claude/skills
cp -r /tmp/palmier-skills/skills/ugc-photo-prompts .claude/skills/ugc-photo-prompts
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Ugc Photo Prompts in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Ugc Photo Prompts on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Ugc Photo Prompts is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

UGC-Style Photo Prompts

Core principle

Image models default to polish: symmetric features, smooth retouched skin, studio lighting, clean backgrounds. That polish is the single biggest tell that an image is AI-generated, and it's exactly what kills performance for UGC ads and influencer content — the entire point of UGC is that it doesn't look produced.

Telling the model "make it look realistic" doesn't work, because "realistic" isn't a style the model can target — it's an absence of all the polish defaults, and the model needs that absence written into every slot of the prompt as a specific physical detail. Realism comes from specificity (a named flaw, a named light source, a named texture), not from the word "realistic" itself.

The 9-slot formula

Fill every slot, in this order, for every prompt:

  1. Format declaration — camera + shot type + aspect ratio, stated first. This locks the model into "photo," not "illustration." e.g. "Ultra-realistic iPhone front-camera selfie, 4:5 vertical" / "Ultra-photorealistic flash photo, 4:5 vertical."
  2. Framing & lens behavior — distance (arm's length / chest-up / full body), angle (slightly above or below eye level), and the lens distortion that comes with it (wide-angle selfie warp, a shoulder cropped out of frame, imperfect centering).
  3. Subject — the imperfection stack. Never write "beautiful woman, smiling." Specify hair texture and disorder (damp, windblown, flyaways), skin (tone + pores + one specific flaw — freckles, redness, sweat, under-eye shadow, tan line), and a momentary, specific expression (mid-laugh, looking off to the side, mouth slightly open) instead of a generic one.
  4. Wardrobe + accessories, named specifically. Fabric, fit, and at least one small accessory (hoops, a layered necklace, a bag strap). Generic clothing description reads as generic AI output — specificity here is doing real work, not just flavor.
  5. Pose as interaction, not posture. Give the subject something to physically do — hold an object, mid-gesture, walking, getting their hair touched by someone off-frame — rather than "posing for camera." Static posing is the second-biggest AI tell after skin polish.
  6. Setting with texture and clutter. Name actual materials (brick, stone, fridge glass, car upholstery, a tiled floor) and at least one incidental detail unrelated to the subject (a second person's arm in frame, a parked car, a visible price tag). Staged sets don't have incidental detail; real environments always do.
  7. Lighting, named and physical. State the actual light source (direct flash, golden-hour side light, fluorescent overhead, window light) and what it visibly does to skin and shadow — not "good lighting," but what the light is doing.
  8. Vibe tag. One short phrase tying the scene together — "everyday building-corridor look," "candid basement-party energy" — this keeps the model from sliding back into editorial polish even after all the specific detail above.
  9. Negative space. Say what NOT to do. This is doing as much work as the rest of the prompt — see the standing list below.

Standing negative prompt

Use this (or a trimmed version) on every generation. If the model has a separate negative-prompt field (Midjourney --no, SDXL negative conditioning), put it there. If the model only takes one prompt with no negative field (nano-banana-pro, Flux, Veo stills), append it as plain language at the end instead:

studio lighting, airbrushed or retouched skin, perfect symmetry, doll-like or waxy skin, over-smoothed face, professional photoshoot polish, cinematic color grade, CGI look, fantasy lighting, unrealistic eyes, text, watermark, logo

Universal realism add-on

If a draft still comes back too clean, don't rewrite the whole prompt — append this line:

Real iPhone photo uploaded to Instagram, imperfect framing, visible pores, flyaway hairs, natural facial asymmetry, slight motion blur, phone HDR, compression artifacts, uneven lighting, no beauty retouching, no professional studio setup, no cinematic color grading.

Worked example (product-in-hand ad shot)

SlotChoice
1. FormatUltra-realistic iPhone front-camera selfie, 4:5 vertical
2. FramingArm's length, slightly above eye level, one shoulder cropped at the frame edge
3. SubjectMid-20s woman, damp tousled brunette hair, visible pores, faint under-eye shadow, caught mid-laugh with eyes half-closed
4. WardrobeFitted olive ribbed tank top, small gold hoop earrings, a thin layered necklace
5. PoseHolding [PRODUCT] up close to the lens with one hand, other hand mid-gesture brushing hair back
6. SettingPlain bedroom corner — unmade bed visible at the edge, a phone charger cable on the nightstand
7. LightingWarm afternoon window light from the left, soft shadow falling across the right side of her face
8. Vibe"Just got this in the mail" energy
9. Negative(standing list above)

Assembled: "Ultra-realistic iPhone front-camera selfie, 4:5 vertical, arm's length, slightly above eye level, one shoulder cropped at the frame edge. A mid-20s woman with damp tousled brunette hair, visible pores, faint under-eye shadow, caught mid-laugh with her eyes half-closed. She wears a fitted olive ribbed tank top, small gold hoop earrings, and a thin layered necklace, and holds [PRODUCT] up close to the lens with one hand while the other brushes her hair back. Background is a plain bedroom corner with an unmade bed visible at the edge and a phone charger cable on the nightstand. Warm afternoon window light comes from the left, casting a soft shadow across the right side of her face. 'Just got this in the mail' energy. No studio lighting, no airbrushed or retouched skin, no perfect symmetry, no CGI look, no text, no watermark."

Swap slot 5/6/8 and you have a review-style talking-selfie shot or an unboxing shot with the same bones.

What actually happened when this ran (real test, not hypothetical): pores, the charger cable, and the warm-light/shadow contrast all rendered exactly as specified — those three slots have real, demonstrated pull on the model. "One shoulder cropped at the frame edge" did not land — both shoulders stayed fully in frame. Lesson: framing/crop instructions are the least reliable slot so far. Always check the actual output against each slot after generating — don't assume compliance just because it's in the prompt.

More templates

Five more, same 9-slot structure, fill the brackets:

1. Solo mirror/bedroom selfie — the everyday "getting ready" shot, the default category when nothing else fits. Format: iPhone selfie, 4:5. Framing: front-camera, chest-up, slight high angle, mirror or arm's-length. Subject: [hair texture/color], [pores / faint blemish / under-eye texture], [a smirk / mid-blink / lips slightly parted — not "smiling"]. Wardrobe: [top + fabric], [1–2 small accessories]. Pose: phone visible if mirror selfie, otherwise a hand mid-motion adjusting hair/hem. Setting: [bedroom/bathroom], everyday clutter — charger cord, half-open closet, towel on a hook. Lighting: overhead room or window light, slightly uneven, shadow under the chin. Vibe: "quick outfit check before leaving."

2. Flash nightlife candid — bar/street/party, direct flash is the dominant light source. Format: iPhone flash photo, 4:5. Framing: arm's length or slightly above, casual tilt, imperfect centering. Subject: [hair messed by wind/humidity], [shine from flash + one texture detail], [laughing / talking mid-sentence / caught off guard]. Wardrobe: [jacket/top], [hoops/bangles], [a bag strap visible]. Pose: holding a drink, mid-gesture, or arm around someone partially out of frame. Setting: [street/bar exterior], wet pavement or brick texture, blurred crowd/signage. Lighting: direct on-camera flash — hard shadow behind subject, blown highlights, ambient neon bleeding in. Vibe: "spontaneous night-out, not a posed photo-op."

3. Outdoor/travel — daylight, open setting, avoid the "travel magazine" look. Format: iPhone photo, 4:5. Framing: full body or chest-up, taken by subject or companion, slightly off-center. Subject: [hair moving in wind], [sun flush / tan line / freckles], [squinting / mid-laugh / looking past camera]. Wardrobe: [season-appropriate outfit, named fabric], [1 accessory]. Pose: walking, sitting, or interacting with the environment, not standing for a portrait. Setting: [stone wall / dock / market stall] + one piece of incidental background life (another tourist, parked bikes). Lighting: [golden hour / harsh midday sun], named skin effect. Vibe: "caught mid-trip, not posing for it."

4. Lifestyle with activity — gym, kitchen, café, desk; the photo should look like it interrupted the activity. Format: iPhone selfie or photo, 4:5. Framing: close/mid-distance, angle dictated by the activity. Subject: [hair affected by the activity], [flush/sweat sheen or none], [focused or mid-task expression]. Wardrobe: [activity-appropriate clothing]. Pose: mid-rep, mid-stir, mid-typing — the activity is the pose. Setting: [gym/kitchen/cafe], activity-specific equipment, one blurred person/object in background. Lighting: [fluorescent / window / mixed], named effect. Vibe: "caught in the middle of it."

5. Two-person candid — someone else's hands/arm/shoulder visible but not the focus. One of the strongest "this wasn't staged" signals, and underused. Format: candid iPhone photo, 4:5. Framing: mid-distance, chest-up or mid-thigh, slightly off-angle as if taken by a third person. Subject: [hair/skin/expression], relaxed, looking slightly off-camera or at the second person. Wardrobe: [outfit, named fabric], [1 accessory]. Pose: sitting/standing while the second person does something to/with them (braiding hair, handing over a coffee). Setting: [location], second person visible only from [arm/torso/hands] with one named clothing fragment for them too. Lighting: [daylight/indoor lamp], named effect. Vibe: "mid-conversation, not posed for either person."

Running this inside Palmier Pro

This skill drives Palmier Pro's MCP tools directly. Standard sequence:

  1. Session / canvas. get_timeline first. If canGenerate is false, stop and ask the user to sign in + subscribe before any generate_*. Derive aspectRatio from project width/height — a 9:16 project wants 9:16 stills, not default 4:5.
  2. Models. Always list_models({ type: "image" }) before generating — ids and caps change. Then pick:
    • Realism / "doesn't look AI" (most UGC) → nano-banana-pro (or whatever the catalog currently lists as Nano Banana Pro).
    • Product must read unmistakably → GPT Image family (gpt-image-2 when available).
    • When it matters, generate one of each and compare. Propose model + prompt to the user before spending credits (generation is paid and not undoable).
  3. References. get_media for an existing product/subject still; pass ids in referenceMediaRefs. Optional folder: "UGC/Stills" keeps campaign assets grouped (folder paths, not folder ids).
  4. Generate, then verify. generate_image returns a placeholder immediately. Ready when get_media({ ids: [placeholder] }) shows no generationStatus field (absence = ready). Values like preparing / generating / downloading / failed mean not ready — on failed, tell the user and ask before retrying. Don't busy-poll.
  5. Place it. If the user wants it on the timeline:
    add_clips({ entries: [{ mediaRef: ID, startFrame: F, source: [0, HOLD_SECONDS] }] })
    Use insert_clips (requires trackIndex) only when rippling into an existing track. Omit trackIndex on add_clips to auto-create a track.

Using reference images (referenceMediaRefs)

How to pass it well:

  • A reference image anchors the object/subject's identity (exact shape, color, material, face). It does not anchor style, lighting, pose, or setting — you still write the full 9-slot prompt around it. A reference photo alone doesn't make an output look like UGC; the prompt slots still have to do that work.
  • Don't redescribe the reference's own appearance in the prompt text — that just invites the model to reconcile two descriptions of the same object instead of trusting the image. Refer to it generically ("the bag from the reference image," "holding the product shown") and let the image carry color/material/shape.
  • Reference image quality matters more than reference image style. A clean, evenly-lit catalog-style shot (plain background, no harsh shadows baked in) gives the model the cleanest read on shape and material and is easiest to relight convincingly in a new scene. A reference photo with strong existing shadows/color cast carries that lighting into the output whether you want it to or not.
  • If you have more than one angle of the same product, passing multiple referenceMediaRefs generally improves shape fidelity, especially for less common silhouettes.
  • Reference images don't need to match the output's aspect ratio — the model extracts the subject, not the canvas.
  • Reuse the same mediaRef across multiple generate_image calls when you want one product/subject to appear consistently across a set of different scenes ("campaign" look) rather than re-uploading or re-describing it each time.
  • Keep product reference assets under a folder path (e.g. generate_image({ folder: "UGC/Products", … }) or organize_media moves) so get_media({ folder }) surfaces them quickly.

Guardrails

  • Build fictional, generic personas — don't generate a specific real, identifiable person without their consent, and don't use this to recreate a named public figure's likeness.
  • Keep wardrobe/pose choices brand-safe and non-sexualizing by default; only go more revealing than streetwear if the user explicitly asks for it.

Frequently asked questions

What does the Ugc Photo Prompts AI skill do?

Generate ultra-realistic, UGC/influencer-style photos inside Palmier Pro — candid selfies, flash photos, lifestyle shots, and product-in-hand ad creative that read as genuine phone photos instead of AI-generated images. Drives Palmier Pro's get_timeline/get_media/generate_image tools directly (correct aspect ratio, model choice, reference-image handling). Use whenever the user wants UGC-style imagery, influencer selfies, "make it look like a real iPhone photo," authentic/non-AI-looking ad creative, or product photos held by a model — even if they don't say "UGC" explicitly.

Why use Ugc Photo Prompts on TypingMind?

Because you install it once and use it with any model. Ugc Photo Prompts is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Ugc Photo Prompts in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/palmier-io/palmier-skills/tree/main/skills/ugc-photo-prompts. TypingMind reads its SKILL.md and installs it as a skill you can enable per chat.

Which AI models can use Ugc Photo Prompts?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Ugc Photo Prompts?

As many as you like. As long as a model supports skills, you can use Ugc Photo Prompts with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Ugc Photo Prompts AI skill free?

Yes. It is published on GitHub by palmier-io under the Apache-2.0 license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇