diff options
| author | Paul Buetow <paul@buetow.org> | 2026-04-01 14:42:00 +0300 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2026-04-01 14:42:00 +0300 |
| commit | a63552412e1bca0c742dcc4deafa86d14393d3e0 (patch) | |
| tree | 208e2496e6bbb923ca8c0629a4e6aa2b34942208 | |
| parent | 4b57c9e959a280da7b16779ab1931f8c95a868c7 (diff) | |
refactor(z5): extract shared artistic styles
| -rw-r--r-- | internal/image/openai.go | 74 | ||||
| -rw-r--r-- | internal/image/styles.go | 74 | ||||
| -rw-r--r-- | internal/image/styles_test.go | 27 |
3 files changed, 103 insertions, 72 deletions
diff --git a/internal/image/openai.go b/internal/image/openai.go index f2db41d..1df6eb7 100644 --- a/internal/image/openai.go +++ b/internal/image/openai.go @@ -244,78 +244,8 @@ func (c *OpenAIClient) createEducationalPrompt(ctx context.Context, bulgarianWor scene = "" } - // Define artistic styles - styles := []string{ - "Photorealism", "Hyperrealism", "Surrealism", "Impressionism", - "Minimalism", "Pop Art", "Art Nouveau", "Digital Art", - "Watercolor", "Oil Painting", "Pencil Sketch", "Ink Drawing", - "3D Rendering", "Low Poly Art", "Pixel Art", "Vector Art", - "Collage", "Mixed Media", "Contemporary Art", "Abstract Expressionism", - "Cubism", "Pointillism", "Fauvism", "Art Deco", - "Baroque", "Renaissance", "Romanticism", "Realism", - "Post-Impressionism", "Expressionism", "Constructivism", "Suprematism", - "Dadaism", "Futurism", "Op Art", "Kinetic Art", - "Street Art", "Graffiti Art", "Installation Art", "Land Art", - "Conceptual Art", "Performance Art", "Video Art", "Net Art", - "Generative Art", "Algorithmic Art", "Fractal Art", "Glitch Art", - "Vaporwave", "Synthwave", "Cyberpunk", "Steampunk", - "Fantasy Art", "Science Fiction Art", "Horror Art", "Gothic Art", - "Anime", "Manga", "Comic Book Art", "Cartoon", - "Caricature", "Editorial Illustration", "Children's Book Illustration", "Fashion Illustration", - "Architectural Rendering", "Technical Illustration", "Scientific Illustration", "Medical Illustration", - "Botanical Illustration", "Zoological Illustration", "Astronomical Art", "Paleoart", - "Infographic", "Data Visualization", "Typography Art", "Calligraphy", - "Mosaic", "Stained Glass", "Tapestry", "Embroidery", - "Sculpture", "Ceramics", "Pottery", "Glass Art", - "Metalwork", "Jewelry Design", "Woodcarving", "Paper Art", - "Origami", "Kirigami", "Quilling", "Book Art", - "Photography", "Documentary Photography", "Portrait Photography", "Landscape Photography", - "Macro Photography", "Aerial Photography", "Underwater Photography", "Astrophotography", - "Film Noir", "Vintage Photography", "Polaroid", "Double Exposure", - "HDR Photography", "Long Exposure", "Tilt-Shift", "Infrared Photography", - "Monochrome", "Sepia Tone", "Cross-Processing", "Cyanotype", - "Folk Art", "Outsider Art", "Naive Art", "Aboriginal Art", - "African Art", "Asian Art", "Islamic Art", "Celtic Art", - "Byzantine Art", "Medieval Art", "Pre-Columbian Art", "Ancient Egyptian Art", - "Ancient Greek Art", "Ancient Roman Art", "Cave Painting", "Petroglyphs", - "Bauhaus", "De Stijl", "Vienna Secession", "Arts and Crafts Movement", - "Prairie School", "International Style", "Brutalism", "Deconstructivism", - "Parametric Design", "Biomimicry", "Sustainable Design", "Universal Design", - "Retro Futurism", "Dieselpunk", "Atompunk", "Biopunk", - "Afrofuturism", "Solarpunk", "Post-Apocalyptic", "Dystopian Art", - "Psychedelic Art", "Visionary Art", "Lowbrow Art", "Outsider Art", - "Trompe-l'oeil", "Anamorphic Art", "Optical Illusion", "Impossible Objects", - "Sacred Geometry", "Mandala", "Yantra", "Celtic Knots", - "Stippling", "Hatching", "Cross-Hatching", "Scumbling", - "Impasto", "Glazing", "Scumbling", "Sgraffito", - "Encaustic", "Fresco", "Tempera", "Gouache", - "Pastel", "Charcoal", "Conte", "Silverpoint", - "Linocut", "Woodcut", "Etching", "Lithography", - "Screen Printing", "Monotype", "Collagraph", "Digital Print", - "Augmented Reality Art", "Virtual Reality Art", "Interactive Art", "Projection Mapping", - "Light Art", "Neon Art", "Holographic Art", "Laser Art", - "Sound Art", "Bio Art", "Eco Art", "Social Practice Art", - "Relational Aesthetics", "Participatory Art", "Community Art", "Activist Art", - "Feminist Art", "Queer Art", "Postcolonial Art", "Decolonial Art", - "Metamodernism", "Post-Internet Art", "Post-Digital Art", "New Aesthetic", - "Speculative Design", "Critical Design", "Design Fiction", "Adversarial Design", - "Transitional Design", "Transformation Design", "Service Design", "Experience Design", - "Slow Design", "Emotional Design", "Inclusive Design", "Regenerative Design", - "Biophilic Design", "Cradle to Cradle", "Circular Design", "Zero Waste Design", - "Modular Design", "Open Design", "Co-Design", "Participatory Design", - "Flat Design", "Material Design", "Neumorphism", "Glassmorphism", - "Maximalism", "Eclecticism", "Kitsch", "Camp", - "Wabi-Sabi", "Hygge", "Lagom", "Ikigai", - "Feng Shui", "Vastu Shastra", "Sacred Architecture", "Organic Architecture", - "Vernacular Architecture", "Adaptive Reuse", "Green Architecture", "Living Architecture", - "Kinetic Architecture", "Responsive Architecture", "Parametric Architecture", "Algorithmic Architecture", - "Blob Architecture", "Deconstructivist Architecture", "High-Tech Architecture", "Neo-Futurism", - "Critical Regionalism", "Tropical Modernism", "Desert Modernism", "Scandinavian Design", - "Japanese Design", "Italian Design", "German Design", "Dutch Design", - "Memphis Group", "Radical Design", "Anti-Design", "Superstudio", - "Archigram", "Metabolism", "Structuralism", "Postmodernism", - "Minimalist Photography", "Conceptual Photography", "Staged Photography", "Candid Photography", - } + // Copy the shared styles before shuffling so the package-level list stays stable. + styles := append([]string(nil), ArtisticStyles...) // Shuffle the styles to avoid bias rand.Shuffle(len(styles), func(i, j int) { diff --git a/internal/image/styles.go b/internal/image/styles.go new file mode 100644 index 0000000..a88bb69 --- /dev/null +++ b/internal/image/styles.go @@ -0,0 +1,74 @@ +package image + +// ArtisticStyles contains the shared pool of artistic styles used for image prompts. +var ArtisticStyles = []string{ + "Photorealism", "Hyperrealism", "Surrealism", "Impressionism", + "Minimalism", "Pop Art", "Art Nouveau", "Digital Art", + "Watercolor", "Oil Painting", "Pencil Sketch", "Ink Drawing", + "3D Rendering", "Low Poly Art", "Pixel Art", "Vector Art", + "Collage", "Mixed Media", "Contemporary Art", "Abstract Expressionism", + "Cubism", "Pointillism", "Fauvism", "Art Deco", + "Baroque", "Renaissance", "Romanticism", "Realism", + "Post-Impressionism", "Expressionism", "Constructivism", "Suprematism", + "Dadaism", "Futurism", "Op Art", "Kinetic Art", + "Street Art", "Graffiti Art", "Installation Art", "Land Art", + "Conceptual Art", "Performance Art", "Video Art", "Net Art", + "Generative Art", "Algorithmic Art", "Fractal Art", "Glitch Art", + "Vaporwave", "Synthwave", "Cyberpunk", "Steampunk", + "Fantasy Art", "Science Fiction Art", "Horror Art", "Gothic Art", + "Anime", "Manga", "Comic Book Art", "Cartoon", + "Caricature", "Editorial Illustration", "Children's Book Illustration", "Fashion Illustration", + "Architectural Rendering", "Technical Illustration", "Scientific Illustration", "Medical Illustration", + "Botanical Illustration", "Zoological Illustration", "Astronomical Art", "Paleoart", + "Infographic", "Data Visualization", "Typography Art", "Calligraphy", + "Mosaic", "Stained Glass", "Tapestry", "Embroidery", + "Sculpture", "Ceramics", "Pottery", "Glass Art", + "Metalwork", "Jewelry Design", "Woodcarving", "Paper Art", + "Origami", "Kirigami", "Quilling", "Book Art", + "Photography", "Documentary Photography", "Portrait Photography", "Landscape Photography", + "Macro Photography", "Aerial Photography", "Underwater Photography", "Astrophotography", + "Film Noir", "Vintage Photography", "Polaroid", "Double Exposure", + "HDR Photography", "Long Exposure", "Tilt-Shift", "Infrared Photography", + "Monochrome", "Sepia Tone", "Cross-Processing", "Cyanotype", + "Folk Art", "Outsider Art", "Naive Art", "Aboriginal Art", + "African Art", "Asian Art", "Islamic Art", "Celtic Art", + "Byzantine Art", "Medieval Art", "Pre-Columbian Art", "Ancient Egyptian Art", + "Ancient Greek Art", "Ancient Roman Art", "Cave Painting", "Petroglyphs", + "Bauhaus", "De Stijl", "Vienna Secession", "Arts and Crafts Movement", + "Prairie School", "International Style", "Brutalism", "Deconstructivism", + "Parametric Design", "Biomimicry", "Sustainable Design", "Universal Design", + "Retro Futurism", "Dieselpunk", "Atompunk", "Biopunk", + "Afrofuturism", "Solarpunk", "Post-Apocalyptic", "Dystopian Art", + "Psychedelic Art", "Visionary Art", "Lowbrow Art", "Outsider Art", + "Trompe-l'oeil", "Anamorphic Art", "Optical Illusion", "Impossible Objects", + "Sacred Geometry", "Mandala", "Yantra", "Celtic Knots", + "Stippling", "Hatching", "Cross-Hatching", "Scumbling", + "Impasto", "Glazing", "Scumbling", "Sgraffito", + "Encaustic", "Fresco", "Tempera", "Gouache", + "Pastel", "Charcoal", "Conte", "Silverpoint", + "Linocut", "Woodcut", "Etching", "Lithography", + "Screen Printing", "Monotype", "Collagraph", "Digital Print", + "Augmented Reality Art", "Virtual Reality Art", "Interactive Art", "Projection Mapping", + "Light Art", "Neon Art", "Holographic Art", "Laser Art", + "Sound Art", "Bio Art", "Eco Art", "Social Practice Art", + "Relational Aesthetics", "Participatory Art", "Community Art", "Activist Art", + "Feminist Art", "Queer Art", "Postcolonial Art", "Decolonial Art", + "Metamodernism", "Post-Internet Art", "Post-Digital Art", "New Aesthetic", + "Speculative Design", "Critical Design", "Design Fiction", "Adversarial Design", + "Transitional Design", "Transformation Design", "Service Design", "Experience Design", + "Slow Design", "Emotional Design", "Inclusive Design", "Regenerative Design", + "Biophilic Design", "Cradle to Cradle", "Circular Design", "Zero Waste Design", + "Modular Design", "Open Design", "Co-Design", "Participatory Design", + "Flat Design", "Material Design", "Neumorphism", "Glassmorphism", + "Maximalism", "Eclecticism", "Kitsch", "Camp", + "Wabi-Sabi", "Hygge", "Lagom", "Ikigai", + "Feng Shui", "Vastu Shastra", "Sacred Architecture", "Organic Architecture", + "Vernacular Architecture", "Adaptive Reuse", "Green Architecture", "Living Architecture", + "Kinetic Architecture", "Responsive Architecture", "Parametric Architecture", "Algorithmic Architecture", + "Blob Architecture", "Deconstructivist Architecture", "High-Tech Architecture", "Neo-Futurism", + "Critical Regionalism", "Tropical Modernism", "Desert Modernism", "Scandinavian Design", + "Japanese Design", "Italian Design", "German Design", "Dutch Design", + "Memphis Group", "Radical Design", "Anti-Design", "Superstudio", + "Archigram", "Metabolism", "Structuralism", "Postmodernism", + "Minimalist Photography", "Conceptual Photography", "Staged Photography", "Candid Photography", +} diff --git a/internal/image/styles_test.go b/internal/image/styles_test.go new file mode 100644 index 0000000..8eeb7c1 --- /dev/null +++ b/internal/image/styles_test.go @@ -0,0 +1,27 @@ +package image + +import "testing" + +func TestArtisticStyles(t *testing.T) { + if len(ArtisticStyles) == 0 { + t.Fatal("ArtisticStyles should not be empty") + } + + if !hasStyle(ArtisticStyles, "Photorealism") { + t.Fatal(`ArtisticStyles should include "Photorealism"`) + } + + if !hasStyle(ArtisticStyles, "Candid Photography") { + t.Fatal(`ArtisticStyles should include "Candid Photography"`) + } +} + +func hasStyle(styles []string, want string) bool { + for _, style := range styles { + if style == want { + return true + } + } + + return false +} |
