mirror of
https://github.com/nolen777/eagle0.git
synced 2026-07-28 20:55:44 +00:00
Noprofession headshots (#4206)
* for generic generation * more no professions
This commit is contained in:
@@ -6,25 +6,25 @@ mv /Users/dancrosby/NewInvokeAI/outputs/images/*.png /Users/dancrosby/Downloads/
|
||||
|
||||
echo "***"
|
||||
echo "*** Renaming files"
|
||||
bazel run src/main/go/net/eagle0/util/hero_generation/pngorganizer /Users/dancrosby/Downloads/new_heroes/
|
||||
bazel run src/main/go/net/eagle0/util/hero_generation/pngorganizer -- /Users/dancrosby/Downloads/new_heroes/
|
||||
|
||||
echo "***"
|
||||
echo "*** Moving files to generated"
|
||||
mv /Users/dancrosby/Downloads/new_heroes/generated/*.png /Users/dancrosby/Documents/headshots/generated
|
||||
# echo "***"
|
||||
# echo "*** Moving files to generated"
|
||||
# mv /Users/dancrosby/Downloads/new_heroes/generated/*.png /Users/dancrosby/Documents/headshots/generated
|
||||
|
||||
echo "***"
|
||||
echo "*** Syncing to server"
|
||||
./scripts/sync_headshots.sh
|
||||
# echo "***"
|
||||
# echo "*** Syncing to server"
|
||||
# ./scripts/sync_headshots.sh
|
||||
|
||||
echo "***"
|
||||
echo "*** Checking which new heroes have images and adjusting TSVs"
|
||||
bazel run //src/main/go/net/eagle0/util/hero_generation/imagechecker -- /Users/dancrosby/CodingProjects/github/eagle0/src/main/resources/net/eagle0/eagle/waiting_headshots_heroes.herodata /Users/dancrosby/CodingProjects/github/eagle0/src/main/resources/net/eagle0/eagle/generated_heroes.tsv /Users/dancrosby/Documents/headshots/
|
||||
# echo "***"
|
||||
# echo "*** Checking which new heroes have images and adjusting TSVs"
|
||||
# bazel run //src/main/go/net/eagle0/util/hero_generation/imagechecker -- /Users/dancrosby/CodingProjects/github/eagle0/src/main/resources/net/eagle0/eagle/waiting_headshots_heroes.herodata /Users/dancrosby/CodingProjects/github/eagle0/src/main/resources/net/eagle0/eagle/generated_heroes.tsv /Users/dancrosby/Documents/headshots/
|
||||
|
||||
echo "***"
|
||||
echo "*** Deduplicate names"
|
||||
bazel run //src/main/go/net/eagle0/util/hero_generation/namededuplicator /Users/dancrosby/CodingProjects/github/eagle0/src/main/resources/net/eagle0/eagle/generated_heroes.tsv
|
||||
rm src/main/resources/net/eagle0/eagle/generated_heroes.tsv.backup
|
||||
# echo "***"
|
||||
# echo "*** Deduplicate names"
|
||||
# bazel run //src/main/go/net/eagle0/util/hero_generation/namededuplicator /Users/dancrosby/CodingProjects/github/eagle0/src/main/resources/net/eagle0/eagle/generated_heroes.tsv
|
||||
# rm src/main/resources/net/eagle0/eagle/generated_heroes.tsv.backup
|
||||
|
||||
echo "***"
|
||||
echo "*** Generating new SD prompts"
|
||||
bazel run src/main/go/net/eagle0/util/hero_generation/heroformatter ${PWD}/src/main/resources/net/eagle0/eagle/waiting_headshots_heroes.herodata ~/samplelines.txt
|
||||
# echo "***"
|
||||
# echo "*** Generating new SD prompts"
|
||||
# bazel run src/main/go/net/eagle0/util/hero_generation/heroformatter ${PWD}/src/main/resources/net/eagle0/eagle/waiting_headshots_heroes.herodata ~/samplelines.txt
|
||||
|
||||
@@ -121,9 +121,30 @@ func main() {
|
||||
// Check for command line arguments
|
||||
if len(os.Args) < 3 {
|
||||
fmt.Fprintf(os.Stderr, "Usage: %s <input-path> <output-path>\n", os.Args[0])
|
||||
fmt.Fprintf(os.Stderr, " or: %s --profession <profession> --count <number> <output-path>\n", os.Args[0])
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
// Check if using --profession flag
|
||||
if os.Args[1] == "--profession" {
|
||||
if len(os.Args) != 6 || os.Args[3] != "--count" {
|
||||
fmt.Fprintf(os.Stderr, "Usage: %s --profession <profession> --count <number> <output-path>\n", os.Args[0])
|
||||
os.Exit(1)
|
||||
}
|
||||
profession := os.Args[2]
|
||||
countStr := os.Args[4]
|
||||
outputPath := os.Args[5]
|
||||
|
||||
count, err := strconv.Atoi(countStr)
|
||||
if err != nil || count <= 0 {
|
||||
fmt.Fprintf(os.Stderr, "Error: count must be a positive integer, got '%s'\n", countStr)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
generateMultipleHeroes(profession, count, outputPath)
|
||||
return
|
||||
}
|
||||
|
||||
inputPath := os.Args[1]
|
||||
outputPath := os.Args[2]
|
||||
|
||||
@@ -368,21 +389,29 @@ var (
|
||||
|
||||
// generateHeroDescription takes a hero object and returns a randomized description string
|
||||
func generateHeroDescription(hero *Hero) string {
|
||||
// Create a deterministic random source based on hero name
|
||||
h := fnv.New64a()
|
||||
h.Write([]byte(hero.Name))
|
||||
seed := int64(h.Sum64())
|
||||
rng := rand.New(rand.NewSource(seed))
|
||||
return generateHeroDescriptionWithRng(hero, nil)
|
||||
}
|
||||
|
||||
// generateHeroDescriptionWithRng takes a hero object and optional RNG and returns a randomized description string
|
||||
func generateHeroDescriptionWithRng(hero *Hero, rng *rand.Rand) string {
|
||||
// Create a deterministic random source based on hero name if no RNG provided
|
||||
if rng == nil {
|
||||
h := fnv.New64a()
|
||||
h.Write([]byte(hero.Name))
|
||||
seed := int64(h.Sum64())
|
||||
rng = rand.New(rand.NewSource(seed))
|
||||
}
|
||||
|
||||
var descriptionParts []string
|
||||
|
||||
// Select nationality for human characters
|
||||
nationality := nationalities[rng.Intn(len(nationalities))]
|
||||
|
||||
// Handle profession - use random trade if noProfession
|
||||
// Handle profession - use random trade if noProfession for description only
|
||||
profession := strings.ToLower(hero.Profession)
|
||||
promptProfession := profession
|
||||
if profession == "noprofession" {
|
||||
profession = trades[rng.Intn(len(trades))]
|
||||
promptProfession = trades[rng.Intn(len(trades))]
|
||||
}
|
||||
|
||||
// Handle gender mapping
|
||||
@@ -411,14 +440,14 @@ func generateHeroDescription(hero *Hero) string {
|
||||
|
||||
// Get profession-specific adjective
|
||||
var professionDesc string
|
||||
if adjectives, exists := professionAdjectives[profession]; exists {
|
||||
if adjectives, exists := professionAdjectives[promptProfession]; exists {
|
||||
adjective := adjectives[rng.Intn(len(adjectives))]
|
||||
professionDesc = fmt.Sprintf("%s medieval %s", adjective, profession)
|
||||
professionDesc = fmt.Sprintf("%s medieval %s", adjective, promptProfession)
|
||||
} else {
|
||||
// Default adjectives for unknown professions
|
||||
defaultAdjectives := []string{"experienced", "skilled", "notable", "distinguished"}
|
||||
adjective := defaultAdjectives[rng.Intn(len(defaultAdjectives))]
|
||||
professionDesc = fmt.Sprintf("%s medieval %s", adjective, profession)
|
||||
professionDesc = fmt.Sprintf("%s medieval %s", adjective, promptProfession)
|
||||
}
|
||||
|
||||
// Add profession with adjective
|
||||
@@ -463,11 +492,11 @@ func generateHeroDescription(hero *Hero) string {
|
||||
|
||||
// Generate the final prompt with artistic style and subtle framing
|
||||
if lightingDesc != "" {
|
||||
return fmt.Sprintf("A portrait of a %s named '%s', %s, %s, %s.",
|
||||
baseDescription, hero.Name, lightingDesc, artStyle, quality)
|
||||
return fmt.Sprintf("A portrait of a %s, %s, %s, %s.",
|
||||
baseDescription, lightingDesc, artStyle, quality)
|
||||
} else {
|
||||
return fmt.Sprintf("A portrait of a %s named '%s', %s, %s.",
|
||||
baseDescription, hero.Name, artStyle, quality)
|
||||
return fmt.Sprintf("A portrait of a %s, %s, %s.",
|
||||
baseDescription, artStyle, quality)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -558,3 +587,143 @@ func mapGender(gender string) string {
|
||||
return "nonbinary"
|
||||
}
|
||||
}
|
||||
|
||||
// generateRandomStats creates random stats for a hero
|
||||
func generateRandomStats(rng *rand.Rand) (int, int, int, int, int, int, int, int, int, int) {
|
||||
// Generate stats in typical RPG range (3-18, with most values being 8-15)
|
||||
strength := rng.Intn(16) + 3 // 3-18
|
||||
agility := rng.Intn(16) + 3 // 3-18
|
||||
constitution := rng.Intn(16) + 3 // 3-18
|
||||
wisdom := rng.Intn(16) + 3 // 3-18
|
||||
charisma := rng.Intn(16) + 3 // 3-18
|
||||
vigor := rng.Intn(16) + 3 // 3-18
|
||||
integrity := rng.Intn(16) + 3 // 3-18
|
||||
ambition := rng.Intn(16) + 3 // 3-18
|
||||
gregariousness := rng.Intn(16) + 3 // 3-18
|
||||
bravery := rng.Intn(16) + 3 // 3-18
|
||||
|
||||
return strength, agility, constitution, wisdom, charisma, vigor, integrity, ambition, gregariousness, bravery
|
||||
}
|
||||
|
||||
// getStatModifier returns the stat modifier string for image path if stat is particularly high or low
|
||||
func getStatModifier(statName string, statValue int) string {
|
||||
const highThreshold = 16
|
||||
const lowThreshold = 6
|
||||
|
||||
if statValue >= highThreshold {
|
||||
return "hi" + strings.ToUpper(statName[:3])
|
||||
} else if statValue <= lowThreshold {
|
||||
return "lo" + strings.ToUpper(statName[:3])
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
// generateImagePath creates an image path with profession, full gender name, optional stat modifier, and random number
|
||||
func generateImagePath(profession string, hero *Hero, rng *rand.Rand) string {
|
||||
// Get all possible stat modifiers
|
||||
stats := map[string]int{
|
||||
"str": hero.Strength,
|
||||
"agi": hero.Agility,
|
||||
"con": hero.Constitution,
|
||||
"wis": hero.Wisdom,
|
||||
"cha": hero.Charisma,
|
||||
"vig": hero.Vigor,
|
||||
"int": hero.Integrity,
|
||||
"amb": hero.Ambition,
|
||||
"gre": hero.Gregariousness,
|
||||
"bra": hero.Bravery,
|
||||
}
|
||||
|
||||
var possibleMods []string
|
||||
for statName, statValue := range stats {
|
||||
if mod := getStatModifier(statName, statValue); mod != "" {
|
||||
possibleMods = append(possibleMods, mod)
|
||||
}
|
||||
}
|
||||
|
||||
// Generate random number for uniqueness
|
||||
randomNum := rng.Intn(10000)
|
||||
|
||||
// Get gender name
|
||||
var genderName string
|
||||
switch strings.ToLower(hero.Gender) {
|
||||
case "male":
|
||||
genderName = "male"
|
||||
case "female":
|
||||
genderName = "female"
|
||||
default:
|
||||
genderName = "nonbinary"
|
||||
}
|
||||
|
||||
// Build image path
|
||||
if len(possibleMods) > 0 {
|
||||
// 50% chance to include a stat modifier
|
||||
if rng.Float32() < 0.5 {
|
||||
statMod := possibleMods[rng.Intn(len(possibleMods))]
|
||||
return fmt.Sprintf("%s_%s_%s_%04d.png", profession, genderName, statMod, randomNum)
|
||||
}
|
||||
}
|
||||
|
||||
return fmt.Sprintf("%s_%s_%04d.png", profession, genderName, randomNum)
|
||||
}
|
||||
|
||||
// generateMultipleHeroes creates multiple heroes from a profession and writes them to output
|
||||
func generateMultipleHeroes(professionInput string, count int, outputPath string) {
|
||||
// Create random generator
|
||||
rng := rand.New(rand.NewSource(rand.Int63()))
|
||||
|
||||
// Create output file
|
||||
outputFile, err := os.Create(outputPath)
|
||||
if err != nil {
|
||||
log.Fatalf("Error creating output file: %v", err)
|
||||
}
|
||||
defer outputFile.Close()
|
||||
|
||||
// Generate multiple heroes
|
||||
for i := 0; i < count; i++ {
|
||||
// Generate random stats
|
||||
strength, agility, constitution, wisdom, charisma, vigor, integrity, ambition, gregariousness, bravery := generateRandomStats(rng)
|
||||
|
||||
// Calculate sum
|
||||
sum := strength + agility + constitution + wisdom + charisma
|
||||
|
||||
// Generate random gender
|
||||
genders := []string{"male", "female", "other"}
|
||||
gender := genders[rng.Intn(len(genders))]
|
||||
|
||||
// Create hero struct (no name needed for runtime assignment)
|
||||
hero := &Hero{
|
||||
Name: "", // No name - will be assigned at runtime
|
||||
Strength: strength,
|
||||
Agility: agility,
|
||||
Constitution: constitution,
|
||||
Wisdom: wisdom,
|
||||
Charisma: charisma,
|
||||
Sum: sum,
|
||||
Vigor: vigor,
|
||||
Integrity: integrity,
|
||||
Ambition: ambition,
|
||||
Gregariousness: gregariousness,
|
||||
Bravery: bravery,
|
||||
Profession: professionInput, // Use exact input for profession
|
||||
GreatPerson: false,
|
||||
Gender: gender,
|
||||
Backstory: "A randomly generated character",
|
||||
Personality: "Varied and interesting",
|
||||
}
|
||||
|
||||
// Generate image path
|
||||
hero.ImagePath = generateImagePath(professionInput, hero, rng)
|
||||
|
||||
// Generate hero description using the same RNG for true randomness
|
||||
heroDescription := generateHeroDescriptionWithRng(hero, rng)
|
||||
outputLine := fmt.Sprintf("%s|||%s\n", hero.ImagePath, heroDescription)
|
||||
|
||||
_, err = outputFile.WriteString(outputLine)
|
||||
if err != nil {
|
||||
log.Fatalf("Error writing to output file: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
fmt.Printf("Successfully generated %d heroes with profession '%s' to %s\n", count, professionInput, outputPath)
|
||||
}
|
||||
|
||||
@@ -36,7 +36,7 @@ func main() {
|
||||
}
|
||||
|
||||
fmt.Printf("Processing: %s\n", path)
|
||||
|
||||
|
||||
// Extract metadata from PNG
|
||||
metadata, err := extractPNGMetadata(path)
|
||||
if err != nil {
|
||||
@@ -90,19 +90,19 @@ func extractPNGMetadata(filePath string) (*MetadataInfo, error) {
|
||||
|
||||
// Convert to string for easier searching
|
||||
contentStr := string(content)
|
||||
|
||||
|
||||
// Look for the specific JSON pattern we know exists
|
||||
filenamePattern := `{"filename":"generated/`
|
||||
filenamePattern := `{"filename":"mage_`
|
||||
startIndex := strings.Index(contentStr, filenamePattern)
|
||||
if startIndex == -1 {
|
||||
return nil, nil // No metadata found
|
||||
}
|
||||
|
||||
|
||||
// Find the end of this JSON object
|
||||
jsonStart := startIndex
|
||||
braceCount := 0
|
||||
var jsonEnd int
|
||||
|
||||
|
||||
for i := jsonStart; i < len(contentStr); i++ {
|
||||
if contentStr[i] == '{' {
|
||||
braceCount++
|
||||
@@ -114,23 +114,23 @@ func extractPNGMetadata(filePath string) (*MetadataInfo, error) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if jsonEnd == 0 {
|
||||
return nil, fmt.Errorf("malformed JSON in metadata")
|
||||
}
|
||||
|
||||
|
||||
// Extract the JSON string
|
||||
jsonStr := contentStr[jsonStart:jsonEnd]
|
||||
|
||||
|
||||
// Parse the JSON
|
||||
var metadata MetadataInfo
|
||||
if err := json.Unmarshal([]byte(jsonStr), &metadata); err != nil {
|
||||
return nil, fmt.Errorf("error parsing JSON metadata: %v", err)
|
||||
}
|
||||
|
||||
|
||||
if metadata.Filename == "" {
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
|
||||
return &metadata, nil
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7112,6 +7112,101 @@ no_profession/female/9060029753389701469.png
|
||||
no_profession/female/9064878898694998640.png
|
||||
no_profession/female/954934613748115498.png
|
||||
no_profession/female/another_sara.png
|
||||
no_profession/female/noprofession_female_0147.png
|
||||
no_profession/female/noprofession_female_0384.png
|
||||
no_profession/female/noprofession_female_0492.png
|
||||
no_profession/female/noprofession_female_0824.png
|
||||
no_profession/female/noprofession_female_0860.png
|
||||
no_profession/female/noprofession_female_1161.png
|
||||
no_profession/female/noprofession_female_1531.png
|
||||
no_profession/female/noprofession_female_1589.png
|
||||
no_profession/female/noprofession_female_1897.png
|
||||
no_profession/female/noprofession_female_2185.png
|
||||
no_profession/female/noprofession_female_2639.png
|
||||
no_profession/female/noprofession_female_3061.png
|
||||
no_profession/female/noprofession_female_3072.png
|
||||
no_profession/female/noprofession_female_3827.png
|
||||
no_profession/female/noprofession_female_3854.png
|
||||
no_profession/female/noprofession_female_3870.png
|
||||
no_profession/female/noprofession_female_3897.png
|
||||
no_profession/female/noprofession_female_3912.png
|
||||
no_profession/female/noprofession_female_3914.png
|
||||
no_profession/female/noprofession_female_4006.png
|
||||
no_profession/female/noprofession_female_4041.png
|
||||
no_profession/female/noprofession_female_4133.png
|
||||
no_profession/female/noprofession_female_4533.png
|
||||
no_profession/female/noprofession_female_4794.png
|
||||
no_profession/female/noprofession_female_4819.png
|
||||
no_profession/female/noprofession_female_5098.png
|
||||
no_profession/female/noprofession_female_5253.png
|
||||
no_profession/female/noprofession_female_5399.png
|
||||
no_profession/female/noprofession_female_5465.png
|
||||
no_profession/female/noprofession_female_5813.png
|
||||
no_profession/female/noprofession_female_6037.png
|
||||
no_profession/female/noprofession_female_6099.png
|
||||
no_profession/female/noprofession_female_6252.png
|
||||
no_profession/female/noprofession_female_6492.png
|
||||
no_profession/female/noprofession_female_6773.png
|
||||
no_profession/female/noprofession_female_6797.png
|
||||
no_profession/female/noprofession_female_6841.png
|
||||
no_profession/female/noprofession_female_7036.png
|
||||
no_profession/female/noprofession_female_7368.png
|
||||
no_profession/female/noprofession_female_7595.png
|
||||
no_profession/female/noprofession_female_8002.png
|
||||
no_profession/female/noprofession_female_8194.png
|
||||
no_profession/female/noprofession_female_8362.png
|
||||
no_profession/female/noprofession_female_8398.png
|
||||
no_profession/female/noprofession_female_8426.png
|
||||
no_profession/female/noprofession_female_8525.png
|
||||
no_profession/female/noprofession_female_8668.png
|
||||
no_profession/female/noprofession_female_9220.png
|
||||
no_profession/female/noprofession_female_9679.png
|
||||
no_profession/female/noprofession_female_9852.png
|
||||
no_profession/female/noprofession_female_9984.png
|
||||
no_profession/female/noprofession_female_hiAGI_4314.png
|
||||
no_profession/female/noprofession_female_hiAGI_8038.png
|
||||
no_profession/female/noprofession_female_hiAMB_0802.png
|
||||
no_profession/female/noprofession_female_hiAMB_1755.png
|
||||
no_profession/female/noprofession_female_hiAMB_2213.png
|
||||
no_profession/female/noprofession_female_hiAMB_5596.png
|
||||
no_profession/female/noprofession_female_hiAMB_5794.png
|
||||
no_profession/female/noprofession_female_hiCHA_4698.png
|
||||
no_profession/female/noprofession_female_hiCON_2695.png
|
||||
no_profession/female/noprofession_female_hiGRE_1163.png
|
||||
no_profession/female/noprofession_female_hiGRE_5882.png
|
||||
no_profession/female/noprofession_female_hiINT_4748.png
|
||||
no_profession/female/noprofession_female_hiSTR_5881.png
|
||||
no_profession/female/noprofession_female_hiSTR_6030.png
|
||||
no_profession/female/noprofession_female_hiVIG_1163.png
|
||||
no_profession/female/noprofession_female_hiVIG_3308.png
|
||||
no_profession/female/noprofession_female_hiVIG_5151.png
|
||||
no_profession/female/noprofession_female_hiWIS_3665.png
|
||||
no_profession/female/noprofession_female_hiWIS_5361.png
|
||||
no_profession/female/noprofession_female_hiWIS_7729.png
|
||||
no_profession/female/noprofession_female_hiWIS_9626.png
|
||||
no_profession/female/noprofession_female_loAGI_8728.png
|
||||
no_profession/female/noprofession_female_loBRA_1749.png
|
||||
no_profession/female/noprofession_female_loBRA_2897.png
|
||||
no_profession/female/noprofession_female_loBRA_9881.png
|
||||
no_profession/female/noprofession_female_loCHA_1447.png
|
||||
no_profession/female/noprofession_female_loCON_5876.png
|
||||
no_profession/female/noprofession_female_loCON_7534.png
|
||||
no_profession/female/noprofession_female_loGRE_8118.png
|
||||
no_profession/female/noprofession_female_loGRE_8335.png
|
||||
no_profession/female/noprofession_female_loINT_7072.png
|
||||
no_profession/female/noprofession_female_loSTR_0877.png
|
||||
no_profession/female/noprofession_female_loSTR_7793.png
|
||||
no_profession/female/noprofession_female_loSTR_9588.png
|
||||
no_profession/female/noprofession_female_loVIG_2210.png
|
||||
no_profession/female/noprofession_female_loVIG_3344.png
|
||||
no_profession/female/noprofession_female_loVIG_6433.png
|
||||
no_profession/female/noprofession_female_loVIG_6727.png
|
||||
no_profession/female/noprofession_female_loVIG_8185.png
|
||||
no_profession/female/noprofession_female_loVIG_9069.png
|
||||
no_profession/female/noprofession_female_loWIS_3512.png
|
||||
no_profession/female/noprofession_female_loWIS_5475.png
|
||||
no_profession/female/noprofession_female_loWIS_7172.png
|
||||
no_profession/female/noprofession_female_loWIS_9470.png
|
||||
no_profession/male/-2765289291701068421.png
|
||||
no_profession/male/-4081732123257645207.png
|
||||
no_profession/male/-4408146042720161884.png
|
||||
@@ -9493,4 +9588,192 @@ no_profession/male/2491735129919916699.png
|
||||
no_profession/male/3026014115545198987.png
|
||||
no_profession/male/4835426109872477912.png
|
||||
no_profession/male/95c2006e-c6ab-403e-b1fb-f98a56da85a5.png
|
||||
no_profession/male/mesrop_mashtots.png
|
||||
no_profession/male/mesrop_mashtots.png
|
||||
no_profession/male/noprofession_male_0153.png
|
||||
no_profession/male/noprofession_male_0199.png
|
||||
no_profession/male/noprofession_male_0548.png
|
||||
no_profession/male/noprofession_male_0707.png
|
||||
no_profession/male/noprofession_male_0749.png
|
||||
no_profession/male/noprofession_male_0960.png
|
||||
no_profession/male/noprofession_male_1025.png
|
||||
no_profession/male/noprofession_male_1072.png
|
||||
no_profession/male/noprofession_male_1224.png
|
||||
no_profession/male/noprofession_male_1252.png
|
||||
no_profession/male/noprofession_male_1309.png
|
||||
no_profession/male/noprofession_male_1474.png
|
||||
no_profession/male/noprofession_male_1663.png
|
||||
no_profession/male/noprofession_male_1735.png
|
||||
no_profession/male/noprofession_male_1847.png
|
||||
no_profession/male/noprofession_male_1866.png
|
||||
no_profession/male/noprofession_male_2208.png
|
||||
no_profession/male/noprofession_male_2224.png
|
||||
no_profession/male/noprofession_male_2486.png
|
||||
no_profession/male/noprofession_male_2520.png
|
||||
no_profession/male/noprofession_male_2523.png
|
||||
no_profession/male/noprofession_male_2591.png
|
||||
no_profession/male/noprofession_male_2690.png
|
||||
no_profession/male/noprofession_male_3115.png
|
||||
no_profession/male/noprofession_male_3820.png
|
||||
no_profession/male/noprofession_male_4021.png
|
||||
no_profession/male/noprofession_male_4062.png
|
||||
no_profession/male/noprofession_male_4555.png
|
||||
no_profession/male/noprofession_male_5086.png
|
||||
no_profession/male/noprofession_male_5150.png
|
||||
no_profession/male/noprofession_male_5373.png
|
||||
no_profession/male/noprofession_male_5466.png
|
||||
no_profession/male/noprofession_male_5613.png
|
||||
no_profession/male/noprofession_male_6040.png
|
||||
no_profession/male/noprofession_male_6405.png
|
||||
no_profession/male/noprofession_male_6418.png
|
||||
no_profession/male/noprofession_male_6436.png
|
||||
no_profession/male/noprofession_male_6856.png
|
||||
no_profession/male/noprofession_male_7432.png
|
||||
no_profession/male/noprofession_male_7574.png
|
||||
no_profession/male/noprofession_male_8115.png
|
||||
no_profession/male/noprofession_male_8133.png
|
||||
no_profession/male/noprofession_male_8270.png
|
||||
no_profession/male/noprofession_male_8326.png
|
||||
no_profession/male/noprofession_male_8729.png
|
||||
no_profession/male/noprofession_male_8878.png
|
||||
no_profession/male/noprofession_male_9116.png
|
||||
no_profession/male/noprofession_male_9156.png
|
||||
no_profession/male/noprofession_male_9350.png
|
||||
no_profession/male/noprofession_male_9709.png
|
||||
no_profession/male/noprofession_male_9722.png
|
||||
no_profession/male/noprofession_male_9963.png
|
||||
no_profession/male/noprofession_male_hiAGI_1573.png
|
||||
no_profession/male/noprofession_male_hiAGI_3572.png
|
||||
no_profession/male/noprofession_male_hiAGI_8989.png
|
||||
no_profession/male/noprofession_male_hiBRA_3587.png
|
||||
no_profession/male/noprofession_male_hiBRA_7088.png
|
||||
no_profession/male/noprofession_male_hiBRA_8014.png
|
||||
no_profession/male/noprofession_male_hiBRA_9360.png
|
||||
no_profession/male/noprofession_male_hiCHA_6020.png
|
||||
no_profession/male/noprofession_male_hiCON_8131.png
|
||||
no_profession/male/noprofession_male_hiGRE_1464.png
|
||||
no_profession/male/noprofession_male_hiGRE_5257.png
|
||||
no_profession/male/noprofession_male_hiINT_0985.png
|
||||
no_profession/male/noprofession_male_hiINT_7716.png
|
||||
no_profession/male/noprofession_male_hiINT_9943.png
|
||||
no_profession/male/noprofession_male_hiSTR_4429.png
|
||||
no_profession/male/noprofession_male_hiSTR_6913.png
|
||||
no_profession/male/noprofession_male_hiVIG_0337.png
|
||||
no_profession/male/noprofession_male_hiVIG_5948.png
|
||||
no_profession/male/noprofession_male_hiVIG_6376.png
|
||||
no_profession/male/noprofession_male_hiWIS_0378.png
|
||||
no_profession/male/noprofession_male_loAGI_0627.png
|
||||
no_profession/male/noprofession_male_loAGI_2228.png
|
||||
no_profession/male/noprofession_male_loAGI_9734.png
|
||||
no_profession/male/noprofession_male_loAMB_2278.png
|
||||
no_profession/male/noprofession_male_loBRA_0436.png
|
||||
no_profession/male/noprofession_male_loBRA_4873.png
|
||||
no_profession/male/noprofession_male_loBRA_9115.png
|
||||
no_profession/male/noprofession_male_loCHA_0244.png
|
||||
no_profession/male/noprofession_male_loCHA_2474.png
|
||||
no_profession/male/noprofession_male_loCHA_6746.png
|
||||
no_profession/male/noprofession_male_loCON_0196.png
|
||||
no_profession/male/noprofession_male_loCON_1057.png
|
||||
no_profession/male/noprofession_male_loCON_1435.png
|
||||
no_profession/male/noprofession_male_loCON_1600.png
|
||||
no_profession/male/noprofession_male_loCON_3986.png
|
||||
no_profession/male/noprofession_male_loCON_7736.png
|
||||
no_profession/male/noprofession_male_loCON_8146.png
|
||||
no_profession/male/noprofession_male_loGRE_1213.png
|
||||
no_profession/male/noprofession_male_loGRE_1966.png
|
||||
no_profession/male/noprofession_male_loGRE_3884.png
|
||||
no_profession/male/noprofession_male_loGRE_7008.png
|
||||
no_profession/male/noprofession_male_loSTR_3252.png
|
||||
no_profession/male/noprofession_male_loSTR_7778.png
|
||||
no_profession/male/noprofession_male_loWIS_6243.png
|
||||
no_profession/male/noprofession_male_loWIS_9370.png
|
||||
no_profession/nonbinary/noprofession_nonbinary_0088.png
|
||||
no_profession/nonbinary/noprofession_nonbinary_0278.png
|
||||
no_profession/nonbinary/noprofession_nonbinary_0469.png
|
||||
no_profession/nonbinary/noprofession_nonbinary_0771.png
|
||||
no_profession/nonbinary/noprofession_nonbinary_0937.png
|
||||
no_profession/nonbinary/noprofession_nonbinary_0986.png
|
||||
no_profession/nonbinary/noprofession_nonbinary_1317.png
|
||||
no_profession/nonbinary/noprofession_nonbinary_1512.png
|
||||
no_profession/nonbinary/noprofession_nonbinary_1751.png
|
||||
no_profession/nonbinary/noprofession_nonbinary_1831.png
|
||||
no_profession/nonbinary/noprofession_nonbinary_1919.png
|
||||
no_profession/nonbinary/noprofession_nonbinary_1924.png
|
||||
no_profession/nonbinary/noprofession_nonbinary_2247.png
|
||||
no_profession/nonbinary/noprofession_nonbinary_2395.png
|
||||
no_profession/nonbinary/noprofession_nonbinary_2421.png
|
||||
no_profession/nonbinary/noprofession_nonbinary_2909.png
|
||||
no_profession/nonbinary/noprofession_nonbinary_4253.png
|
||||
no_profession/nonbinary/noprofession_nonbinary_4296.png
|
||||
no_profession/nonbinary/noprofession_nonbinary_4926.png
|
||||
no_profession/nonbinary/noprofession_nonbinary_5321.png
|
||||
no_profession/nonbinary/noprofession_nonbinary_5445.png
|
||||
no_profession/nonbinary/noprofession_nonbinary_5498.png
|
||||
no_profession/nonbinary/noprofession_nonbinary_5663.png
|
||||
no_profession/nonbinary/noprofession_nonbinary_6417.png
|
||||
no_profession/nonbinary/noprofession_nonbinary_6458.png
|
||||
no_profession/nonbinary/noprofession_nonbinary_6852.png
|
||||
no_profession/nonbinary/noprofession_nonbinary_6916.png
|
||||
no_profession/nonbinary/noprofession_nonbinary_6921.png
|
||||
no_profession/nonbinary/noprofession_nonbinary_6961.png
|
||||
no_profession/nonbinary/noprofession_nonbinary_6981.png
|
||||
no_profession/nonbinary/noprofession_nonbinary_7187.png
|
||||
no_profession/nonbinary/noprofession_nonbinary_7189.png
|
||||
no_profession/nonbinary/noprofession_nonbinary_7348.png
|
||||
no_profession/nonbinary/noprofession_nonbinary_7564.png
|
||||
no_profession/nonbinary/noprofession_nonbinary_8001.png
|
||||
no_profession/nonbinary/noprofession_nonbinary_8067.png
|
||||
no_profession/nonbinary/noprofession_nonbinary_8402.png
|
||||
no_profession/nonbinary/noprofession_nonbinary_8519.png
|
||||
no_profession/nonbinary/noprofession_nonbinary_8587.png
|
||||
no_profession/nonbinary/noprofession_nonbinary_8722.png
|
||||
no_profession/nonbinary/noprofession_nonbinary_9679.png
|
||||
no_profession/nonbinary/noprofession_nonbinary_9695.png
|
||||
no_profession/nonbinary/noprofession_nonbinary_hiAGI_4642.png
|
||||
no_profession/nonbinary/noprofession_nonbinary_hiAGI_6914.png
|
||||
no_profession/nonbinary/noprofession_nonbinary_hiAGI_9950.png
|
||||
no_profession/nonbinary/noprofession_nonbinary_hiAMB_4551.png
|
||||
no_profession/nonbinary/noprofession_nonbinary_hiBRA_0007.png
|
||||
no_profession/nonbinary/noprofession_nonbinary_hiCHA_3831.png
|
||||
no_profession/nonbinary/noprofession_nonbinary_hiCHA_4665.png
|
||||
no_profession/nonbinary/noprofession_nonbinary_hiCHA_9108.png
|
||||
no_profession/nonbinary/noprofession_nonbinary_hiGRE_0043.png
|
||||
no_profession/nonbinary/noprofession_nonbinary_hiGRE_6560.png
|
||||
no_profession/nonbinary/noprofession_nonbinary_hiINT_2075.png
|
||||
no_profession/nonbinary/noprofession_nonbinary_hiINT_9845.png
|
||||
no_profession/nonbinary/noprofession_nonbinary_hiSTR_8348.png
|
||||
no_profession/nonbinary/noprofession_nonbinary_hiSTR_9600.png
|
||||
no_profession/nonbinary/noprofession_nonbinary_hiVIG_0853.png
|
||||
no_profession/nonbinary/noprofession_nonbinary_hiVIG_4404.png
|
||||
no_profession/nonbinary/noprofession_nonbinary_hiVIG_9818.png
|
||||
no_profession/nonbinary/noprofession_nonbinary_hiWIS_4633.png
|
||||
no_profession/nonbinary/noprofession_nonbinary_hiWIS_5787.png
|
||||
no_profession/nonbinary/noprofession_nonbinary_hiWIS_8957.png
|
||||
no_profession/nonbinary/noprofession_nonbinary_hiWIS_9801.png
|
||||
no_profession/nonbinary/noprofession_nonbinary_loAGI_0482.png
|
||||
no_profession/nonbinary/noprofession_nonbinary_loAGI_4731.png
|
||||
no_profession/nonbinary/noprofession_nonbinary_loAMB_4061.png
|
||||
no_profession/nonbinary/noprofession_nonbinary_loAMB_6363.png
|
||||
no_profession/nonbinary/noprofession_nonbinary_loBRA_5513.png
|
||||
no_profession/nonbinary/noprofession_nonbinary_loBRA_8826.png
|
||||
no_profession/nonbinary/noprofession_nonbinary_loCHA_5167.png
|
||||
no_profession/nonbinary/noprofession_nonbinary_loCHA_9387.png
|
||||
no_profession/nonbinary/noprofession_nonbinary_loCHA_9832.png
|
||||
no_profession/nonbinary/noprofession_nonbinary_loCON_6280.png
|
||||
no_profession/nonbinary/noprofession_nonbinary_loGRE_0815.png
|
||||
no_profession/nonbinary/noprofession_nonbinary_loGRE_2650.png
|
||||
no_profession/nonbinary/noprofession_nonbinary_loGRE_6903.png
|
||||
no_profession/nonbinary/noprofession_nonbinary_loGRE_9027.png
|
||||
no_profession/nonbinary/noprofession_nonbinary_loINT_1271.png
|
||||
no_profession/nonbinary/noprofession_nonbinary_loSTR_0438.png
|
||||
no_profession/nonbinary/noprofession_nonbinary_loSTR_0765.png
|
||||
no_profession/nonbinary/noprofession_nonbinary_loSTR_1432.png
|
||||
no_profession/nonbinary/noprofession_nonbinary_loSTR_6177.png
|
||||
no_profession/nonbinary/noprofession_nonbinary_loSTR_6468.png
|
||||
no_profession/nonbinary/noprofession_nonbinary_loSTR_8184.png
|
||||
no_profession/nonbinary/noprofession_nonbinary_loSTR_8464.png
|
||||
no_profession/nonbinary/noprofession_nonbinary_loSTR_9331.png
|
||||
no_profession/nonbinary/noprofession_nonbinary_loSTR_9619.png
|
||||
no_profession/nonbinary/noprofession_nonbinary_loVIG_4356.png
|
||||
no_profession/nonbinary/noprofession_nonbinary_loVIG_7182.png
|
||||
no_profession/nonbinary/noprofession_nonbinary_loWIS_8211.png
|
||||
no_profession/nonbinary/noprofession_nonbinary_loWIS_8746.png
|
||||
|
Reference in New Issue
Block a user