diff --git a/assets/images/bosses/ancient_tree.png b/assets/images/bosses/ancient_tree.png new file mode 100644 index 000000000..fead9cb47 Binary files /dev/null and b/assets/images/bosses/ancient_tree.png differ diff --git a/assets/images/bosses/fire_dragon.png b/assets/images/bosses/fire_dragon.png new file mode 100644 index 000000000..ec7d1106a Binary files /dev/null and b/assets/images/bosses/fire_dragon.png differ diff --git a/assets/images/bosses/giant_troll_king.png b/assets/images/bosses/giant_troll_king.png new file mode 100644 index 000000000..df4156277 Binary files /dev/null and b/assets/images/bosses/giant_troll_king.png differ diff --git a/assets/images/bosses/ice_titan.png b/assets/images/bosses/ice_titan.png new file mode 100644 index 000000000..5d9ef9ad5 Binary files /dev/null and b/assets/images/bosses/ice_titan.png differ diff --git a/assets/images/bosses/mutant_king.png b/assets/images/bosses/mutant_king.png new file mode 100644 index 000000000..30badea38 Binary files /dev/null and b/assets/images/bosses/mutant_king.png differ diff --git a/assets/images/bosses/zombie_leader.png b/assets/images/bosses/zombie_leader.png new file mode 100644 index 000000000..6701636c2 Binary files /dev/null and b/assets/images/bosses/zombie_leader.png differ diff --git a/assets/images/buildings/barn.png b/assets/images/buildings/barn.png new file mode 100644 index 000000000..b20446eca Binary files /dev/null and b/assets/images/buildings/barn.png differ diff --git a/assets/images/buildings/chest_wood.png b/assets/images/buildings/chest_wood.png new file mode 100644 index 000000000..207219e72 Binary files /dev/null and b/assets/images/buildings/chest_wood.png differ diff --git a/assets/images/buildings/coop.png b/assets/images/buildings/coop.png new file mode 100644 index 000000000..d44d62183 Binary files /dev/null and b/assets/images/buildings/coop.png differ diff --git a/assets/images/buildings/player_house.png b/assets/images/buildings/player_house.png new file mode 100644 index 000000000..d631ac89b Binary files /dev/null and b/assets/images/buildings/player_house.png differ diff --git a/assets/images/buildings/shed.png b/assets/images/buildings/shed.png new file mode 100644 index 000000000..0c7bff650 Binary files /dev/null and b/assets/images/buildings/shed.png differ diff --git a/assets/images/buildings/well.png b/assets/images/buildings/well.png new file mode 100644 index 000000000..41ce8fd29 Binary files /dev/null and b/assets/images/buildings/well.png differ diff --git a/assets/images/crops/carrot_stage1.png b/assets/images/crops/carrot_stage1.png new file mode 100644 index 000000000..461c3d4c0 Binary files /dev/null and b/assets/images/crops/carrot_stage1.png differ diff --git a/assets/images/crops/carrot_stage2.png b/assets/images/crops/carrot_stage2.png new file mode 100644 index 000000000..cde6055b4 Binary files /dev/null and b/assets/images/crops/carrot_stage2.png differ diff --git a/assets/images/crops/carrot_stage3.png b/assets/images/crops/carrot_stage3.png new file mode 100644 index 000000000..9940410c2 Binary files /dev/null and b/assets/images/crops/carrot_stage3.png differ diff --git a/assets/images/crops/carrot_stage4.png b/assets/images/crops/carrot_stage4.png new file mode 100644 index 000000000..3ddfc17d3 Binary files /dev/null and b/assets/images/crops/carrot_stage4.png differ diff --git a/assets/images/crops/corn_stage1.png b/assets/images/crops/corn_stage1.png new file mode 100644 index 000000000..3074939bf Binary files /dev/null and b/assets/images/crops/corn_stage1.png differ diff --git a/assets/images/crops/corn_stage2.png b/assets/images/crops/corn_stage2.png new file mode 100644 index 000000000..c5dd37f37 Binary files /dev/null and b/assets/images/crops/corn_stage2.png differ diff --git a/assets/images/crops/corn_stage3.png b/assets/images/crops/corn_stage3.png new file mode 100644 index 000000000..5d402362b Binary files /dev/null and b/assets/images/crops/corn_stage3.png differ diff --git a/assets/images/crops/corn_stage4.png b/assets/images/crops/corn_stage4.png new file mode 100644 index 000000000..d6cae4672 Binary files /dev/null and b/assets/images/crops/corn_stage4.png differ diff --git a/assets/images/crops/potato_stage1.png b/assets/images/crops/potato_stage1.png new file mode 100644 index 000000000..399609bbf Binary files /dev/null and b/assets/images/crops/potato_stage1.png differ diff --git a/assets/images/crops/potato_stage2.png b/assets/images/crops/potato_stage2.png new file mode 100644 index 000000000..39267c8e6 Binary files /dev/null and b/assets/images/crops/potato_stage2.png differ diff --git a/assets/images/crops/potato_stage3.png b/assets/images/crops/potato_stage3.png new file mode 100644 index 000000000..092846de8 Binary files /dev/null and b/assets/images/crops/potato_stage3.png differ diff --git a/assets/images/crops/potato_stage4.png b/assets/images/crops/potato_stage4.png new file mode 100644 index 000000000..1fae8eeb3 Binary files /dev/null and b/assets/images/crops/potato_stage4.png differ diff --git a/assets/images/crops/strawberry_stage1.png b/assets/images/crops/strawberry_stage1.png new file mode 100644 index 000000000..c8dab2fc3 Binary files /dev/null and b/assets/images/crops/strawberry_stage1.png differ diff --git a/assets/images/crops/strawberry_stage2.png b/assets/images/crops/strawberry_stage2.png new file mode 100644 index 000000000..dc66c6410 Binary files /dev/null and b/assets/images/crops/strawberry_stage2.png differ diff --git a/assets/images/crops/strawberry_stage3.png b/assets/images/crops/strawberry_stage3.png new file mode 100644 index 000000000..58e62e742 Binary files /dev/null and b/assets/images/crops/strawberry_stage3.png differ diff --git a/assets/images/crops/strawberry_stage4.png b/assets/images/crops/strawberry_stage4.png new file mode 100644 index 000000000..c41ba0855 Binary files /dev/null and b/assets/images/crops/strawberry_stage4.png differ diff --git a/assets/images/crops/tomato_stage1.png b/assets/images/crops/tomato_stage1.png new file mode 100644 index 000000000..4b1599c02 Binary files /dev/null and b/assets/images/crops/tomato_stage1.png differ diff --git a/assets/images/crops/tomato_stage2.png b/assets/images/crops/tomato_stage2.png new file mode 100644 index 000000000..429473a86 Binary files /dev/null and b/assets/images/crops/tomato_stage2.png differ diff --git a/assets/images/crops/tomato_stage3.png b/assets/images/crops/tomato_stage3.png new file mode 100644 index 000000000..570b2a429 Binary files /dev/null and b/assets/images/crops/tomato_stage3.png differ diff --git a/assets/images/crops/tomato_stage4.png b/assets/images/crops/tomato_stage4.png new file mode 100644 index 000000000..70518a663 Binary files /dev/null and b/assets/images/crops/tomato_stage4.png differ diff --git a/assets/images/crops/tomato_stage5.png b/assets/images/crops/tomato_stage5.png new file mode 100644 index 000000000..3bcba5b65 Binary files /dev/null and b/assets/images/crops/tomato_stage5.png differ diff --git a/assets/images/crops/wheat_stage1.png b/assets/images/crops/wheat_stage1.png new file mode 100644 index 000000000..ffcd0b319 Binary files /dev/null and b/assets/images/crops/wheat_stage1.png differ diff --git a/assets/images/crops/wheat_stage2.png b/assets/images/crops/wheat_stage2.png new file mode 100644 index 000000000..931e59e38 Binary files /dev/null and b/assets/images/crops/wheat_stage2.png differ diff --git a/assets/images/crops/wheat_stage3.png b/assets/images/crops/wheat_stage3.png new file mode 100644 index 000000000..e0a98f173 Binary files /dev/null and b/assets/images/crops/wheat_stage3.png differ diff --git a/assets/images/crops/wheat_stage4.png b/assets/images/crops/wheat_stage4.png new file mode 100644 index 000000000..26ff5c583 Binary files /dev/null and b/assets/images/crops/wheat_stage4.png differ diff --git a/assets/images/environment/bush.png b/assets/images/environment/bush.png new file mode 100644 index 000000000..3cf478e48 Binary files /dev/null and b/assets/images/environment/bush.png differ diff --git a/assets/images/environment/grass_tile.png b/assets/images/environment/grass_tile.png new file mode 100644 index 000000000..6b427027b Binary files /dev/null and b/assets/images/environment/grass_tile.png differ diff --git a/assets/images/environment/lava_tile.png b/assets/images/environment/lava_tile.png new file mode 100644 index 000000000..34bf160b7 Binary files /dev/null and b/assets/images/environment/lava_tile.png differ diff --git a/assets/images/environment/mushroom_brown.png b/assets/images/environment/mushroom_brown.png new file mode 100644 index 000000000..89979ba9c Binary files /dev/null and b/assets/images/environment/mushroom_brown.png differ diff --git a/assets/images/environment/pine_tree.png b/assets/images/environment/pine_tree.png new file mode 100644 index 000000000..46d328ecf Binary files /dev/null and b/assets/images/environment/pine_tree.png differ diff --git a/assets/images/environment/rock_boulder.png b/assets/images/environment/rock_boulder.png new file mode 100644 index 000000000..b00e9eb96 Binary files /dev/null and b/assets/images/environment/rock_boulder.png differ diff --git a/assets/images/environment/sand_tile.png b/assets/images/environment/sand_tile.png new file mode 100644 index 000000000..2e4a8fe13 Binary files /dev/null and b/assets/images/environment/sand_tile.png differ diff --git a/assets/images/environment/signpost.png b/assets/images/environment/signpost.png new file mode 100644 index 000000000..f223dd02b Binary files /dev/null and b/assets/images/environment/signpost.png differ diff --git a/assets/images/environment/snow_tile.png b/assets/images/environment/snow_tile.png new file mode 100644 index 000000000..5d788ce3e Binary files /dev/null and b/assets/images/environment/snow_tile.png differ diff --git a/assets/images/environment/soil_tilled.png b/assets/images/environment/soil_tilled.png new file mode 100644 index 000000000..42bdc928c Binary files /dev/null and b/assets/images/environment/soil_tilled.png differ diff --git a/assets/images/environment/stone_path.png b/assets/images/environment/stone_path.png new file mode 100644 index 000000000..c158a3734 Binary files /dev/null and b/assets/images/environment/stone_path.png differ diff --git a/assets/images/environment/tree_oak.png b/assets/images/environment/tree_oak.png new file mode 100644 index 000000000..7c9548169 Binary files /dev/null and b/assets/images/environment/tree_oak.png differ diff --git a/assets/images/environment/tulip_red.png b/assets/images/environment/tulip_red.png new file mode 100644 index 000000000..c85e038c9 Binary files /dev/null and b/assets/images/environment/tulip_red.png differ diff --git a/assets/images/environment/water_tile.png b/assets/images/environment/water_tile.png new file mode 100644 index 000000000..b912e0a00 Binary files /dev/null and b/assets/images/environment/water_tile.png differ diff --git a/assets/images/items/arrow_explosive.png b/assets/images/items/arrow_explosive.png new file mode 100644 index 000000000..7757060de Binary files /dev/null and b/assets/images/items/arrow_explosive.png differ diff --git a/assets/images/items/arrow_fire.png b/assets/images/items/arrow_fire.png new file mode 100644 index 000000000..4b6853287 Binary files /dev/null and b/assets/images/items/arrow_fire.png differ diff --git a/assets/images/items/arrow_healing.png b/assets/images/items/arrow_healing.png new file mode 100644 index 000000000..0e6262a77 Binary files /dev/null and b/assets/images/items/arrow_healing.png differ diff --git a/assets/images/items/arrow_ice.png b/assets/images/items/arrow_ice.png new file mode 100644 index 000000000..825e38396 Binary files /dev/null and b/assets/images/items/arrow_ice.png differ diff --git a/assets/images/items/arrow_lightning.png b/assets/images/items/arrow_lightning.png new file mode 100644 index 000000000..5c81a27b9 Binary files /dev/null and b/assets/images/items/arrow_lightning.png differ diff --git a/assets/images/items/arrow_poison.png b/assets/images/items/arrow_poison.png new file mode 100644 index 000000000..794ff57a9 Binary files /dev/null and b/assets/images/items/arrow_poison.png differ diff --git a/assets/images/items/axe_iron.png b/assets/images/items/axe_iron.png new file mode 100644 index 000000000..a2cdba382 Binary files /dev/null and b/assets/images/items/axe_iron.png differ diff --git a/assets/images/items/axe_silver.png b/assets/images/items/axe_silver.png new file mode 100644 index 000000000..06e4765c3 Binary files /dev/null and b/assets/images/items/axe_silver.png differ diff --git a/assets/images/items/bow_enchanted.png b/assets/images/items/bow_enchanted.png new file mode 100644 index 000000000..c1bac631a Binary files /dev/null and b/assets/images/items/bow_enchanted.png differ diff --git a/assets/images/items/bow_gold.png b/assets/images/items/bow_gold.png new file mode 100644 index 000000000..384d11ad5 Binary files /dev/null and b/assets/images/items/bow_gold.png differ diff --git a/assets/images/items/bow_silver.png b/assets/images/items/bow_silver.png new file mode 100644 index 000000000..1bc7bebcc Binary files /dev/null and b/assets/images/items/bow_silver.png differ diff --git a/assets/images/items/bow_wooden.png b/assets/images/items/bow_wooden.png new file mode 100644 index 000000000..100c14e8b Binary files /dev/null and b/assets/images/items/bow_wooden.png differ diff --git a/assets/images/items/fence_wood.png b/assets/images/items/fence_wood.png new file mode 100644 index 000000000..8d6cdaa49 Binary files /dev/null and b/assets/images/items/fence_wood.png differ diff --git a/assets/images/items/furnace.png b/assets/images/items/furnace.png new file mode 100644 index 000000000..52d1858f5 Binary files /dev/null and b/assets/images/items/furnace.png differ diff --git a/assets/images/items/gate_wood.png b/assets/images/items/gate_wood.png new file mode 100644 index 000000000..9777cf70a Binary files /dev/null and b/assets/images/items/gate_wood.png differ diff --git a/assets/images/items/hoe_iron.png b/assets/images/items/hoe_iron.png new file mode 100644 index 000000000..7b6a18bde Binary files /dev/null and b/assets/images/items/hoe_iron.png differ diff --git a/assets/images/items/mushroom_magic.png b/assets/images/items/mushroom_magic.png new file mode 100644 index 000000000..224a42ea6 Binary files /dev/null and b/assets/images/items/mushroom_magic.png differ diff --git a/assets/images/items/pickaxe_gold.png b/assets/images/items/pickaxe_gold.png new file mode 100644 index 000000000..b0c44250f Binary files /dev/null and b/assets/images/items/pickaxe_gold.png differ diff --git a/assets/images/items/pickaxe_iron.png b/assets/images/items/pickaxe_iron.png new file mode 100644 index 000000000..a8dd6197c Binary files /dev/null and b/assets/images/items/pickaxe_iron.png differ diff --git a/assets/images/items/sprinkler_basic.png b/assets/images/items/sprinkler_basic.png new file mode 100644 index 000000000..0694b66a5 Binary files /dev/null and b/assets/images/items/sprinkler_basic.png differ diff --git a/assets/images/items/sprinkler_iridium.png b/assets/images/items/sprinkler_iridium.png new file mode 100644 index 000000000..3266249c8 Binary files /dev/null and b/assets/images/items/sprinkler_iridium.png differ diff --git a/assets/images/items/sprinkler_quality.png b/assets/images/items/sprinkler_quality.png new file mode 100644 index 000000000..bd9d8cbde Binary files /dev/null and b/assets/images/items/sprinkler_quality.png differ diff --git a/assets/images/items/vape_liquid_rainbow.png b/assets/images/items/vape_liquid_rainbow.png new file mode 100644 index 000000000..d3d077345 Binary files /dev/null and b/assets/images/items/vape_liquid_rainbow.png differ diff --git a/assets/images/items/water_tower.png b/assets/images/items/water_tower.png new file mode 100644 index 000000000..b8ea4c72a Binary files /dev/null and b/assets/images/items/water_tower.png differ diff --git a/assets/images/items/watering_can.png b/assets/images/items/watering_can.png new file mode 100644 index 000000000..bbfb1050a Binary files /dev/null and b/assets/images/items/watering_can.png differ diff --git a/assets/images/mutanti/elf_forest.png b/assets/images/mutanti/elf_forest.png new file mode 100644 index 000000000..3af1d0118 Binary files /dev/null and b/assets/images/mutanti/elf_forest.png differ diff --git a/assets/images/mutanti/ghost.png b/assets/images/mutanti/ghost.png new file mode 100644 index 000000000..c60c9275a Binary files /dev/null and b/assets/images/mutanti/ghost.png differ diff --git a/assets/images/mutanti/gnome_garden.png b/assets/images/mutanti/gnome_garden.png new file mode 100644 index 000000000..f674e1751 Binary files /dev/null and b/assets/images/mutanti/gnome_garden.png differ diff --git a/assets/images/mutanti/griffin.png b/assets/images/mutanti/griffin.png new file mode 100644 index 000000000..93857d49e Binary files /dev/null and b/assets/images/mutanti/griffin.png differ diff --git a/assets/images/mutanti/slime_black.png b/assets/images/mutanti/slime_black.png new file mode 100644 index 000000000..d7922de5f Binary files /dev/null and b/assets/images/mutanti/slime_black.png differ diff --git a/assets/images/mutanti/slime_blue.png b/assets/images/mutanti/slime_blue.png new file mode 100644 index 000000000..ef3a87119 Binary files /dev/null and b/assets/images/mutanti/slime_blue.png differ diff --git a/assets/images/mutanti/slime_green.png b/assets/images/mutanti/slime_green.png new file mode 100644 index 000000000..8990a9b73 Binary files /dev/null and b/assets/images/mutanti/slime_green.png differ diff --git a/assets/images/mutanti/slime_king_boss.png b/assets/images/mutanti/slime_king_boss.png new file mode 100644 index 000000000..9c9714407 Binary files /dev/null and b/assets/images/mutanti/slime_king_boss.png differ diff --git a/assets/images/mutanti/slime_purple.png b/assets/images/mutanti/slime_purple.png new file mode 100644 index 000000000..098ef5399 Binary files /dev/null and b/assets/images/mutanti/slime_purple.png differ diff --git a/assets/images/mutanti/slime_rainbow.png b/assets/images/mutanti/slime_rainbow.png new file mode 100644 index 000000000..35f4aefe7 Binary files /dev/null and b/assets/images/mutanti/slime_rainbow.png differ diff --git a/assets/images/mutanti/slime_red.png b/assets/images/mutanti/slime_red.png new file mode 100644 index 000000000..36b9b8c36 Binary files /dev/null and b/assets/images/mutanti/slime_red.png differ diff --git a/assets/images/mutanti/slime_yellow.png b/assets/images/mutanti/slime_yellow.png new file mode 100644 index 000000000..29dfaee12 Binary files /dev/null and b/assets/images/mutanti/slime_yellow.png differ diff --git a/assets/images/mutanti/werewolf.png b/assets/images/mutanti/werewolf.png new file mode 100644 index 000000000..2360b56e9 Binary files /dev/null and b/assets/images/mutanti/werewolf.png differ diff --git a/assets/images/npcs/ana_twin.png b/assets/images/npcs/ana_twin.png new file mode 100644 index 000000000..553c4bcaa Binary files /dev/null and b/assets/images/npcs/ana_twin.png differ diff --git a/assets/images/npcs/damjan_carpenter.png b/assets/images/npcs/damjan_carpenter.png new file mode 100644 index 000000000..6821d4eb4 Binary files /dev/null and b/assets/images/npcs/damjan_carpenter.png differ diff --git a/assets/images/npcs/dr_chen.png b/assets/images/npcs/dr_chen.png new file mode 100644 index 000000000..aeba0a3cd Binary files /dev/null and b/assets/images/npcs/dr_chen.png differ diff --git a/assets/images/npcs/elena_librarian.png b/assets/images/npcs/elena_librarian.png new file mode 100644 index 000000000..c5de5a0ab Binary files /dev/null and b/assets/images/npcs/elena_librarian.png differ diff --git a/assets/images/npcs/erik_musician.png b/assets/images/npcs/erik_musician.png new file mode 100644 index 000000000..41acf0d8d Binary files /dev/null and b/assets/images/npcs/erik_musician.png differ diff --git a/assets/images/npcs/filip_athlete.png b/assets/images/npcs/filip_athlete.png new file mode 100644 index 000000000..3ad0fad38 Binary files /dev/null and b/assets/images/npcs/filip_athlete.png differ diff --git a/assets/images/npcs/gregor_miner.png b/assets/images/npcs/gregor_miner.png new file mode 100644 index 000000000..102d209b7 Binary files /dev/null and b/assets/images/npcs/gregor_miner.png differ diff --git a/assets/images/npcs/grok_alpha_troll.png b/assets/images/npcs/grok_alpha_troll.png new file mode 100644 index 000000000..36f87cd6d Binary files /dev/null and b/assets/images/npcs/grok_alpha_troll.png differ diff --git a/assets/images/npcs/ivan_blacksmith.png b/assets/images/npcs/ivan_blacksmith.png new file mode 100644 index 000000000..278e5b2b0 Binary files /dev/null and b/assets/images/npcs/ivan_blacksmith.png differ diff --git a/assets/images/npcs/kai_protagonist.png b/assets/images/npcs/kai_protagonist.png new file mode 100644 index 000000000..e9d851ef9 Binary files /dev/null and b/assets/images/npcs/kai_protagonist.png differ diff --git a/assets/images/npcs/katarina_healer.png b/assets/images/npcs/katarina_healer.png new file mode 100644 index 000000000..40fda84e0 Binary files /dev/null and b/assets/images/npcs/katarina_healer.png differ diff --git a/assets/images/npcs/lena_merchant.png b/assets/images/npcs/lena_merchant.png new file mode 100644 index 000000000..33f3f08a1 Binary files /dev/null and b/assets/images/npcs/lena_merchant.png differ diff --git a/assets/images/npcs/luka_fisherman.png b/assets/images/npcs/luka_fisherman.png new file mode 100644 index 000000000..859dbe7f0 Binary files /dev/null and b/assets/images/npcs/luka_fisherman.png differ diff --git a/assets/images/npcs/marija_baker.png b/assets/images/npcs/marija_baker.png new file mode 100644 index 000000000..3add08adc Binary files /dev/null and b/assets/images/npcs/marija_baker.png differ diff --git a/assets/images/npcs/mateo_artist.png b/assets/images/npcs/mateo_artist.png new file mode 100644 index 000000000..a68faf911 Binary files /dev/null and b/assets/images/npcs/mateo_artist.png differ diff --git a/assets/images/npcs/mira_chef.png b/assets/images/npcs/mira_chef.png new file mode 100644 index 000000000..95836e93b Binary files /dev/null and b/assets/images/npcs/mira_chef.png differ diff --git a/assets/images/npcs/nikola_scholar.png b/assets/images/npcs/nikola_scholar.png new file mode 100644 index 000000000..b471ac3b9 Binary files /dev/null and b/assets/images/npcs/nikola_scholar.png differ diff --git a/assets/images/npcs/petra_farmer.png b/assets/images/npcs/petra_farmer.png new file mode 100644 index 000000000..8c30089c3 Binary files /dev/null and b/assets/images/npcs/petra_farmer.png differ diff --git a/assets/images/npcs/sonya_warrior.png b/assets/images/npcs/sonya_warrior.png new file mode 100644 index 000000000..c6df4e0b8 Binary files /dev/null and b/assets/images/npcs/sonya_warrior.png differ diff --git a/assets/images/plants/mesojedka_stage1.png b/assets/images/plants/mesojedka_stage1.png new file mode 100644 index 000000000..f78e2f890 Binary files /dev/null and b/assets/images/plants/mesojedka_stage1.png differ diff --git a/assets/images/plants/mesojedka_stage2.png b/assets/images/plants/mesojedka_stage2.png new file mode 100644 index 000000000..1dd11b164 Binary files /dev/null and b/assets/images/plants/mesojedka_stage2.png differ diff --git a/assets/images/plants/mesojedka_stage3.png b/assets/images/plants/mesojedka_stage3.png new file mode 100644 index 000000000..e820b5d7e Binary files /dev/null and b/assets/images/plants/mesojedka_stage3.png differ diff --git a/assets/images/plants/mesojedka_stage4.png b/assets/images/plants/mesojedka_stage4.png new file mode 100644 index 000000000..4761c81ef Binary files /dev/null and b/assets/images/plants/mesojedka_stage4.png differ diff --git a/assets/images/plants/mesojedka_stage5.png b/assets/images/plants/mesojedka_stage5.png new file mode 100644 index 000000000..8591fe809 Binary files /dev/null and b/assets/images/plants/mesojedka_stage5.png differ diff --git a/assets/images/ui/icon_energy.png b/assets/images/ui/icon_energy.png new file mode 100644 index 000000000..c376f0d54 Binary files /dev/null and b/assets/images/ui/icon_energy.png differ diff --git a/assets/images/ui/icon_health.png b/assets/images/ui/icon_health.png new file mode 100644 index 000000000..008365c89 Binary files /dev/null and b/assets/images/ui/icon_health.png differ diff --git a/assets/images/ui/icon_inventory.png b/assets/images/ui/icon_inventory.png new file mode 100644 index 000000000..7004026af Binary files /dev/null and b/assets/images/ui/icon_inventory.png differ diff --git a/assets/images/ui/icon_money.png b/assets/images/ui/icon_money.png new file mode 100644 index 000000000..3fd1a24f6 Binary files /dev/null and b/assets/images/ui/icon_money.png differ diff --git a/assets/images/workstations/campfire.png b/assets/images/workstations/campfire.png new file mode 100644 index 000000000..9af4defa7 Binary files /dev/null and b/assets/images/workstations/campfire.png differ diff --git a/assets/images/workstations/mint.png b/assets/images/workstations/mint.png new file mode 100644 index 000000000..e0ffdf21e Binary files /dev/null and b/assets/images/workstations/mint.png differ diff --git a/assets/images/workstations/tailoring_table.png b/assets/images/workstations/tailoring_table.png new file mode 100644 index 000000000..ada71354a Binary files /dev/null and b/assets/images/workstations/tailoring_table.png differ diff --git a/assets/images/workstations/vape_lab.png b/assets/images/workstations/vape_lab.png new file mode 100644 index 000000000..89ccec319 Binary files /dev/null and b/assets/images/workstations/vape_lab.png differ diff --git a/assets/images/zivali/bear_wild.png b/assets/images/zivali/bear_wild.png new file mode 100644 index 000000000..e185930c1 Binary files /dev/null and b/assets/images/zivali/bear_wild.png differ diff --git a/assets/images/zivali/boar_wild.png b/assets/images/zivali/boar_wild.png new file mode 100644 index 000000000..0c7585b92 Binary files /dev/null and b/assets/images/zivali/boar_wild.png differ diff --git a/assets/images/zivali/chicken_normal.png b/assets/images/zivali/chicken_normal.png new file mode 100644 index 000000000..e10e2811d Binary files /dev/null and b/assets/images/zivali/chicken_normal.png differ diff --git a/assets/images/zivali/chicken_phoenix.png b/assets/images/zivali/chicken_phoenix.png new file mode 100644 index 000000000..59d2de810 Binary files /dev/null and b/assets/images/zivali/chicken_phoenix.png differ diff --git a/assets/images/zivali/chicken_rainbow.png b/assets/images/zivali/chicken_rainbow.png new file mode 100644 index 000000000..9b30c80d7 Binary files /dev/null and b/assets/images/zivali/chicken_rainbow.png differ diff --git a/assets/images/zivali/chicken_three_headed.png b/assets/images/zivali/chicken_three_headed.png new file mode 100644 index 000000000..efdb2a026 Binary files /dev/null and b/assets/images/zivali/chicken_three_headed.png differ diff --git a/assets/images/zivali/cow_mutant.png b/assets/images/zivali/cow_mutant.png new file mode 100644 index 000000000..1979a9190 Binary files /dev/null and b/assets/images/zivali/cow_mutant.png differ diff --git a/assets/images/zivali/cow_normal.png b/assets/images/zivali/cow_normal.png new file mode 100644 index 000000000..cca76221a Binary files /dev/null and b/assets/images/zivali/cow_normal.png differ diff --git a/assets/images/zivali/deer_wild.png b/assets/images/zivali/deer_wild.png new file mode 100644 index 000000000..04af19b89 Binary files /dev/null and b/assets/images/zivali/deer_wild.png differ diff --git a/assets/images/zivali/dog_corgi.png b/assets/images/zivali/dog_corgi.png new file mode 100644 index 000000000..a10cad411 Binary files /dev/null and b/assets/images/zivali/dog_corgi.png differ diff --git a/assets/images/zivali/dog_dalmatian.png b/assets/images/zivali/dog_dalmatian.png new file mode 100644 index 000000000..b756b6cbb Binary files /dev/null and b/assets/images/zivali/dog_dalmatian.png differ diff --git a/assets/images/zivali/dog_husky.png b/assets/images/zivali/dog_husky.png new file mode 100644 index 000000000..7e9819b58 Binary files /dev/null and b/assets/images/zivali/dog_husky.png differ diff --git a/assets/images/zivali/dog_retriever.png b/assets/images/zivali/dog_retriever.png new file mode 100644 index 000000000..a6f89c764 Binary files /dev/null and b/assets/images/zivali/dog_retriever.png differ diff --git a/assets/images/zivali/dog_shepherd.png b/assets/images/zivali/dog_shepherd.png new file mode 100644 index 000000000..48ae9217d Binary files /dev/null and b/assets/images/zivali/dog_shepherd.png differ diff --git a/assets/images/zivali/fish_bass.png b/assets/images/zivali/fish_bass.png new file mode 100644 index 000000000..a752e9614 Binary files /dev/null and b/assets/images/zivali/fish_bass.png differ diff --git a/assets/images/zivali/fish_golden.png b/assets/images/zivali/fish_golden.png new file mode 100644 index 000000000..a3d7df7a4 Binary files /dev/null and b/assets/images/zivali/fish_golden.png differ diff --git a/assets/images/zivali/fish_salmon.png b/assets/images/zivali/fish_salmon.png new file mode 100644 index 000000000..91909ef94 Binary files /dev/null and b/assets/images/zivali/fish_salmon.png differ diff --git a/assets/images/zivali/fish_tuna.png b/assets/images/zivali/fish_tuna.png new file mode 100644 index 000000000..8c55d23bc Binary files /dev/null and b/assets/images/zivali/fish_tuna.png differ diff --git a/assets/images/zivali/fox_wild.png b/assets/images/zivali/fox_wild.png new file mode 100644 index 000000000..54e8d4546 Binary files /dev/null and b/assets/images/zivali/fox_wild.png differ diff --git a/assets/images/zivali/goose_golden.png b/assets/images/zivali/goose_golden.png new file mode 100644 index 000000000..64d96ce26 Binary files /dev/null and b/assets/images/zivali/goose_golden.png differ diff --git a/assets/images/zivali/horse_undead.png b/assets/images/zivali/horse_undead.png new file mode 100644 index 000000000..4a86aa013 Binary files /dev/null and b/assets/images/zivali/horse_undead.png differ diff --git a/assets/images/zivali/jellyfish.png b/assets/images/zivali/jellyfish.png new file mode 100644 index 000000000..4f45ccfb9 Binary files /dev/null and b/assets/images/zivali/jellyfish.png differ diff --git a/assets/images/zivali/pig_giant.png b/assets/images/zivali/pig_giant.png new file mode 100644 index 000000000..df82ba50f Binary files /dev/null and b/assets/images/zivali/pig_giant.png differ diff --git a/assets/images/zivali/pig_normal.png b/assets/images/zivali/pig_normal.png new file mode 100644 index 000000000..87a6af106 Binary files /dev/null and b/assets/images/zivali/pig_normal.png differ diff --git a/assets/images/zivali/piranha.png b/assets/images/zivali/piranha.png new file mode 100644 index 000000000..ffab6639a Binary files /dev/null and b/assets/images/zivali/piranha.png differ diff --git a/assets/images/zivali/rabbit_wild.png b/assets/images/zivali/rabbit_wild.png new file mode 100644 index 000000000..c3e779f4c Binary files /dev/null and b/assets/images/zivali/rabbit_wild.png differ diff --git a/assets/images/zivali/sea_dragon.png b/assets/images/zivali/sea_dragon.png new file mode 100644 index 000000000..d4ca33756 Binary files /dev/null and b/assets/images/zivali/sea_dragon.png differ diff --git a/assets/images/zivali/shark_ocean.png b/assets/images/zivali/shark_ocean.png new file mode 100644 index 000000000..e21e44fb3 Binary files /dev/null and b/assets/images/zivali/shark_ocean.png differ diff --git a/assets/images/zivali/sheep_fire.png b/assets/images/zivali/sheep_fire.png new file mode 100644 index 000000000..00edbb1c6 Binary files /dev/null and b/assets/images/zivali/sheep_fire.png differ diff --git a/assets/images/zivali/sheep_golden_fleece.png b/assets/images/zivali/sheep_golden_fleece.png new file mode 100644 index 000000000..148f6e657 Binary files /dev/null and b/assets/images/zivali/sheep_golden_fleece.png differ diff --git a/assets/images/zivali/sheep_normal.png b/assets/images/zivali/sheep_normal.png new file mode 100644 index 000000000..9e96af460 Binary files /dev/null and b/assets/images/zivali/sheep_normal.png differ diff --git a/assets/images/zivali/susi_dachshund.png b/assets/images/zivali/susi_dachshund.png new file mode 100644 index 000000000..e3ddb7c68 Binary files /dev/null and b/assets/images/zivali/susi_dachshund.png differ diff --git a/assets/images/zivali/unicorn.png b/assets/images/zivali/unicorn.png new file mode 100644 index 000000000..37cdda20b Binary files /dev/null and b/assets/images/zivali/unicorn.png differ diff --git a/assets/images/zivali/wolf_wild.png b/assets/images/zivali/wolf_wild.png new file mode 100644 index 000000000..77500880a Binary files /dev/null and b/assets/images/zivali/wolf_wild.png differ diff --git a/scripts/check_models.py b/scripts/check_models.py new file mode 100644 index 000000000..4312602f9 --- /dev/null +++ b/scripts/check_models.py @@ -0,0 +1,57 @@ +#!/usr/bin/env python3 +""" +Check available checkpoints in ComfyUI +""" +import requests +import json + +COMFYUI_URL = "http://127.0.0.1:8000" + +print("=" * 70) +print("๐Ÿ” ComfyUI - Available Checkpoints") +print("=" * 70) + +# Get object info to see available checkpoints +try: + response = requests.get(f"{COMFYUI_URL}/object_info") + if response.status_code == 200: + data = response.json() + + # Find CheckpointLoaderSimple + if "CheckpointLoaderSimple" in data: + checkpoint_info = data["CheckpointLoaderSimple"] + if "input" in checkpoint_info and "required" in checkpoint_info["input"]: + ckpt_list = checkpoint_info["input"]["required"].get("ckpt_name", [[]])[0] + + print(f"\nโœ… Available Checkpoints ({len(ckpt_list)}):") + for i, ckpt in enumerate(ckpt_list, 1): + print(f" {i}. {ckpt}") + + if not ckpt_list: + print("\nโŒ NO CHECKPOINTS FOUND!") + print("You need to download a model to:") + print("/Users/davidkotnik/Documents/ComfyUI/models/checkpoints/") + print("\nRecommended models:") + print("- SD 1.5: https://huggingface.co/runwayml/stable-diffusion-v1-5") + print("- SDXL: https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0") + else: + print("โŒ Could not find checkpoint list structure") + else: + print("โŒ CheckpointLoaderSimple not found in object_info") + + else: + print(f"โŒ Error: {response.status_code}") + +except Exception as e: + print(f"โŒ Exception: {e}") + +# Also check for other info +print("\n" + "=" * 70) +print("๐Ÿ“ฆ Checking /embeddings endpoint...") +try: + response = requests.get(f"{COMFYUI_URL}/embeddings") + if response.status_code == 200: + embeddings = response.json() + print(f"โœ… Found {len(embeddings)} embeddings") +except Exception as e: + print(f"โš ๏ธ {e}") diff --git a/scripts/debug_comfy.py b/scripts/debug_comfy.py new file mode 100644 index 000000000..78e09a468 --- /dev/null +++ b/scripts/debug_comfy.py @@ -0,0 +1,98 @@ +#!/usr/bin/env python3 +""" +Debug script - check ComfyUI API response +""" +import requests +import json + +COMFYUI_URL = "http://127.0.0.1:8000" + +print("=" * 70) +print("๐Ÿ” ComfyUI API Debug") +print("=" * 70) + +# Check system stats +try: + response = requests.get(f"{COMFYUI_URL}/system_stats") + print(f"โœ… System Stats: {response.status_code}") + print(json.dumps(response.json(), indent=2)) +except Exception as e: + print(f"โŒ System Stats Error: {e}") + +print("\n" + "=" * 70) + +# Try minimal workflow +minimal_workflow = { + "prompt": { + "3": { + "inputs": { + "seed": 123, + "steps": 20, + "cfg": 7.0, + "sampler_name": "euler", + "scheduler": "normal", + "denoise": 1, + "model": ["4", 0], + "positive": ["6", 0], + "negative": ["7", 0], + "latent_image": ["5", 0] + }, + "class_type": "KSampler" + }, + "4": { + "inputs": { + "ckpt_name": "sd_xl_base_1.0.safetensors" + }, + "class_type": "CheckpointLoaderSimple" + }, + "5": { + "inputs": { + "width": 128, + "height": 128, + "batch_size": 1 + }, + "class_type": "EmptyLatentImage" + }, + "6": { + "inputs": { + "text": "test cow sprite", + "clip": ["4", 1] + }, + "class_type": "CLIPTextEncode" + }, + "7": { + "inputs": { + "text": "bad quality", + "clip": ["4", 1] + }, + "class_type": "CLIPTextEncode" + }, + "8": { + "inputs": { + "samples": ["3", 0], + "vae": ["4", 2] + }, + "class_type": "VAEDecode" + }, + "9": { + "inputs": { + "filename_prefix": "test", + "images": ["8", 0] + }, + "class_type": "SaveImage" + } + } +} + +print("๐Ÿš€ Testing prompt queue...") +try: + response = requests.post( + f"{COMFYUI_URL}/prompt", + json=minimal_workflow + ) + print(f"Status Code: {response.status_code}") + print(f"Response: {response.text}") + if response.status_code == 200: + print(f"JSON: {json.dumps(response.json(), indent=2)}") +except Exception as e: + print(f"โŒ Error: {e}") diff --git a/scripts/generate_assets_local.py b/scripts/generate_assets_local.py new file mode 100644 index 000000000..f06354e87 --- /dev/null +++ b/scripts/generate_assets_local.py @@ -0,0 +1,302 @@ +#!/usr/bin/env python3 +""" +DolinaSmrti Asset Generator - ComfyUI API Version +Calls local ComfyUI server at http://127.0.0.1:8188 +""" + +import os +import json +import time +import base64 +import requests +from pathlib import Path +from typing import List, Dict + +# Configuration +COMFYUI_URL = "http://127.0.0.1:8000" +OUTPUT_DIR = "/Users/davidkotnik/repos/novafarma/assets/images" +STYLE_PREFIX = "Top-down 2.5D video game sprite, 128x128 pixels, smooth vector art style like Stardew Valley, NO pixels, vibrant colors, clean edges, GREEN SCREEN background RGBA(0,255,0,255) pure green chroma key, " + +# Master Registry v1.14 - COMPLETE ASSET LIST +ASSETS = [ + # === CHARACTERS & NPCs === + {"cat": "npcs", "file": "kai_protagonist.png", "prompt": STYLE_PREFIX + "Kai protagonist with bright pink dreadlocks, athletic build, survivor clothing, determined expression, 4-direction sprite sheet"}, + {"cat": "npcs", "file": "grok_alpha_troll.png", "prompt": STYLE_PREFIX + "Grok Alpha Troll, GREEN SKIN, rainbow dreadlocks, facial piercings, stretched ear gauges, graphic t-shirt, baggy pants, holding vape device"}, + {"cat": "npcs", "file": "ana_twin.png", "prompt": STYLE_PREFIX + "Ana, Kai's twin sister, pink dreadlocks, kind expression, explorer outfit, 4-direction sprite"}, + {"cat": "npcs", "file": "ivan_blacksmith.png", "prompt": STYLE_PREFIX + "Ivan the Blacksmith, muscular build, leather apron, hammer, friendly beard, town NPC"}, + {"cat": "npcs", "file": "marija_baker.png", "prompt": STYLE_PREFIX + "Marija the Baker, warm smile, chef's apron, holding bread, town NPC"}, + + # === LIVESTOCK - Basic === + {"cat": "zivali", "file": "susi_dachshund.png", "prompt": STYLE_PREFIX + "Susi the Dachshund, brown with darker spots, long body, short legs, floppy ears, 4-direction sprite"}, + {"cat": "zivali", "file": "cow_normal.png", "prompt": STYLE_PREFIX + "Normal dairy cow, black and white Holstein pattern, friendly face, 4-direction sprite"}, + {"cat": "zivali", "file": "sheep_normal.png", "prompt": STYLE_PREFIX + "Normal farm sheep, fluffy white wool, black face and legs, 4-direction sprite"}, + {"cat": "zivali", "file": "chicken_normal.png", "prompt": STYLE_PREFIX + "Normal farm chicken, white feathers, red comb, pecking stance, 4-direction sprite"}, + {"cat": "zivali", "file": "pig_normal.png", "prompt": STYLE_PREFIX + "Normal farm pig, pink colored, curly tail, round body, 4-direction sprite"}, + {"cat": "zivali", "file": "horse_normal.png", "prompt": STYLE_PREFIX + "Normal horse for riding, brown coat, black mane and tail, 4-direction sprite"}, + + # === LIVESTOCK - Mutants === + {"cat": "zivali", "file": "sheep_fire.png", "prompt": STYLE_PREFIX + "Fire Sheep mutant, wool made of flickering orange-red flames, glowing effect, dark legs, magical"}, + {"cat": "zivali", "file": "sheep_golden_fleece.png", "prompt": STYLE_PREFIX + "Golden Fleece Sheep, shimmering gold metallic wool, sparkles, legendary rare"}, + {"cat": "zivali", "file": "cow_mutant.png", "prompt": STYLE_PREFIX + "Mutant Cow, larger size, glowing eyes, produces more milk, enhanced features"}, + {"cat": "zivali", "file": "chicken_three_headed.png", "prompt": STYLE_PREFIX + "Three-Headed Chicken, white body with THREE chicken heads on long necks, bizarre yet cute"}, + {"cat": "zivali", "file": "chicken_rainbow.png", "prompt": STYLE_PREFIX + "Rainbow Chicken, feathers in rainbow gradient colors, sparkle effects, magical"}, + {"cat": "zivali", "file": "chicken_phoenix.png", "prompt": STYLE_PREFIX + "Phoenix Chicken, bright orange-red feathers, flame patterns, fiery tail, glowing eyes"}, + {"cat": "zivali", "file": "pig_giant.png", "prompt": STYLE_PREFIX + "Giant Pig rideable, HUGE pink pig twice normal size, saddle on back, strong build"}, + {"cat": "zivali", "file": "horse_undead.png", "prompt": STYLE_PREFIX + "Undead Horse, dark skeletal with glowing blue ethereal mane, visible ribcage, ghostly aura"}, + {"cat": "zivali", "file": "unicorn.png", "prompt": STYLE_PREFIX + "Unicorn, pure white with rainbow gradient mane and tail, golden spiral horn, magical sparkles"}, + {"cat": "zivali", "file": "golden_goose.png", "prompt": STYLE_PREFIX + "Golden Goose, entire body shimmering gold, lays golden eggs, legendary rare"}, + + # === DOG BREEDS === + {"cat": "zivali", "file": "dog_retriever.png", "prompt": STYLE_PREFIX + "Golden Retriever dog, friendly loyal companion, finds items, 4-direction sprite"}, + {"cat": "zivali", "file": "dog_shepherd.png", "prompt": STYLE_PREFIX + "German Shepherd dog, strong combat bonus, protective stance, 4-direction sprite"}, + {"cat": "zivali", "file": "dog_husky.png", "prompt": STYLE_PREFIX + "Husky dog, cold resistance, blue eyes, fluffy coat, 4-direction sprite"}, + {"cat": "zivali", "file": "dog_corgi.png", "prompt": STYLE_PREFIX + "Corgi dog, short legs, fast loyalty gain, cute expression, 4-direction sprite"}, + {"cat": "zivali", "file": "dog_dalmatian.png", "prompt": STYLE_PREFIX + "Dalmatian dog, white with black spots, speed boost ability, 4-direction sprite"}, + + # === SLIMES (8 Types) === + {"cat": "mutanti", "file": "slime_green.png", "prompt": STYLE_PREFIX + "Green Slime, bouncing blob, basic slime, cute round shape"}, + {"cat": "mutanti", "file": "slime_blue.png", "prompt": STYLE_PREFIX + "Blue Slime, water element, bouncing blob, aqua colored"}, + {"cat": "mutanti", "file": "slime_red.png", "prompt": STYLE_PREFIX + "Red Slime, fire element, bouncing blob, bright red"}, + {"cat": "mutanti", "file": "slime_yellow.png", "prompt": STYLE_PREFIX + "Yellow Slime, electric element, bouncing blob, bright yellow sparks"}, + {"cat": "mutanti", "file": "slime_purple.png", "prompt": STYLE_PREFIX + "Purple Slime, poison element, bouncing blob, toxic purple"}, + {"cat": "mutanti", "file": "slime_black.png", "prompt": STYLE_PREFIX + "Black Slime, shadow element, bouncing blob, dark mysterious"}, + {"cat": "mutanti", "file": "slime_rainbow.png", "prompt": STYLE_PREFIX + "Rainbow Slime, all elements, bouncing blob, rainbow gradient shimmer"}, + {"cat": "mutanti", "file": "slime_king.png", "prompt": STYLE_PREFIX + "King Slime BOSS, GIANT blue slime with crown, menacing yet cute, royal"}, + + # === FOREST WILDLIFE === + {"cat": "zivali", "file": "fox_wild.png", "prompt": STYLE_PREFIX + "Wild Fox, orange fur with white chest, bushy tail, forest animal, 4-direction sprite"}, + {"cat": "zivali", "file": "deer_wild.png", "prompt": STYLE_PREFIX + "Wild Deer, brown coat, antlers on male, peaceful forest animal, 4-direction sprite"}, + {"cat": "zivali", "file": "rabbit_wild.png", "prompt": STYLE_PREFIX + "Wild Rabbit, brown fur, long ears, hopping stance, forest animal"}, + {"cat": "zivali", "file": "hedgehog_wild.png", "prompt": STYLE_PREFIX + "Hedgehog, brown with spiky back, small cute forest animal"}, + {"cat": "zivali", "file": "bear_wild.png", "prompt": STYLE_PREFIX + "Wild Bear, large brown bear, dangerous predator, forest animal, 4-direction sprite"}, + {"cat": "zivali", "file": "wolf_wild.png", "prompt": STYLE_PREFIX + "Wild Wolf, grey fur, pack predator, dangerous forest animal, 4-direction sprite"}, + {"cat": "zivali", "file": "boar_wild.png", "prompt": STYLE_PREFIX + "Wild Boar, dark bristly fur, tusks, aggressive forest animal, 4-direction sprite"}, + {"cat": "zivali", "file": "owl_nocturnal.png", "prompt": STYLE_PREFIX + "Owl, brown feathers, wise eyes, nocturnal forest bird, perched"}, + {"cat": "zivali", "file": "bat_nocturnal.png", "prompt": STYLE_PREFIX + "Bat, flying nocturnal creature, spread wings, forest animal"}, + + # === MARINE WILDLIFE === + {"cat": "zivali", "file": "fish_bass.png", "prompt": STYLE_PREFIX + "Bass fish, common freshwater fish, silver scales, swimming"}, + {"cat": "zivali", "file": "fish_trout.png", "prompt": STYLE_PREFIX + "Trout fish, spotted pattern, freshwater fish, swimming"}, + {"cat": "zivali", "file": "fish_salmon.png", "prompt": STYLE_PREFIX + "Salmon fish, orange-pink flesh color, ocean fish, swimming"}, + {"cat": "zivali", "file": "fish_tuna.png", "prompt": STYLE_PREFIX + "Tuna fish, large ocean fish, blue-grey coloring, swimming"}, + {"cat": "zivali", "file": "fish_golden.png", "prompt": STYLE_PREFIX + "Golden Fish, legendary rare shimmering gold fish, magical sparkles"}, + {"cat": "zivali", "file": "piranha.png", "prompt": STYLE_PREFIX + "Piranha, dangerous Amazon fish, sharp teeth, aggressive"}, + {"cat": "zivali", "file": "shark.png", "prompt": STYLE_PREFIX + "Shark, ocean predator, grey with fin, dangerous marine animal"}, + {"cat": "zivali", "file": "jellyfish.png", "prompt": STYLE_PREFIX + "Jellyfish, translucent bell shape, trailing tentacles, ocean creature"}, +] + +def queue_comfy_prompt(prompt_text: str, output_name: str) -> dict: + """ + Send prompt to ComfyUI and queue generation + Returns: workflow ID + """ + # Basic ComfyUI API workflow + workflow = { + "3": { + "inputs": { + "seed": int(time.time()), + "steps": 25, + "cfg": 7.5, + "sampler_name": "euler", + "scheduler": "normal", + "denoise": 1, + "model": ["4", 0], + "positive": ["6", 0], + "negative": ["7", 0], + "latent_image": ["5", 0] + }, + "class_type": "KSampler" + }, + "4": { + "inputs": { + "ckpt_name": "sd_xl_base_1.0.safetensors" + }, + "class_type": "CheckpointLoaderSimple" + }, + "5": { + "inputs": { + "width": 128, + "height": 128, + "batch_size": 1 + }, + "class_type": "EmptyLatentImage" + }, + "6": { + "inputs": { + "text": prompt_text, + "clip": ["4", 1] + }, + "class_type": "CLIPTextEncode" + }, + "7": { + "inputs": { + "text": "blurry, low quality, pixelated, voxel, 3D render, realistic photo", + "clip": ["4", 1] + }, + "class_type": "CLIPTextEncode" + }, + "8": { + "inputs": { + "samples": ["3", 0], + "vae": ["4", 2] + }, + "class_type": "VAEDecode" + }, + "9": { + "inputs": { + "filename_prefix": output_name, + "images": ["8", 0] + }, + "class_type": "SaveImage" + } + } + + try: + response = requests.post( + f"{COMFYUI_URL}/prompt", + json={"prompt": workflow} + ) + return response.json() + except Exception as e: + print(f"โŒ Error queuing prompt: {e}") + return None + + +def wait_for_completion(prompt_id: str, timeout: int = 180) -> bool: + """Wait for ComfyUI to finish generating""" + start = time.time() + while time.time() - start < timeout: + try: + response = requests.get(f"{COMFYUI_URL}/history/{prompt_id}") + history = response.json() + + if prompt_id in history: + status = history[prompt_id].get("status", {}) + if status.get("completed", False): + return True + + except Exception as e: + print(f"โš ๏ธ Polling error: {e}") + + time.sleep(2) + + return False + + +def download_image(prompt_id: str, output_path: Path) -> bool: + """Download generated image from ComfyUI""" + try: + # Get image filename from history + response = requests.get(f"{COMFYUI_URL}/history/{prompt_id}") + history = response.json() + + if prompt_id not in history: + return False + + outputs = history[prompt_id].get("outputs", {}) + for node_id, node_output in outputs.items(): + if "images" in node_output: + for img in node_output["images"]: + filename = img["filename"] + subfolder = img.get("subfolder", "") + + # Download image + img_url = f"{COMFYUI_URL}/view" + params = { + "filename": filename, + "subfolder": subfolder, + "type": "output" + } + + img_response = requests.get(img_url, params=params) + if img_response.status_code == 200: + output_path.parent.mkdir(parents=True, exist_ok=True) + with open(output_path, 'wb') as f: + f.write(img_response.content) + return True + + return False + + except Exception as e: + print(f"โŒ Download error: {e}") + return False + + +def main(): + """Main generation loop""" + print("=" * 70) + print("๐ŸŽจ DolinaSmrti Asset Generator - ComfyUI Local") + print("=" * 70) + print(f"๐Ÿ“ก ComfyUI Server: {COMFYUI_URL}") + print(f"๐Ÿ’พ Output Directory: {OUTPUT_DIR}") + print(f"๐Ÿ“Š Total Assets: {len(ASSETS)}") + print() + + # Check ComfyUI connection + try: + response = requests.get(f"{COMFYUI_URL}/system_stats") + print("โœ… ComfyUI server is running!") + except: + print("โŒ ERROR: ComfyUI server not responding at http://127.0.0.1:8188") + print("Please start ComfyUI first!") + return + + print("\n๐Ÿš€ Starting generation...\n") + + success_count = 0 + skip_count = 0 + fail_count = 0 + + for i, asset in enumerate(ASSETS, 1): + output_path = Path(OUTPUT_DIR) / asset["cat"] / asset["file"] + + # Skip if exists + if output_path.exists(): + print(f"[{i}/{len(ASSETS)}] โญ๏ธ SKIP: {asset['file']} (exists)") + skip_count += 1 + continue + + print(f"[{i}/{len(ASSETS)}] ๐ŸŽจ Generating: {asset['file']}") + print(f" ๐Ÿ“ Category: {asset['cat']}") + + # Queue prompt + result = queue_comfy_prompt(asset["prompt"], asset["file"].replace(".png", "")) + if not result or "prompt_id" not in result: + print(f" โŒ FAILED to queue") + fail_count += 1 + continue + + prompt_id = result["prompt_id"] + print(f" โณ Queued (ID: {prompt_id[:8]}...)") + + # Wait for completion + if wait_for_completion(prompt_id): + # Download image + if download_image(prompt_id, output_path): + print(f" โœ… SAVED: {output_path}") + success_count += 1 + else: + print(f" โŒ FAILED to download") + fail_count += 1 + else: + print(f" โฑ๏ธ TIMEOUT") + fail_count += 1 + + # Report every 10 images + if (i) % 10 == 0: + print(f"\n๐Ÿ“Š Progress: {success_count} success, {skip_count} skipped, {fail_count} failed\n") + + time.sleep(1) # Small delay + + # Final report + print("\n" + "=" * 70) + print("โœ… GENERATION COMPLETE!") + print("=" * 70) + print(f"โœ… Successful: {success_count}") + print(f"โญ๏ธ Skipped: {skip_count}") + print(f"โŒ Failed: {fail_count}") + print(f"๐Ÿ“ Output: {OUTPUT_DIR}") + + +if __name__ == "__main__": + main() diff --git a/scripts/test_single_asset.py b/scripts/test_single_asset.py new file mode 100644 index 000000000..7b5b4c291 --- /dev/null +++ b/scripts/test_single_asset.py @@ -0,0 +1,183 @@ +#!/usr/bin/env python3 +""" +Test script - generates single asset to verify ComfyUI workflow +""" +import os +import json +import time +import requests +from pathlib import Path + +COMFYUI_URL = "http://127.0.0.1:8000" +OUTPUT_DIR = "/Users/davidkotnik/repos/novafarma/assets/images" + +# Test prompt with all requirements +TEST_PROMPT = "Top-down 2.5D video game sprite, 128x128 pixels, smooth vector art style like Stardew Valley, NO pixels, vibrant colors, clean edges, GREEN SCREEN background RGBA(0,255,0,255) pure green chroma key, Normal farm cow black and white Holstein pattern friendly face 4-direction sprite" + +def queue_comfy_prompt(prompt_text: str, output_name: str) -> dict: + """Send prompt to ComfyUI""" + workflow = { + "3": { + "inputs": { + "seed": int(time.time()), + "steps": 25, + "cfg": 7.5, + "sampler_name": "euler", + "scheduler": "normal", + "denoise": 1, + "model": ["4", 0], + "positive": ["6", 0], + "negative": ["7", 0], + "latent_image": ["5", 0] + }, + "class_type": "KSampler" + }, + "4": { + "inputs": { + "ckpt_name": "sd_xl_base_1.0.safetensors" + }, + "class_type": "CheckpointLoaderSimple" + }, + "5": { + "inputs": { + "width": 128, + "height": 128, + "batch_size": 1 + }, + "class_type": "EmptyLatentImage" + }, + "6": { + "inputs": { + "text": prompt_text, + "clip": ["4", 1] + }, + "class_type": "CLIPTextEncode" + }, + "7": { + "inputs": { + "text": "blurry, low quality, pixelated, voxel, 3D render, realistic photo", + "clip": ["4", 1] + }, + "class_type": "CLIPTextEncode" + }, + "8": { + "inputs": { + "samples": ["3", 0], + "vae": ["4", 2] + }, + "class_type": "VAEDecode" + }, + "9": { + "inputs": { + "filename_prefix": output_name, + "images": ["8", 0] + }, + "class_type": "SaveImage" + } + } + + try: + response = requests.post( + f"{COMFYUI_URL}/prompt", + json={"prompt": workflow} + ) + return response.json() + except Exception as e: + print(f"โŒ Error: {e}") + return None + +def wait_for_completion(prompt_id: str, timeout: int = 180) -> bool: + """Wait for generation""" + start = time.time() + while time.time() - start < timeout: + try: + response = requests.get(f"{COMFYUI_URL}/history/{prompt_id}") + history = response.json() + + if prompt_id in history: + status = history[prompt_id].get("status", {}) + if status.get("completed", False): + return True + + except Exception as e: + print(f"โš ๏ธ Polling: {e}") + + time.sleep(2) + + return False + +def download_image(prompt_id: str, output_path: Path) -> bool: + """Download image""" + try: + response = requests.get(f"{COMFYUI_URL}/history/{prompt_id}") + history = response.json() + + if prompt_id not in history: + return False + + outputs = history[prompt_id].get("outputs", {}) + for node_id, node_output in outputs.items(): + if "images" in node_output: + for img in node_output["images"]: + filename = img["filename"] + subfolder = img.get("subfolder", "") + + img_url = f"{COMFYUI_URL}/view" + params = { + "filename": filename, + "subfolder": subfolder, + "type": "output" + } + + img_response = requests.get(img_url, params=params) + if img_response.status_code == 200: + output_path.parent.mkdir(parents=True, exist_ok=True) + with open(output_path, 'wb') as f: + f.write(img_response.content) + return True + + return False + + except Exception as e: + print(f"โŒ Download error: {e}") + return False + +print("=" * 70) +print("๐Ÿงช TEST: Single Asset Generation") +print("=" * 70) +print(f"๐Ÿ“ก Server: {COMFYUI_URL}") +print(f"๐ŸŽจ Prompt: {TEST_PROMPT[:80]}...") +print() + +# Check connection +try: + response = requests.get(f"{COMFYUI_URL}/system_stats") + print("โœ… ComfyUI connected!") +except: + print("โŒ ComfyUI NOT responding!") + exit(1) + +# Queue test +print("\n๐Ÿš€ Queuing test generation...") +result = queue_comfy_prompt(TEST_PROMPT, "test_cow") +if not result or "prompt_id" not in result: + print("โŒ Failed to queue!") + exit(1) + +prompt_id = result["prompt_id"] +print(f"โณ Queued: {prompt_id}") + +# Wait +print("โณ Waiting for completion...") +if wait_for_completion(prompt_id): + output_path = Path(OUTPUT_DIR) / "zivali" / "test_cow.png" + if download_image(prompt_id, output_path): + print(f"โœ… SUCCESS! Saved to: {output_path}") + print("\n๐Ÿ“Š Check the image:") + print(f" - Size should be 128x128") + print(f" - Background should be green RGBA(0,255,0,255)") + print(f" - Style should be smooth 2D vector art") + else: + print("โŒ Failed to download!") +else: + print("โฑ๏ธ Timeout!")