FIGURA.WIKI

Your Character Prompt Base

Create Your Character

> What are you creating?

Type a profession, role, or character idea...

💡 100% free • No sign-up • Your data stays local

✨ Your Character is Ready!

☕ Found this useful? Buy me a coffee!

📚 My Library

See It In Action

→ You type: "nurse"
"Photorealistic portrait of young South Asian female nurse, athletic build, wearing scrubs, standing in hospital corridor, confident expression, natural lighting, 8K resolution, highly detailed"
→ You type: "warrior"
"Epic fantasy portrait of middle-aged Black male warrior, muscular build, battle-worn armor, long braided hair, mountain backdrop, determined expression, dramatic lighting, cinematic, highly detailed"

User Manual

Quick Start

  1. Click "Build Character" tab
  2. Type your character idea (e.g., "nurse", "warrior")
  3. Click "Let's Go →"
  4. Answer questions by clicking buttons OR typing your own words
  5. Watch your character build in the preview box
  6. Click "I'm Done" anytime to finish
  7. Name and save to your library

💡 Pro Tips

  • Use Custom Text: Your exact words are preserved - be specific!
  • Exit Anytime: "I'm Done" button fills in the rest automatically
  • Random Button (🎲): Get variety and inspiration
  • Back Button: Made a mistake? Go back and change it
  • Skip Button: Randomizes that question and moves forward

Building Your Character

Start Screen

Type what you're creating - profession, role, character type:

Question Flow

You'll be asked 7 questions:

  1. Gender: Male, Female, Non-binary, or custom
  2. Age: Young, Middle-aged, Mature, Elderly, or custom
  3. Ethnicity: 7 options or describe your own
  4. Body Type: Petite, Athletic, Average, Curvy, Stocky, or custom
  5. Hair: Short, Long, Ponytail, Bald, Afro, Braids, or custom
  6. Setting: Where are they? (Office, Hospital, Home, etc.)
  7. Expression/Mood: Happy, Serious, Tired, Confident, etc.

For Each Question You Can:

Live Preview

As you answer, watch your character build in real-time in the preview box at the top.

Managing Your Library

Viewing Your Library

  1. Click "📚 My Library" tab
  2. See all saved characters
  3. Each card shows: Name, Creation Date, Full Prompt
  4. Empty? Click "Create Character" to build your first one

Character Actions

Each character card has buttons:

Library Actions (Top Right)

⬇ Export JSON:

⬇ Export TXT:

⬇ Export CSV:

⬆ Import JSON:

🗑 Clear All:

Backup Strategy

⚠️ IMPORTANT: Your data is stored in your browser only!

What this means:

  • ✓ 100% private - we never see your characters
  • ✓ Works offline - no internet needed after loading
  • ✗ Clearing browser data = losing your library
  • ✗ Private/incognito mode = temporary storage only
  • ✗ Different browsers = different libraries

Recommended:

  • Export JSON weekly (or after adding important characters)
  • Keep backups in cloud storage (Google Drive, Dropbox, etc.)
  • Before clearing browser data, export first!
  • Before switching browsers, export and import

Using Your Prompts

Copy prompts and use them in any AI image generation tool:

You can also:

Keyboard Shortcuts

Troubleshooting

My characters disappeared!

Import isn't working!

Can't save characters!

Admin Guide: Expanding Figura.wiki

For developers who want to add new question categories or expand existing options.

📍 Important Note

This guide is for editing the HTML/JavaScript source code. You'll need:

  • Basic HTML/JavaScript knowledge
  • Text editor (VS Code, Sublime, etc.)
  • Access to the source file

Understanding the System

Two Key Arrays

Figura uses two JavaScript arrays that must match exactly:

1. questions array - What users see (buttons)

const questions = [
    {
        id: 'ethnicity',
        text: '> Ethnicity?',
        prompt: 'Cultural background or heritage:',
        buttons: ['South Asian', 'East Asian', 'Black', ...]
    }
];

2. randomOptions object - What random button picks from

const randomOptions = {
    ethnicity: ['South Asian', 'East Asian', 'Black', ...]
};

⚠️ Critical: Both arrays must have matching options (spelling, capitalization)!

Adding New Options to Existing Questions

Example: Adding "Pacific Islander" to Ethnicity

Step 1: Find the ethnicity question in the questions array:

{
    id: 'ethnicity',
    text: '> Ethnicity?',
    prompt: 'Cultural background or heritage:',
    buttons: [
        'South Asian', 
        'East Asian', 
        'Black', 
        'Hispanic', 
        'White', 
        'Middle Eastern', 
        'Mixed',
        'Pacific Islander',  // ADD HERE
        '🎲 Random'
    ]
}

Step 2: Add to randomOptions.ethnicity:

const randomOptions = {
    ethnicity: [
        'South Asian', 
        'East Asian', 
        'Black', 
        'Hispanic', 
        'White', 
        'Middle Eastern', 
        'mixed heritage',
        'Pacific Islander'  // ADD HERE (exact match!)
    ],
    // ... other options
};

Step 3: Save file and test:

Adding Completely New Questions

Example: Adding "Accessories" Question

Step 1: Add to questions array (after existing questions):

const questions = [
    // ... existing questions ...
    {
        id: 'accessories',
        text: '> Accessories?',
        prompt: 'What items or accessories?',
        buttons: [
            'Glasses',
            'Hat',
            'Jewelry',
            'Watch',
            'Scarf',
            'None',
            '🎲 Random'
        ]
    }
];

Step 2: Add to randomOptions:

const randomOptions = {
    // ... existing options ...
    accessories: [
        'wearing glasses',
        'wearing hat',
        'wearing jewelry',
        'wearing watch',
        'wearing scarf',
        'no accessories'
    ]
};

Step 3: Update assemblePrompt() function:

Find this function and add your new field:

function assemblePrompt(isFinal = true) {
    let parts = [];
    
    // ... existing assembly code ...
    
    // Add your new field
    if (characterData.accessories) {
        parts.push(characterData.accessories);
    }
    
    // ... rest of function
}

Step 4: Update progress dots (optional):

Progress dots auto-update based on questions.length, so no changes needed!

Testing Checklist

Before deploying changes:

  1. ☐ Spelling matches exactly between arrays
  2. ☐ Capitalization matches exactly
  3. ☐ Random button works for new options
  4. ☐ New option appears in final prompt
  5. ☐ Progress dots still work (7 dots for 7 questions, etc.)
  6. ☐ Skip button works
  7. ☐ Back button works
  8. ☐ Custom text input still works
  9. ☐ Character saves to library correctly
  10. ☐ Exported characters include new data

Common Mistakes

❌ Spelling Mismatch

buttons: ['South Asian']
randomOptions: ['SouthAsian']  // WRONG - no space!

Result: Random button won't include this option

❌ Case Mismatch

buttons: ['Black']
randomOptions: ['black']  // WRONG - lowercase!

Result: Random button won't include this option

❌ Forgot randomOptions

// Added to buttons but not randomOptions
buttons: ['New Option', '🎲 Random']
// randomOptions missing this option

Result: Random button won't pick new option

❌ Forgot assemblePrompt update

// Added new question but didn't update assemblePrompt()
// New data collected but not used in final prompt

Result: New question asked but doesn't appear in final prompt

Advanced: Customizing Prompt Assembly

The assemblePrompt() function controls how your final prompt is built.

Current Logic:

function assemblePrompt(isFinal = true) {
    let parts = [];
    
    // Build profession part with modifiers
    if (characterData.profession) {
        let profPart = '';
        if (characterData.age) profPart += characterData.age + ' ';
        if (characterData.ethnicity) profPart += characterData.ethnicity + ' ';
        if (characterData.gender) profPart += characterData.gender + ' ';
        profPart += characterData.profession;
        parts.push(profPart);
    }
    
    // Add other attributes
    if (characterData.build) parts.push(characterData.build + ' build');
    if (characterData.hair) parts.push(characterData.hair);
    if (characterData.mood) parts.push(characterData.mood);
    if (characterData.setting) parts.push(characterData.setting);
    
    // Join with commas
    let prompt = parts.join(', ');
    
    // Add prefix/suffix if final
    if (isFinal) {
        prompt = 'Photorealistic portrait of ' + prompt + 
                 ', professional photography, 8K resolution, natural lighting, highly detailed';
    }
    
    return prompt;
}

You can customize:

Version Control Tip

Before making changes:

  1. Make a backup copy of the HTML file
  2. Name it with version/date: figura-v1.0-backup.html
  3. Make your changes in the original
  4. Test thoroughly before deploying
  5. Keep backups of working versions

Need Help?

If you're stuck:

This guide covers the basics. For advanced customization (multiple libraries, different art styles, etc.), you'll need to extend the codebase significantly.

Privacy Policy

Short Version

We don't collect, store, or sell your data. Everything stays on your device.

All your characters are stored in your browser only. We never see what you create.

Terms of Service

Short Version

Free to use. No guarantees. Don't be evil.

If the service is not running, it's not running. That's it.

About Figura.wiki

How We Started

We're creators who kept getting stuck on demographics when making AI image prompts.

What age? What ethnicity? What body type? We built Figura.wiki to fix it.