рдкрд░реЗрд╢рд╛рдиреА рдХрд╛ рд╕рд┐рдЧреНрдирд▓
рдЕрд╡рдзрд┐: 1 рдорд┐рдирдЯ

рдЖрдкрдХрд╛ рдПрд╕реНрдХреЗрдк рдкреЙрдб, рдХрд┐рд╕реА рдЕрдирдЬрд╛рди рджреБрдирд┐рдпрд╛ рдХреЗ рд╡рд╛рдпреБрдордВрдбрд▓ рд╕реЗ рд╣реЛрдХрд░ рдЧреБрдЬрд╝рд░рддрд╛ рд╣реИ. рд╣рд░ рдкреИрдирд▓ рдкрд░ рдЪреЗрддрд╛рд╡рдиреА рд╡рд╛рд▓реА рд▓рд╛рдЗрдЯреЗрдВ рдЪрдордХрддреА рд╣реИрдВ. рдиреЗрд╡рд┐рдЧреЗрд╢рди рд╕рд┐рд╕реНрдЯрдо рдЦрд░рд╛рдм рд╣реЛ рдЧрдпрд╛ рд╣реИ. рдХрдореНрдпреВрдирд┐рдХреЗрд╢рди рдХреА рд╕реБрд╡рд┐рдзрд╛рдПрдВ рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИрдВ. рдкреЙрдб рдХреЗ рдЖрдкрд╛рддрдХрд╛рд▓реАрди рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдЪрд╛рд▓реВ рд╣реЛрдиреЗ рдкрд░, рдПрдЖрдИ рдЕрд╕рд┐рд╕реНрдЯреЗрдВрдЯ рдХреА рдЖрд╡рд╛рдЬрд╝ рд╕реБрдирд╛рдИ рджреЗрддреА рд╣реИ:
"рд╕рд░реНрд╡рд╛рдЗрд╡рд░ рдХрд╛ рдкрддрд╛ рдЪрд▓рд╛. рдЖрдкрд╛рддрдХрд╛рд▓реАрди рд▓реИрдВрдбрд┐рдВрдЧ рд╣реЛ рдЧрдИ рд╣реИ. Initiating rescue beacon protocol..."
"рдЪреЗрддрд╛рд╡рдиреА: рдкрд╣рдЪрд╛рди рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░рдирд╛ рдЬрд╝рд░реВрд░реА рд╣реИ. рдЧреИрд▓реЗрдХреНрдЯрд┐рдХ рд░реЗрд╕реНрдХреНрдпреВ рдиреЗрдЯрд╡рд░реНрдХ, рдмрд┐рдирд╛ рд░рдЬрд┐рд╕реНрдЯреНрд░реЗрд╢рди рд╡рд╛рд▓реЗ рдПрдХреНрд╕рдкреНрд▓реЛрд░рд░ рдХрд╛ рдкрддрд╛ рдирд╣реАрдВ рд▓рдЧрд╛ рд╕рдХрддрд╛. рдХреГрдкрдпрд╛ рдЕрдкрдиреЗ рдмреАрдХрди рдХреЛ рдЪрд╛рд▓реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЕрдкрдиреА рдкрд╣рдЪрд╛рди рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░реЗрдВ."
рд╡реНрдпреВрдкреЛрд░реНрдЯ рд╕реЗ рдмрд╛рд╣рд░ рджреЗрдЦрдирд╛. рдПрд▓рд┐рдпрди рдХрд╛ рд▓реИрдВрдбрд╕реНрдХреЗрдк, рд╣реЛрд░рд╛рдЗрдЬрд╝рди рддрдХ рдлреИрд▓рд╛ рд╣реБрдЖ рд╣реИ. рдЗрд╕рдореЗрдВ рдЕрдЬреАрдм рддрд░рд╣ рдХреА рдЪрдЯреНрдЯрд╛рдиреЗрдВ, рдЕрдирдЬрд╛рди рд╡рдирд╕реНрдкрддрд┐, рдФрд░ рдЕрдЬреАрдм рд░рдВрдЧ рдХрд╛ рдЖрд╕рдорд╛рди рджрд┐рдЦ рд░рд╣рд╛ рд╣реИ. рдЗрд╕ рдЧреНрд░рд╣ рдХреА рд╕рддрд╣ рдкрд░, рдЖрдкрдХреЗ рдорд┐рд╢рди рдХреЗ рдЕрдиреНрдп рд╕рд░реНрд╡рд╛рдЗрд╡рд░ рдмрд┐рдЦрд░реЗ рд╣реБрдП рд╣реИрдВ.
рд▓реЗрдХрд┐рди рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ: рдЖрдкрдХрд╛ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдореМрдЬреВрдж рд╣реЛрдирд╛ рдЬрд╝рд░реВрд░реА рд╣реИ.
рдЖрдкрдХреЛ рдХреНрдпрд╛ рдмрдирд╛рдирд╛ рд╣реИ
рдЗрд╕ рд▓реЗрд╡рд▓ рдореЗрдВ, рдЖрдкрдХреЛ рдПрдХ рд╕реЗ рдЬрд╝реНрдпрд╛рджрд╛ рдмрд╛рд░ рдЗрдореЗрдЬ рдЬрдирд░реЗрдЯ рдХрд░рдиреЗ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдХреЗ, рд╕реНрдкреЗрд╕ рдПрдХреНрд╕рдкреНрд▓реЛрд░рд░ рдХреЗ рддреМрд░ рдкрд░ рдЕрдкрдиреА рдкрд╣рдЪрд╛рди рдмрдирд╛рдиреА рд╣реЛрдЧреА. рдЗрд╕рдХреЗ рд▓рд┐рдП, Google рдХреЗ Gemini рдЗрдореЗрдЬ рдЬрдирд░реЗрдЯ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдореЙрдбрд▓ (рдЗрдиреНрд╣реЗрдВ Nano Banana ЁЯНМ рднреА рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ) рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░реЗрдВ. рдЖрдкрдХрд╛ рдЕрд╡рддрд╛рд░, рдЧреНрд▓реЛрдмрд▓ рд░реЗрд╕реНрдХреНрдпреВ рдореИрдк рдкрд░ рджрд┐рдЦреЗрдЧрд╛. рдЗрд╕реЗ рд╡рд░реНрдХрд╢реЙрдк рдЗрд╡реЗрдВрдЯ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдЕрдиреНрдп рд▓реЛрдЧ рднреА рджреЗрдЦ рдкрд╛рдПрдВрдЧреЗ.

рдЖрдкрдХреЛ рдХреНрдпрд╛ рд╕реАрдЦрдиреЗ рдХреЛ рдорд┐рд▓реЗрдЧрд╛
| рд╕рд┐рджреНрдзрд╛рдВрдд | рдмреНрдпреМрд░рд╛ |
|---|---|
| рдПрдХ рд╕реЗ рдЬрд╝реНрдпрд╛рджрд╛ рдмрд╛рд░ рдЗрдореЗрдЬ рдЬрдирд░реЗрдЯ рдХрд░рдирд╛ | рдЪреИрдЯ рд╕реЗрд╢рди рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдХреЗ, рдЬрдирд░реЗрдЯ рдХреА рдЧрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЗрдореЗрдЬ рдореЗрдВ рдХрд┐рд╕реА рдХрд┐рд░рджрд╛рд░ рдХрд╛ рд▓реБрдХ рдПрдХ рдЬреИрд╕рд╛ рд░рдЦрдиреЗ рдХрд╛ рддрд░реАрдХрд╛ |
| рдЗрдореЗрдЬ рдЬрдирд░реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЙрдореНрдкреНрдЯ рдЗрдВрдЬреАрдирд┐рдпрд░рд┐рдВрдЧ | рд╕реНрдЯрд╛рдЗрд▓ рдХреЗ рд╣рд┐рд╕рд╛рдм рд╕реЗ рдФрд░ рдПрдХ рдЬреИрд╕реЗ рдЖрдЙрдЯрдкреБрдЯ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЦрд╛рд╕ рд╢рд░реНрддреЛрдВ рдХреЗ рд╕рд╛рде рдЕрд╕рд░рджрд╛рд░ рдкреНрд░реЙрдореНрдкреНрдЯ рд▓рд┐рдЦрдирд╛ |
| Gemini Image API (Nano Banana) | Python SDK рдХреЗ рдЬрд╝рд░рд┐рдП, Gemini рдХреА рдЗрдореЗрдЬ рдЬрдирд░реЗрдЯ рдХрд░рдиреЗ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдирд╛ |
| рдЪреИрдЯ рд╕реЗрд╢рди | рдмрд╛рддрдЪреАрдд рдХреЗ рдХреЙрдиреНрдЯреЗрдХреНрд╕реНрдЯ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдХреЗ, рдЬрд╡рд╛рдм рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдирд╛ рдФрд░ рдХрд┐рд░рджрд╛рд░ рдХреА рдмрд╛рддреЛрдВ рдореЗрдВ рдПрдХрд░реВрдкрддрд╛ рдмрдирд╛рдП рд░рдЦрдирд╛ |
рдЗрд╕ рд▓реЗрд╡рд▓ рдХреЗ рдЦрддреНрдо рд╣реЛрдиреЗ рддрдХ, рдЖрдкрдХреЗ рдкрд╛рд╕ рдпреЗ рд╣реЛрдВрдЧреЗ:
тЬЕ рдЯреЗрдХреНрд╕реНрдЯ рд╕реЗ рдЗрдореЗрдЬ рдмрдирд╛рдиреЗ рд╡рд╛рд▓реЗ рдПрдЖрдИ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдХреЗ, рдЕрдкрдиреЗ рдПрдХреНрд╕рдкреНрд▓реЛрд░рд░ рдХрд╛ рдкреЛрд░реНрдЯреНрд░реЗрдЯ рдЬрдирд░реЗрдЯ рдХрд┐рдпрд╛ рд╣реЛ
тЬЕ рдмрд╛рддрдЪреАрдд рдХреЗ рдХрдИ рдЪрд░рдгреЛрдВ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдХреЗ, рдПрдХ рдЬреИрд╕рд╛ рдореИрдк рдЖрдЗрдХреЙрди рдмрдирд╛рдпрд╛ рд╣реЛ
тЬЕ рд░реЗрд╕реНрдХреНрдпреВ рдиреЗрдЯрд╡рд░реНрдХ рдореЗрдВ рдЕрдкрдиреА рдкрд╣рдЪрд╛рди рд░рдЬрд┐рд╕реНрдЯрд░ рдХреА рд╣реЛ
тЬЕ рд▓рд╛рдЗрд╡ рд╡рд░реНрд▓реНрдб рдореИрдк рдкрд░, рдЕрдиреНрдп рдПрдХреНрд╕рдкреНрд▓реЛрд░рд░ рдХреЗ рд╕рд╛рде рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реЛ
рдЪрд▓рд┐рдП, рдЖрдкрдХреЛ рдореИрдк рдкрд░ рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ! ЁЯУН
рдЕрдкрдирд╛ рдПрдирд╡рд╛рдпрд░рдореЗрдВрдЯ рддреИрдпрд╛рд░ рдХрд░рдирд╛
рдЕрд╡рдзрд┐: рджреЛ рдорд┐рдирдЯ
Cloud Shell рдРрдХреНрд╕реЗрд╕ рдХрд░рдирд╛
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо Cloud Shell рдЦреЛрд▓реЗрдВрдЧреЗ. рдпрд╣ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдПрдХ рдЯрд░реНрдорд┐рдирд▓ рд╣реИ. рдЗрд╕рдореЗрдВ Google Cloud SDK рдФрд░ рдЕрдиреНрдп рдЬрд╝рд░реВрд░реА рдЯреВрд▓ рдкрд╣рд▓реЗ рд╕реЗ рдЗрдВрд╕реНрдЯреЙрд▓ рд╣реЛрддреЗ рд╣реИрдВ.
рдХреНрдпрд╛ рдЖрдкрдХреЛ Google Cloud рдХреНрд░реЗрдбрд┐рдЯ рдЪрд╛рд╣рд┐рдП?
тАв рдЕрдЧрд░ рдЖрдкрдХреЛ рдХрд┐рд╕реА рд╢рд┐рдХреНрд╖рдХ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдореЗрдВ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рд╡рд░реНрдХрд╢реЙрдк рдореЗрдВ рд╣рд┐рд╕реНрд╕рд╛ рд▓реЗрдирд╛ рд╣реИ: рдЖрдкрдХрд╛ рд╢рд┐рдХреНрд╖рдХ рдЖрдкрдХреЛ рдХреНрд░реЗрдбрд┐рдЯ рдХреЛрдб рджреЗрдЧрд╛. рдХреГрдкрдпрд╛ рдЙрдирдХреЗ рджрд┐рдП рдЧрдП рд▓рд┐рдВрдХ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░реЗрдВ.
тАв рдЕрдЧрд░ рдЖрдкрдХреЛ рдпрд╣ рдХреЛрдбрд▓реИрдм рдЦреБрдж рд╕реЗ рдкреВрд░рд╛ рдХрд░рдирд╛ рд╣реИ: рддреЛ рд╡рд░реНрдХрд╢реЙрдк рдХреА рд▓рд╛рдЧрдд рдХреЛ рдХрд╡рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, Google Cloud рдХрд╛ рдореБрдлрд╝реНрдд рдХреНрд░реЗрдбрд┐рдЯ рд░рд┐рдбреАрдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ. рдХреНрд░реЗрдбрд┐рдЯ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдХреГрдкрдпрд╛ рдЗрд╕ рд▓рд┐рдВрдХ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ. рдЗрд╕рдХреЗ рдмрд╛рдж, рдЗрд╕реЗ рдЕрдкрдиреЗ рдЦрд╛рддреЗ рдкрд░ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣рд╛рдВ рджреА рдЧрдИ рд╡реАрдбрд┐рдпреЛ рдЧрд╛рдЗрдб рдореЗрдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рддрд░реАрдХрд╛ рдЕрдкрдирд╛рдПрдВ.
![]()
Google Cloud Console рдореЗрдВ рд╕рдмрд╕реЗ рдКрдкрд░ рдореМрдЬреВрдж, Cloud Shell рдЪрд╛рд▓реВ рдХрд░реЗрдВ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ. рдпрд╣ рд╕рдмрд╕реЗ рдКрдкрд░ рджрд╛рдПрдВ рдХреЛрдиреЗ рдореЗрдВ рдореМрдЬреВрдж рдиреЗрд╡рд┐рдЧреЗрд╢рди рдмрд╛рд░ рдореЗрдВ рдЯрд░реНрдорд┐рдирд▓ рдЖрдЗрдХреЙрди рд╣реЛрддрд╛ рд╣реИ.

рдЕрдкрдирд╛ Google Cloud рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЖрдИрдбреА рдвреВрдВрдвреЗрдВ:
- Google Cloud Console рдЦреЛрд▓реЗрдВ: https://console.cloud.google.com
- рдкреЗрдЬ рдкрд░ рд╕рдмрд╕реЗ рдКрдкрд░ рдореМрдЬреВрдж рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдбреНрд░реЙрдкрдбрд╛рдЙрди рд╕реЗ, рд╡рд╣ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЪреБрдиреЗрдВ рдЬрд┐рд╕рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдЖрдкрдХреЛ рдЗрд╕ рд╡рд░реНрдХрд╢реЙрдк рдХреЗ рд▓рд┐рдП рдХрд░рдирд╛ рд╣реИ.
- рдЖрдкрдХрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЖрдИрдбреА, рдбреИрд╢рдмреЛрд░реНрдб рдкрд░ рдореМрдЬреВрдж рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреА рдЬрд╛рдирдХрд╛рд░реА рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдб рдореЗрдВ рджрд┐рдЦрддрд╛ рд╣реИ

Cloud Shell рдЦреБрд▓рдиреЗ рдХреЗ рдмрд╛рдж, рдкреБрд╖реНрдЯрд┐ рдХрд░реЗрдВ рдХрд┐ рдЖрдкрдиреЗ рдкреБрд╖реНрдЯрд┐ рдХрд░ рд▓реА рд╣реИ:
# Check that you are logged in
gcloud auth list
рдЖрдкрдХреЛ рдЕрдкрдирд╛ рдЦрд╛рддрд╛ (ACTIVE) рдХреЗ рддреМрд░ рдкрд░ рджрд┐рдЦреЗрдЧрд╛.
рдЕрдкрдирд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛
рдкреБрд╖реНрдЯрд┐ рдХрд░реЗрдВ рдХрд┐ рдЖрдкрдХрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
export PROJECT_ID=$(gcloud config get-value project)
echo "Using project: $PROJECT_ID"
рдЕрдЧрд░ рдХреЛрдИ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗрдЯ рдирд╣реАрдВ рд╣реИ рдпрд╛ рдЖрдкрдХреЛ рдЗрд╕реЗ рдмрджрд▓рдирд╛ рд╣реИ, рддреЛ:
gcloud config set project YOUR_PROJECT_ID
рдЬрд╝рд░реВрд░реА рдПрдкреАрдЖрдИ рдЪрд╛рд▓реВ рдХрд░рдирд╛
рдЗрдореЗрдЬ рдЬрдирд░реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, Vertex AI API рдЪрд╛рд▓реВ рдХрд░реЗрдВ:
gcloud services enable aiplatform.googleapis.com
рд░рд┐рдкреЙрдЬрд╝рд┐рдЯрд░реА рдХрд╛ рдХреНрд▓реЛрди рдмрдирд╛рдирд╛
Way Back Home рдХреЗ рдбреЗрдЯрд╛ рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХреА рдЬрдЧрд╣ рдХреЛ рдХреНрд▓реЛрди рдХрд░реЗрдВ рдФрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкрд░ рдЬрд╛рдПрдВ:
git clone https://github.com/ayoisio/way-back-home.git
cd way-back-home
рдбрд┐рдкреЗрдВрдбреЗрдВрд╕реА рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдирд╛
рд▓реЗрд╡рд▓ 0 рдкрд░ рдЬрд╛рдПрдВ рдФрд░ рдЬрд╝рд░реВрд░реА Python рдкреИрдХреЗрдЬ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВ:
cd level_0
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
рдореБрдЦреНрдп рдбрд┐рдкреЗрдВрдбреЗрдВрд╕реА рдпреЗ рд╣реИрдВ:
| рдкреИрдХреЗрдЬ | рдордХрд╕рдж |
|---|---|
google-genai |
рдЗрдореЗрдЬ рдЬрдирд░реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Gemini API рдХреНрд▓рд╛рдЗрдВрдЯ |
requests |
Mission Control рдХреЛ рдПрдкреАрдЖрдИ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдЪрдЯреАрдЯреАрдкреА рдХреНрд▓рд╛рдЗрдВрдЯ |
Pillow |
рдЗрдореЗрдЬ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдФрд░ рдлрд╝рд╛рдЗрд▓ рд╣реИрдВрдбрд▓рд┐рдВрдЧ |
рд╕реЗрдЯрдЕрдк рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░рдирд╛
рдпрд╣ рдкрдХреНрдХрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рд╕рдм рдХреБрдЫ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдкреБрд╖реНрдЯрд┐ рдХрд░рдиреЗ рдХреА рдкреНрд░реЛрд╕реЗрд╕ рдХреЛ рддреБрд░рдВрдд рдкреВрд░рд╛ рдХрд░реЗрдВ:
cd ~/way-back-home
python scripts/verify_setup.py
рдЖрдкрдХреЛ рдпрд╣ рджрд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП:
тЬУ Google Cloud project configured: your-project-id
тЬУ Vertex AI API enabled
тЬУ Dependencies installed
тЬУ Ready to proceed!
рдЖрдкрдиреЗ рдЕрднреА-рдЕрднреА рдХреНрдпрд╛ рдкреВрд░рд╛ рдХрд┐рдпрд╛
тЬЕ Cloud Shell рдЦреЛрд▓рд╛ рдЧрдпрд╛ рд╣реЛ
тЬЕ Google Cloud рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛ
тЬЕ Vertex AI API рдЪрд╛рд▓реВ рдХрд┐рдП рдЧрдП рд╣реЛрдВ
тЬЕ рдХреЛрдбрд▓реИрдм рд░рд┐рдкреЙрдЬрд╝рд┐рдЯрд░реА рдХреНрд▓реЛрди рдХреА рдЧрдИ рд╣реЛ
тЬЕ Python рдХреА рдбрд┐рдкреЗрдВрдбреЗрдВрд╕реА рдЗрдВрд╕реНрдЯреЙрд▓ рдХреА рдЧрдИ рд╣реЛрдВ
тЬЕ рд╕реЗрдЯрдЕрдк рдХреА рдкреБрд╖реНрдЯрд┐ рдХреА рдЧрдИ рд╣реЛ
рдЕрдЧрд▓рд╛ рдЪрд░рдг: Mission Control рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ рдФрд░ рдЕрдкрдирд╛ рдПрдХреНрд╕рдкреНрд▓реЛрд░рд░ рдирд╛рдо рдкрд╛рдПрдВ.
рдорд┐рд╢рди рдХрдВрдЯреНрд░реЛрд▓ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдирд╛
рдЕрд╡рдзрд┐: рджреЛ рдорд┐рдирдЯ
рд╕реЗрдЯрдЕрдк рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рдирд╛
рд╕реЗрдЯрдЕрдк рд╕реНрдХреНрд░рд┐рдкреНрдЯ, рдЖрдкрдХреЛ Way Back Home рд░реЗрд╕реНрдХреНрдпреВ рдиреЗрдЯрд╡рд░реНрдХ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рддреА рд╣реИ рдФрд░ рдЖрдкрдХреА рдПрдХреНрд╕рдкреНрд▓реЛрд░рд░ рдкрд╣рдЪрд╛рди рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рд░рдЦрддреА рд╣реИ. рдЗрд╕реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд░реВрдЯ рд╕реЗ рдЪрд▓рд╛рдПрдВ:
cd ~/way-back-home
chmod +x scripts/setup.sh
./scripts/setup.sh
рдЖрдкрдХреЛ рджреЛ рддрд░рд╣ рдХреА рдЬрд╛рдирдХрд╛рд░реА рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛.
рдЕрдкрдирд╛ рдЗрд╡реЗрдВрдЯ рдХреЛрдб рдбрд╛рд▓реЗрдВ
рдЗрд╡реЗрдВрдЯ рдХреЛрдб рд╕реЗ рдпрд╣ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдиреЗ рдХрд┐рд╕ рд╡рд░реНрдХрд╢реЙрдк рдЗрд╡реЗрдВрдЯ рдореЗрдВ рд╣рд┐рд╕реНрд╕рд╛ рд▓рд┐рдпрд╛ рд╣реИ.
рдЕрдЧрд░ рдЖрдк рдХрд┐рд╕реА рд╡рд░реНрдХрд╢реЙрдк рдореЗрдВ рд╣реИрдВ: рдХреНрдпреВрдЖрд░ рдХреЛрдб, рд╕реНрд▓рд╛рдЗрдб рдпрд╛ рд╡рд░реНрдХрд╢реЙрдк рдХреЗ рдЗрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рд╕реЗ рдорд┐рд▓рд╛ рдЗрд╡реЗрдВрдЯ рдХреЛрдб рдбрд╛рд▓реЗрдВ.
ЁЯЪА Welcome to Way Back Home!
Enter event code (from QR/slide): devfest-nyc-26
Validating event...
тЬУ Connected to: DevFest NYC 2026
рдЕрдЧрд░ рдЖрдкрдХреЛ рдЦреБрдж рд╕реЗ рд╕реАрдЦрдирд╛ рд╣реИ, рддреЛ: рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд▓рд░реНрдирд┐рдВрдЧ рдПрдирд╡рд╛рдпрд░рдореЗрдВрдЯ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, sandbox рдбрд╛рд▓реЗрдВ.
ЁЯЪА Welcome to Way Back Home!
Enter event code (from QR/slide): sandbox
Validating event...
тЬУ Connected to: Way Back Home Sandbox
рдПрдХреНрд╕рдкреНрд▓реЛрд░рд░ рдХрд╛ рдирд╛рдо рдЪреБрдирдирд╛
рдЕрдкрдиреЗ рдПрдХреНрд╕рдкреНрд▓реЛрд░рд░ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдпреВрдиреАрдХ рдирд╛рдо рдЪреБрдиреЗрдВ. рджреБрдирд┐рдпрд╛ рдХреЗ рдореИрдк рдФрд░ рд▓реАрдбрд░рдмреЛрд░реНрдб рдкрд░ рдЖрдкрдХреА рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдРрд╕реА рджрд┐рдЦреЗрдЧреА.
Choose your explorer name: AstroAyo
тЬУ Username available!
рдЕрдЧрд░ рдЖрдкрдХреЗ рдЪреБрдиреЗ рдЧрдП рдирд╛рдо рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓, рдЙрд╕реА рдЗрд╡реЗрдВрдЯ рдореЗрдВ рд╣рд┐рд╕реНрд╕рд╛ рд▓реЗрдиреЗ рд╡рд╛рд▓рд╛ рдХреЛрдИ рджреВрд╕рд░рд╛ рд╡реНрдпрдХреНрддрд┐ рдкрд╣рд▓реЗ рд╕реЗ рдХрд░ рд░рд╣рд╛ рд╣реИ, рддреЛ:
Choose your explorer name: SpaceExplorer
тЪая╕П That name is taken. Try another.
Choose your explorer name: SpaceExplorer42
тЬУ Username available!
рд╕реЗрдЯрдЕрдк рдкреВрд░реНрдг
рдкреНрд░реЛрд╕реЗрд╕ рдкреВрд░реА рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рдкреБрд╖реНрдЯрд┐ рдХрд╛ рдпрд╣ рдореИрд╕реЗрдЬ рджрд┐рдЦреЗрдЧрд╛:
Initializing your explorer profile...
тЬУ Environment configured!
Explorer ID: a1b2c3d4
Starting coordinates: (47, 23)
Next: cd level_0 && python customize.py
рд▓реЗрд╡рд▓ 0 рдкрд░ рдЬрд╛рдПрдВ
рдЕрдм рд▓реЗрд╡рд▓ 0 рдбрд╛рдпрд░реЗрдХреНрдЯреНрд░реА рдкрд░ рдЬрд╛рдПрдВ (рдЖрдкрдХреА рдбрд┐рдкреЗрдВрдбреЗрдВрд╕реА, рдореЙрдбреНрдпреВрд▓ 2 рд╕реЗ рдкрд╣рд▓реЗ рд╣реА рдЗрдВрд╕реНрдЯреЙрд▓ рд╣реЛ рдЪреБрдХреА рд╣реИрдВ):
cd level_0
рдЕрдкрдиреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреА рдЬрд╛рдВрдЪ рдХрд░рдирд╛
рджреЗрдЦреЗрдВ рдХрд┐ рдХреНрдпрд╛ рд╕реЗрд╡ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (config.json, рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд░реВрдЯ рдореЗрдВ рд╣реИ):
cat ../config.json
{
"event_code": "devfest-nyc-26",
"event_name": "DevFest NYC 2026",
"username": "AstroAyo",
"participant_id": "a1b2c3d4",
"starting_x": 47,
"starting_y": 23,
"api_base": "https://api.waybackhome.dev",
"project_id": "your-project-id"
}
рдЗрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓, рдмрд╛рдж рдХреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд░реЗрдВрдЧреА. рдЗрд╕рд╕реЗ, рд░реЗрд╕реНрдХреНрдпреВ рдиреЗрдЯрд╡рд░реНрдХ рдХреЛ рдЖрдкрдХреА рдкрд╣рдЪрд╛рди рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдорд┐рд▓реЗрдЧреА.
рдЖрдкрдиреЗ рдЕрднреА-рдЕрднреА рдХреНрдпрд╛ рдкреВрд░рд╛ рдХрд┐рдпрд╛
тЬУ Mission Control API рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛ
тЬУ рдПрдХреНрд╕рдкреНрд▓реЛрд░рд░ рдХреЗ рд▓рд┐рдП рдпреВрдиреАрдХ рдирд╛рдо рд░рд┐рдЬрд╝рд░реНрд╡ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛ
тЬУ рдЖрдкрдХреЛ рдкреНрд░рддрд┐рднрд╛рдЧреА рдЖрдИрдбреА рдФрд░ рд╢реБрд░реБрдЖрддреА рдХреЛрдСрд░реНрдбрд┐рдиреЗрдЯ рдорд┐рд▓ рдЧрдП рд╣реЛрдВ
тЬУ рдЖрдЧреЗ рдХреЗ рдЪрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕реЗрд╡ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛ
рдЕрдЧрд▓рд╛ рдЪрд░рдг: рдПрдХреНрд╕рдкреНрд▓реЛрд░рд░ рдХреЗ рд▓реБрдХ рдХреЛ рдкрд╕рдВрдж рдХреЗ рдореБрддрд╛рдмрд┐рдХ рдмрдирд╛рдПрдВ.
рдПрдХреНрд╕рдкреНрд▓реЛрд░рд░ рдХреЛ рдкрд╕рдВрдж рдХреЗ рдореБрддрд╛рдмрд┐рдХ рдмрдирд╛рдирд╛
рдЕрд╡рдзрд┐: 1 рдорд┐рдирдЯ
рдХрд╕реНрдЯрдо рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рдирд╛
рдЕрдкрдирд╛ рдЕрд╡рддрд╛рд░ рдЬрдирд░реЗрдЯ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рдПрдХреНрд╕рдкреНрд▓реЛрд░рд░ рдХреЗ рд▓реБрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рд╡рд┐рдХрд▓реНрдк рдЪреБрдирдиреЗ рд╣реЛрдВрдЧреЗ:
python customize.py
рдЕрдкрдиреЗ рд╕реВрдЯ рдХрд╛ рд░рдВрдЧ рдЪреБрдиреЗрдВ
рдПрдХреНрд╕рдкреНрд▓реЛрд░рд░ рдХреЗ рд╕реНрдкреЗрд╕ рд╕реВрдЯ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд░рдВрдЧ рдЪреБрдиреЗрдВ:
ЁЯОи Let's create your explorer identity!
Select suit color:
1. Deep Blue
2. Crimson Red
3. Forest Green
4. Royal Purple
5. Solar Gold
6. Silver
Choice [1-6, default=6]: 1
тЬУ Deep Blue selected
рдЕрдкрдиреЗ рдПрдХреНрд╕рдкреНрд▓реЛрд░рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдПрдВ (рдЬрд╝рд░реВрд░реА рдирд╣реАрдВ)
рдПрдХреНрд╕рдкреНрд▓реЛрд░рд░ рдХреА рдмрдирд╛рд╡рдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрдо рд╢рдмреНрджреЛрдВ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рджреА рдЬрд╛ рд╕рдХрддреА рд╣реИ. рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд░реИрдВрдбрдо рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдХреЗ рд▓рд┐рдП Enter рджрдмрд╛рдПрдВ:
Brief description of your explorer (or Enter for random):
Example: 'short dark hair, glasses, friendly smile'
> short dark hair, glasses, determined expression
тЬУ Preferences saved!
рдЕрдЧрд░ рдЖрдкрдиреЗ рдХреБрдЫ рднреА рдЯрд╛рдЗрдк рдХрд┐рдП рдмрд┐рдирд╛ Enter рджрдмрд╛рдпрд╛, рддреЛ рдЖрдкрдХреЛ рд░реИрдВрдбрдо рддреМрд░ рдкрд░ рдХреБрдЫ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рдорд┐рд▓реЗрдВрдЧреА:
>
тЬУ Random traits: confident expression, short styled hair
рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛
рдЖрдкрдХреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдПрдВ рдЕрдм рд╕реЗрд╡ рд╣реЛ рдЧрдИ рд╣реИрдВ:
тЬУ Preferences saved!
Next: Open generator.py and follow the codelab instructions
Then run: python create_identity.py
рдЕрдкрдбреЗрдЯ рдХрд┐рдП рдЧрдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░реЗрдВ:
cat ../config.json
рдЖрдкрдХреЛ рдЕрдкрдиреА рдЬреЛрдбрд╝реА рдЧрдИ рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдПрдВ рджрд┐рдЦреЗрдВрдЧреА:
{
"event_code": "devfest-nyc-26",
"event_name": "DevFest NYC 2026",
"username": "AstroAyo",
"participant_id": "a1b2c3d4",
"starting_x": 47,
"starting_y": 23,
"api_base": "https://api.waybackhome.dev",
"project_id": "your-project-id",
"suit_color": "deep blue with silver accents",
"appearance": "short dark hair, glasses, determined expression"
}
рдЖрдкрдиреЗ рдЕрднреА-рдЕрднреА рдХреНрдпрд╛ рдкреВрд░рд╛ рдХрд┐рдпрд╛
тЬУ рдЖрдкрдиреЗ рд╕реВрдЯ рдХрд╛ рд░рдВрдЧ рдЪреБрдирд╛ рд╣реЛ
тЬУ рдЖрдкрдиреЗ рдПрдХреНрд╕рдкреНрд▓реЛрд░рд░ рдХреА рдЗрдореЗрдЬ рддрдп рдХреА рд╣реЛ
тЬУ рдЗрдореЗрдЬ рдЬрдирд░реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рддреИрдпрд╛рд░ рд╣реЛ
рдЗрд╕рдХреЗ рдмрд╛рдж: рдореБрдЦреНрдп рдЗрд╡реЗрдВрдЯтАФрдЗрдореЗрдЬ рдЬрдирд░реЗрдЯ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдб рд▓рд┐рдЦрдирд╛!
рдЕрд╡рддрд╛рд░ рдЬрдирд░реЗрдЯ рдХрд░рдиреЗ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдмрдирд╛рдирд╛
рдЕрд╡рдзрд┐: 4 рдорд┐рдирдЯ
рдпрд╣ рдореБрдЦреНрдп рд▓рд░реНрдирд┐рдВрдЧ рдореЙрдбреНрдпреВрд▓ рд╣реИ. рдЖрдкрдХреЛ Python рдХреЛрдб рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛. рдЗрд╕рд╕реЗ Gemini рдХреА рдЗрдореЗрдЬ рдЬрдирд░реЗрдЯ рдХрд░рдиреЗ рдХреА рд╕реБрд╡рд┐рдзрд╛ (Nano Banana) рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдХреЗ, рдПрдХреНрд╕рдкреНрд▓реЛрд░рд░ рдХрд╛ рдпреВрдиреАрдХ рдЕрд╡рддрд╛рд░ рдЬрдирд░реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗрдЧрд╛.
рдЬрдирд░реЗрдЯрд░ рдлрд╝рд╛рдЗрд▓ рдЦреЛрд▓реЗрдВ
Cloud Shell Editor рдореЗрдВ рдЕрд╡рддрд╛рд░ рдЬрдирд░реЗрдЯ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдЯреВрд▓ рдЦреЛрд▓реЗрдВ:
cloudshell edit generator.py
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, Cloud Shell рдореЗрдВ Open Editor рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рдФрд░ level_0 рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ generator.py рдкрд░ рдЬрд╛рдПрдВ.
рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдХреЛ рд╕рдордЭрдирд╛
рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕реНрдЯрд╛рд░реНрдЯрд░ рдХреЛрдб рдФрд░ рддреАрди рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░ рд╕реЗрдХреНрд╢рди рд╣реЛрддреЗ рд╣реИрдВ. рдЗрдирдореЗрдВ рдЖрдкрдХреЛ рдЕрдкрдирд╛ рдХреЛрдб рдЬреЛрдбрд╝рдирд╛ рд╣реЛрддрд╛ рд╣реИ:
"""
Level 0: Avatar Generator
This module generates your unique space explorer avatar using
multi-turn image generation with Gemini (Nano Banana) for
character consistency across portrait and icon.
"""
from google import genai
from google.genai import types
from PIL import Image
import json
import os
import io
# Load configuration from setup (config.json is in project root)
CONFIG_PATH = "../config.json"
with open(CONFIG_PATH) as f:
config = json.load(f)
USERNAME = config["username"]
SUIT_COLOR = config["suit_color"]
APPEARANCE = config["appearance"]
# Initialize the Gemini client for Vertex AI
client = genai.Client(
vertexai=True,
project=os.environ.get("GOOGLE_CLOUD_PROJECT", config.get("project_id")),
location="us-central1"
)
def generate_explorer_avatar() -> dict:
"""
Generate portrait and icon using multi-turn chat for consistency.
The key technique here is using a CHAT SESSION rather than independent
API calls. This allows Gemini to "remember" the character it created
in the first turn, ensuring the icon matches the portrait.
Returns:
dict with portrait_path and icon_path
"""
# MODULE_5_STEP_1_CREATE_CHAT_SESSION
# TODO: Create a chat session for multi-turn generation
chat = None # Replace this line
# MODULE_5_STEP_2_GENERATE_PORTRAIT
# TODO: Generate the explorer portrait
portrait_image = None # Replace this section
# MODULE_5_STEP_3_GENERATE_ICON
# TODO: Generate a consistent map icon
icon_image = None # Replace this section
return {
"portrait_path": "outputs/portrait.png",
"icon_path": "outputs/icon.png"
}
if __name__ == "__main__":
# Create outputs directory if it doesn't exist
os.makedirs("outputs", exist_ok=True)
print(f"Generating avatar for {USERNAME}...")
result = generate_explorer_avatar()
print(f"тЬЕ Avatar created!")
print(f" Portrait: {result['portrait_path']}")
print(f" Icon: {result['icon_path']}")
рдЖрдкрдХреЛ рддреАрди TODO рд╕реЗрдХреНрд╢рди рдХреЛ рдЕрдкрдиреЗ рдХреЛрдб рд╕реЗ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛.
рдкрд╣рд▓рд╛ рдЪрд░рдг: рдЪреИрдЯ рд╕реЗрд╢рди рдмрдирд╛рдирд╛
MODULE_5_STEP_1_CREATE_CHAT_SESSION рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░ рдвреВрдВрдвреЗрдВ рдФрд░ chat = None # Replace this line рд▓рд╛рдЗрди рдХреЛ рдЗрд╕рд╕реЗ рдмрджрд▓реЗрдВ:
# MODULE_5_STEP_1_CREATE_CHAT_SESSION
# Create a chat session to maintain character consistency across generations.
# The chat session preserves context between turns, so Gemini "remembers"
# what it generated and can create consistent variations.
chat = client.chats.create(
model="gemini-2.5-flash-image", # Nano Banana - Gemini with image generation
config=types.GenerateContentConfig(
response_modalities=["TEXT", "IMAGE"]
)
)
рджреВрд╕рд░рд╛ рдЪрд░рдг: рдкреЛрд░реНрдЯреНрд░реЗрдЯ рдЬрдирд░реЗрдЯ рдХрд░рдирд╛
MODULE_5_STEP_2_GENERATE_PORTRAIT рдвреВрдВрдвреЗрдВ рдФрд░ portrait_image = None # Replace this section рдХреЛ рдЗрд╕ рдХреЛрдб рд╕реЗ рдмрджрд▓реЗрдВ:
# MODULE_5_STEP_2_GENERATE_PORTRAIT
# First turn: Generate the explorer portrait.
# This establishes the character that will be referenced in subsequent turns.
portrait_prompt = f"""Create a stylized space explorer portrait.
Character appearance: {APPEARANCE}
Name on suit patch: "{USERNAME}"
Suit color: {SUIT_COLOR}
CRITICAL STYLE REQUIREMENTS:
- Digital illustration style, clean lines, vibrant saturated colors
- Futuristic but weathered space suit with visible mission patches
- Background: Pure solid white (#FFFFFF) - absolutely no gradients, patterns, or elements
- Frame: Head and shoulders only, 3/4 view facing slightly left
- Lighting: Soft diffused studio lighting, no harsh shadows
- Expression: Determined but approachable
- Art style: Modern animated movie character portrait (similar to Pixar or Dreamworks style)
The white background is essential - the avatar will be composited onto a map."""
print("ЁЯОи Generating your portrait...")
portrait_response = chat.send_message(portrait_prompt)
# Extract the image from the response.
# Gemini returns a response with multiple "parts" - we need to find the image part.
portrait_image = None
for part in portrait_response.candidates[0].content.parts:
if part.inline_data is not None:
# Found the image! Convert from bytes to PIL Image and save.
image_bytes = part.inline_data.data
portrait_image = Image.open(io.BytesIO(image_bytes))
portrait_image.save("outputs/portrait.png")
break
if portrait_image is None:
raise Exception("Failed to generate portrait - no image in response")
print("тЬУ Portrait generated!")
рддреАрд╕рд░рд╛ рдЪрд░рдг: рдореИрдк рдЖрдЗрдХреЙрди рдЬрдирд░реЗрдЯ рдХрд░рдирд╛
MODULE_5_STEP_3_GENERATE_ICON рдХреЛ рдвреВрдВрдвреЗрдВ рдФрд░ icon_image = None # Replace this section рдХреЛ рдЗрд╕рд╕реЗ рдмрджрд▓реЗрдВ:
# MODULE_5_STEP_3_GENERATE_ICON
# Second turn: Generate a consistent icon for the map.
# Because we're in the same chat session, Gemini remembers the character
# from the portrait and will maintain visual consistency.
icon_prompt = """Now create a circular map icon of this SAME character.
CRITICAL REQUIREMENTS:
- SAME person, SAME face, SAME expression, SAME suit тАФ maintain perfect consistency with the portrait
- Tighter crop: just the head and very top of shoulders
- Background: Pure solid white (#FFFFFF)
- Optimized for small display sizes (will be used as a 64px map marker)
- Keep the exact same art style, colors, and lighting as the portrait
- Square 1:1 aspect ratio
This icon must be immediately recognizable as the same character from the portrait."""
print("ЁЯЦ╝я╕П Creating map icon...")
icon_response = chat.send_message(icon_prompt)
# Extract the icon image from the response
icon_image = None
for part in icon_response.candidates[0].content.parts:
if part.inline_data is not None:
image_bytes = part.inline_data.data
icon_image = Image.open(io.BytesIO(image_bytes))
icon_image.save("outputs/icon.png")
break
if icon_image is None:
raise Exception("Failed to generate icon - no image in response")
print("тЬУ Icon generated!")
рдЖрдкрдХрд╛ рдкреВрд░рд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдХреЛрдб
рддреАрдиреЛрдВ рд╕реЗрдХреНрд╢рди рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдкрдХрд╛ generate_explorer_avatar() рдлрд╝рдВрдХреНрд╢рди рдХреБрдЫ рдРрд╕рд╛ рджрд┐рдЦреЗрдЧрд╛:
def generate_explorer_avatar() -> dict:
"""
Generate portrait and icon using multi-turn chat for consistency.
The key technique here is using a CHAT SESSION rather than independent
API calls. This allows Gemini to "remember" the character it created
in the first turn, ensuring the icon matches the portrait.
Returns:
dict with portrait_path and icon_path
"""
# MODULE_5_STEP_1_CREATE_CHAT_SESSION
# Create a chat session to maintain character consistency across generations.
# The chat session preserves context between turns, so Gemini "remembers"
# what it generated and can create consistent variations.
chat = client.chats.create(
model="gemini-2.5-flash-image", # Nano Banana - Gemini with image generation
config=types.GenerateContentConfig(
response_modalities=["TEXT", "IMAGE"]
)
)
# MODULE_5_STEP_2_GENERATE_PORTRAIT
# First turn: Generate the explorer portrait.
# This establishes the character that will be referenced in subsequent turns.
portrait_prompt = f"""Create a stylized space explorer portrait.
Character appearance: {APPEARANCE}
Name on suit patch: "{USERNAME}"
Suit color: {SUIT_COLOR}
CRITICAL STYLE REQUIREMENTS:
- Digital illustration style, clean lines, vibrant saturated colors
- Futuristic but weathered space suit with visible mission patches
- Background: Pure solid white (#FFFFFF) - absolutely no gradients, patterns, or elements
- Frame: Head and shoulders only, 3/4 view facing slightly left
- Lighting: Soft diffused studio lighting, no harsh shadows
- Expression: Determined but approachable
- Art style: Modern animated movie character portrait (similar to Pixar or Dreamworks style)
The white background is essential - the avatar will be composited onto a map."""
print("ЁЯОи Generating your portrait...")
portrait_response = chat.send_message(portrait_prompt)
# Extract the image from the response.
# Gemini returns a response with multiple "parts" - we need to find the image part.
portrait_image = None
for part in portrait_response.candidates[0].content.parts:
if part.inline_data is not None:
# Found the image! Convert from bytes to PIL Image and save.
image_bytes = part.inline_data.data
portrait_image = Image.open(io.BytesIO(image_bytes))
portrait_image.save("outputs/portrait.png")
break
if portrait_image is None:
raise Exception("Failed to generate portrait - no image in response")
print("тЬУ Portrait generated!")
# MODULE_5_STEP_3_GENERATE_ICON
# Second turn: Generate a consistent icon for the map.
# Because we're in the same chat session, Gemini remembers the character
# from the portrait and will maintain visual consistency.
icon_prompt = """Now create a circular map icon of this SAME character.
CRITICAL REQUIREMENTS:
- SAME person, SAME face, SAME expression, SAME suit тАФ maintain perfect consistency with the portrait
- Tighter crop: just the head and very top of shoulders
- Background: Pure solid white (#FFFFFF)
- Optimized for small display sizes (will be used as a 64px map marker)
- Keep the exact same art style, colors, and lighting as the portrait
- Square 1:1 aspect ratio
This icon must be immediately recognizable as the same character from the portrait."""
print("ЁЯЦ╝я╕П Creating map icon...")
icon_response = chat.send_message(icon_prompt)
# Extract the icon image from the response
icon_image = None
for part in icon_response.candidates[0].content.parts:
if part.inline_data is not None:
image_bytes = part.inline_data.data
icon_image = Image.open(io.BytesIO(image_bytes))
icon_image.save("outputs/icon.png")
break
if icon_image is None:
raise Exception("Failed to generate icon - no image in response")
print("тЬУ Icon generated!")
return {
"portrait_path": "outputs/portrait.png",
"icon_path": "outputs/icon.png"
}
рдЕрдкрдиреА рдлрд╝рд╛рдЗрд▓ рд╕реЗрд╡ рдХрд░рдирд╛
generator.py рдХреЛ рд╕реЗрд╡ рдХрд░рдирд╛ рди рднреВрд▓реЗрдВ:
- Cloud Shell Editor: Ctrl+S (Windows/Linux) рдпрд╛ Cmd+S (Mac)
- vim: Escape рджрдмрд╛рдПрдВ. рдЗрд╕рдХреЗ рдмрд╛рдж,
:wqрдФрд░ Enter рдЯрд╛рдЗрдк рдХрд░реЗрдВ
рдЖрдкрдиреЗ рдЕрднреА-рдЕрднреА рдХреНрдпрд╛ рдмрдирд╛рдпрд╛
тЬУ рдПрдХ рд╕реЗ рдЬрд╝реНрдпрд╛рджрд╛ рдмрд╛рд░ рдЗрдореЗрдЬ рдЬрдирд░реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЪреИрдЯ рд╕реЗрд╢рди рдмрдирд╛рдпрд╛ рдЧрдпрд╛
тЬУ рд╕реНрдЯрд╛рдЗрд▓ рд╕реЗ рдЬреБрдбрд╝реА рдкрд╛рдмрдВрджрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдкреЛрд░реНрдЯреНрд░реЗрдЯ рдЬрдирд░реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкреВрд░реА рдЬрд╛рдирдХрд╛рд░реА рд╡рд╛рд▓рд╛ рдкреНрд░реЙрдореНрдкреНрдЯ рдмрдирд╛рдпрд╛ рдЧрдпрд╛
тЬУ рдмрд╛рддрдЪреАрдд рдХреЗ рдХреЙрдиреНрдЯреЗрдХреНрд╕реНрдЯ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдХреЗ, рдореИрдк рдХрд╛ рдПрдХ рдЬреИрд╕рд╛ рдЖрдЗрдХреЙрди рдЬрдирд░реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛
тЬУ Gemini рд╕реЗ рдорд┐рд▓реЗ рдЬрд╡рд╛рдмреЛрдВ рд╕реЗ рдЗрдореЗрдЬ рдбреЗрдЯрд╛ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдирд╛ рд╕реАрдЦрд╛ рдЧрдпрд╛
рдорд╛рд╕реНрдЯрд░ рдХрд┐рдП рдЧрдП рдореБрдЦреНрдп рд╕рд┐рджреНрдзрд╛рдВрдд:
| рд╕рд┐рджреНрдзрд╛рдВрдд | рдЖрдкрдиреЗ рдХреНрдпрд╛ рд╕реАрдЦрд╛ |
|---|---|
| рдЪреИрдЯ рд╕реЗрд╢рди | client.chats.create() рдХрдИ рдмрд╛рд░ рдмрд╛рддрдЪреАрдд рд╣реЛрдиреЗ рдкрд░ рднреА рд╕рдВрджрд░реНрдн рдХреЛ рдмрдирд╛рдП рд░рдЦрддрд╛ рд╣реИ |
| рдЬрд╡рд╛рдм рджреЗрдиреЗ рдХреЗ рддрд░реАрдХреЗ | ["TEXT", "IMAGE"] рд╕реЗ, рдЬрд╡рд╛рдмреЛрдВ рдореЗрдВ рдЗрдореЗрдЬ рдЬрдирд░реЗрдЯ рдХрд░рдиреЗ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдЪрд╛рд▓реВ рд╣реЛрддреА рд╣реИ |
| рдкреНрд░реЙрдореНрдкреНрдЯ рдХрд╛ рд╕реНрдЯреНрд░рдХреНрдЪрд░ | рд╡рд┐рд╖рдп тЖТ рд╡реИрд░рд┐рдПрдмрд▓ тЖТ рд╕реНрдЯрд╛рдЗрд▓ тЖТ рддрдХрдиреАрдХреА рд╕реАрдорд╛рдПрдВ |
| рдХреИрд░реЗрдХреНрдЯрд░ рдХреА рдПрдХ рдЬреИрд╕реА рд╕реНрдЯрд╛рдЗрд▓ рд░рдЦрдирд╛ | рдПрдХ рд╣реА рдЪреИрдЯ рд╕реЗрд╢рди = рд╕рднреА рдЗрдореЗрдЬ рдореЗрдВ рдПрдХ рд╣реА рд╡рд░реНрдг |
| рдЬрд╡рд╛рдм рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдирд╛ | рдЬрд╡рд╛рдм рдХреЗ рд╣рд┐рд╕реНрд╕реЛрдВ рдореЗрдВ, inline_data рд╕реЗ рдЗрдореЗрдЬ рдирд┐рдХрд╛рд▓рдирд╛ |
рдЕрдЧрд▓рд╛ рдЪрд░рдг: рдЕрдкрдирд╛ рдХреЛрдб рдЪрд▓рд╛рдПрдВ рдФрд░ рдореИрдк рдкрд░ рдЕрдкрдиреА рдЬрдЧрд╣ рджреЗрдЦреЗрдВ!
рдЬрдирд░реЗрдЯ рдХрд░реЗрдВ рдФрд░ рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд░реЗрдВ
рдЕрд╡рдзрд┐: рджреЛ рдорд┐рдирдЯ
рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЖрдИрдбреА рд╕реЗрдЯ рдХрд░рдирд╛
рдкрдХреНрдХрд╛ рдХрд░реЗрдВ рдХрд┐ рдЖрдкрдХрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЖрдИрдбреА, рдПрдирд╡рд╛рдпрд░рдореЗрдВрдЯ рд╡реИрд░рд┐рдПрдмрд▓ рдХреЗ рддреМрд░ рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реЛ:
export GOOGLE_CLOUD_PROJECT=$(gcloud config get-value project)
Identity Creator рдХреЛ рдЪрд▓рд╛рдПрдВ
рдЕрдм рдореБрдЦреНрдп рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рдПрдВ. рдпрд╣ рд╕реНрдХреНрд░рд┐рдкреНрдЯ, рдЬрдирд░реЗрдЯ рдХрд░рдиреЗ, рдЕрдкрд▓реЛрдб рдХрд░рдиреЗ, рдФрд░ рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд░рдиреЗ рдХреА рдкреНрд░реЛрд╕реЗрд╕ рдХреЛ рдореИрдиреЗрдЬ рдХрд░рддреА рд╣реИ:
python create_identity.py
рдЖрдкрдХреЛ рдЬрдирд░реЗрдЯ рд╣реЛрдиреЗ рдХреА рдкреНрд░реЛрд╕реЗрд╕ рд░реАрдпрд▓ рдЯрд╛рдЗрдо рдореЗрдВ рджрд┐рдЦреЗрдЧреА:
ЁЯЪА Creating identity for AstroAyo...
ЁЯОи Generating your portrait...
тЬУ Portrait generated!
ЁЯЦ╝я╕П Creating map icon...
тЬУ Icon generated!
тШБя╕П Uploading to mission database...
тЬУ Avatar uploaded!
ЁЯУН Registering with rescue network...
тЬУ Registration complete!
тХФтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХЧ
тХС тЬЕ IDENTITY CONFIRMED! тХС
тХатХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХг
тХС тХС
тХС Explorer: AstroAyo тХС
тХС Location: (47, 23) тАФ unconfirmed тХС
тХС тХС
тХС ЁЯЧ║я╕П You're now on the map! тХС
тХС https://waybackhome.dev/e/devfest-nyc-26 тХС
тХС тХС
тХС NEXT: Proceed to Level 1 to pinpoint your exact location! тХС
тХС тХС
тХЪтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХРтХЭ
рдЬрдирд░реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдЕрд╡рддрд╛рд░ рджреЗрдЦрдирд╛
рдЬрдирд░реЗрдЯ рдХреА рдЧрдИ рдЗрдореЗрдЬ рдХреЛ рд╕реНрдерд╛рдиреАрдп рддреМрд░ рдкрд░ рджреЗрдЦреЗрдВ:
# List the generated files
ls -la outputs/
# Download to view on your local machine
cloudshell download outputs/portrait.png
cloudshell download outputs/icon.png
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, outputs/ рдлрд╝реЛрд▓реНрдбрд░ рдкрд░ рдЬрд╛рдХрд░ рдФрд░ рдЗрдореЗрдЬ рдлрд╝рд╛рдЗрд▓реЛрдВ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ, рдЙрдиреНрд╣реЗрдВ рд╕реАрдзреЗ Cloud Shell Editor рдореЗрдВ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ.
рдЬрдирд░реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдкреЛрд░реНрдЯреНрд░реЗрдЯ рдФрд░ рдЖрдЗрдХреЙрди, рдЗрди рдЗрдореЗрдЬ рдХреА рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:
![]()
рдореИрдк рдкрд░ рдЕрдкрдиреА рдЬрдЧрд╣ рдХреА рдЬрд╛рдирдХрд╛рд░реА рджреЗрдЦрдирд╛!
рдЕрдкрдиреЗ рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рджреБрдирд┐рдпрд╛ рдХрд╛ рдореИрдк рдпреВрдЖрд░рдПрд▓ рдЦреЛрд▓реЗрдВ:
https://waybackhome.dev/e/{your-event-code}
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП: https://waybackhome.dev/e/devfest-nyc-26
рдореИрдк рдкрд░ рдЕрдкрдирд╛ рдЕрд╡рддрд╛рд░ рдвреВрдВрдвреЗрдВ! рдЖрдкрдХреЛ рдпреЗ рдЪреАрдЬрд╝реЗрдВ рджрд┐рдЦреЗрдВрдЧреА:
- рдЖрдЗрдХреЙрди, рдЬреЛ рдЧреНрд░рд╣ рдХреА рд╕рддрд╣ рдкрд░ рдЖрдкрдХреА рдЬрдЧрд╣ рджрд┐рдЦрд╛рддрд╛ рд╣реИ
- рдЖрдкрдХреЗ рдЖрдЗрдХреЙрди рдХреЗ рдиреАрдЪреЗ рд▓реЗрдмрд▓ рдХреЗ рддреМрд░ рдкрд░ рдЖрдкрдХрд╛ рдПрдХреНрд╕рдкреНрд▓реЛрд░рд░ рдиреЗрдо
- рдЖрдкрдХреЗ рдорд╛рд░реНрдХрд░ рдХреЗ рдЖрд╕-рдкрд╛рд╕ рдзреАрд░реЗ-рдзреАрд░реЗ рдкрд▓реНрд╕ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╣рд▓реНрдХрд╛ рдмреАрдХрди
![]()
рдЬрд╝реНрдпрд╛рджрд╛ рдЬрд╛рдирдХрд╛рд░реА рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдб рдореЗрдВ рдЕрдкрдиреА рдкреВрд░реА рдЗрдореЗрдЬ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдЕрдкрдиреЗ рдорд╛рд░реНрдХрд░ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ.
рдХреНрдпрд╛ рдЖрдкрдХреЛ рдЕрдкрдирд╛ рдЕрд╡рддрд╛рд░ рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИ? рдлрд┐рд░ рд╕реЗ рдЬрдирд░реЗрдЯ рдХрд░реЛ!
рдЕрдЧрд░ рдЖрдкрдХреЛ рдХреЛрдИ рджреВрд╕рд░рд╛ рдЕрд╡рддрд╛рд░ рдЪрд╛рд╣рд┐рдП, рддреЛ рдЙрд╕реЗ рдлрд┐рд░ рд╕реЗ рдЬрдирд░реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
# Option 1: Change your appearance settings first
python customize.py
# Option 2: Just regenerate with current settings
python create_identity.py
create_identity.py рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдиреЗ рдкрд░, рд╣рд░ рдмрд╛рд░ рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирдпрд╛ рдЕрд╡рддрд╛рд░ рдЬрдирд░реЗрдЯ рд╣реЛрддрд╛ рд╣реИ. рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╣рд░ рдирдП рдЪреИрдЯ рд╕реЗрд╢рди рдХреЗ рд▓рд┐рдП, рдПрдХ рдирдпрд╛ рдЕрд╡рддрд╛рд░ рдЬрдирд░реЗрдЯ рд╣реЛрддрд╛ рд╣реИ. рд╕рд╛рде рд╣реА, рдпрд╣ рдЖрдкрдХреЗ рд░рдЬрд┐рд╕реНрдЯреНрд░реЗрд╢рди рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рддрд╛ рд╣реИ. рдЬрдм рддрдХ рдЖрдкрдХреЛ рдордирдореБрддрд╛рдмрд┐рдХ рдирддреАрдЬреЗ рди рдорд┐рд▓ рдЬрд╛рдПрдВ, рддрдм рддрдХ рдмреЗрдЭрд┐рдЭрдХ рдмрджрд▓рд╛рд╡ рдХрд░реЗрдВ!
рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╣рд▓
рдЖрдкрдиреЗ рдЕрднреА-рдЕрднреА рдХреНрдпрд╛ рдкреВрд░рд╛ рдХрд┐рдпрд╛
тЬУ рдПрдХреНрд╕рдкреНрд▓реЛрд░рд░ рдХрд╛ рдпреВрдиреАрдХ рдкреЛрд░реНрдЯреНрд░реЗрдЯ рдЬрдирд░реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛ
тЬУ рдореИрдк рдХрд╛ рдЖрдЗрдХреЙрди рдПрдХ рдЬреИрд╕рд╛ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реЛ
тЬУ рдорд┐рд╢рди рдХрдВрдЯреНрд░реЛрд▓ рдореЗрдВ рдРрд╕реЗрдЯ рдЕрдкрд▓реЛрдб рдХреА рдЧрдИ рд╣реЛрдВ
тЬУ рд░реЗрд╕реНрдХреНрдпреВ рдиреЗрдЯрд╡рд░реНрдХ рдореЗрдВ рдЕрдкрдиреА рдкрд╣рдЪрд╛рди рд░рдЬрд┐рд╕реНрдЯрд░ рдХреА рдЧрдИ рд╣реЛ
тЬУ рд▓рд╛рдЗрд╡ рд╡рд░реНрд▓реНрдб рдореИрдк рдкрд░ рдЖрдкрдХреА рдкрд╣рдЪрд╛рди рджрд┐рдЦ рд░рд╣реА рд╣реЛ!
рдмрдзрд╛рдИ рд╣реЛ, рдПрдХреНрд╕рдкреНрд▓реЛрд░рд░! рдЕрдм рдЖрдк рдмрдЪрд╛рд╡ рдиреЗрдЯрд╡рд░реНрдХ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛ рдЧрдП рд╣реИрдВ. рдЖрдкрдХрд╛ рдмреАрдХрди рдЪрд╛рд▓реВ рд╣реИ (рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдзреБрдВрдзрд▓рд╛ рд╣реИ). рд╕рд╛рде рд╣реА, рдЕрдиреНрдп рд╕рд░реНрд╡рд╛рдЗрд╡рд░ рдЖрдкрдХреЛ рдореИрдк рдкрд░ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ.
рдирддреАрдЬрд╛
рдЕрд╡рдзрд┐: 1 рдорд┐рдирдЯ
рдЖрдкрдиреЗ рдХреНрдпрд╛ рдмрдирд╛рдпрд╛
рдЖрдкрдиреЗ рд╕рд┐рд░реНрдлрд╝ 10 рдорд┐рдирдЯ рдореЗрдВ, рдПрдЖрдИ рдХреА рдорджрдж рд╕реЗ рдХрдИ рдмрд╛рд░ рдЗрдореЗрдЬ рдЬрдирд░реЗрдЯ рдХрд░рдиреЗ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдХреЗ, рдЕрд╡рддрд╛рд░ рдЬрдирд░реЗрдЯ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдкреВрд░рд╛ рд╕рд┐рд╕реНрдЯрдо рдмрдирд╛рдпрд╛:
тФМтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФР
тФВ Your Creation тФВ
тФЬтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФд
тФВ тФВ
тФВ ЁЯУЭ Input ЁЯЦ╝я╕П Output тФВ
тФВ тФАтФАтФАтФАтФАтФАтФАтФАтФАтФА тФАтФАтФАтФАтФАтФАтФАтФА тФВ
тФВ тАв Explorer name тАв Stylized portrait тФВ
тФВ тАв Suit color тАв Consistent map icon тФВ
тФВ тАв Appearance description тАв Live map presence тФВ
тФВ тФВ
тФЬтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФд
тФВ тФВ
тФВ ЁЯза Techniques You Used тФВ
тФВ тФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФА тФВ
тФВ тАв Multi-turn chat sessions for character consistency тФВ
тФВ тАв Structured prompt engineering with style constraints тФВ
тФВ тАв Response parsing to extract generated images тФВ
тФВ тАв API integration for cloud registration тФВ
тФВ тФВ
тФФтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФШ
рд╕реАрдЦрдиреЗ рд▓рд╛рдпрдХ рдЬрд╝рд░реВрд░реА рдмрд╛рддреЗрдВ
| рд▓реЗрд╕рди | рдпрд╣ рдЬрд╝рд░реВрд░реА рдХреНрдпреЛрдВ рд╣реИ |
|---|---|
| рдЪреИрдЯ рд╕реЗрд╢рди рдореЗрдВ рдХреЙрдиреНрдЯреЗрдХреНрд╕реНрдЯ рдмрдирд╛рдП рд░рдЦрдирд╛ | рдпрд╣ рд╕реБрд╡рд┐рдзрд╛, рдПрдХ рдЬреИрд╕реА рджрд┐рдЦрдиреЗ рд╡рд╛рд▓реА рдХрдИ рдЗрдореЗрдЬ рдЬрдирд░реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╝рд░реВрд░реА рд╣реИ. рдЗрд╕рд╕реЗ рдЗрдореЗрдЬ рдореЗрдВ рдореМрдЬреВрдж рдХрд┐рд░рджрд╛рд░ рдХреА рд╕реНрдЯрд╛рдЗрд▓ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдирд╣реАрдВ рд╣реЛрддрд╛ |
| рдкреНрд░реЙрдореНрдкреНрдЯ рдХрд╛ рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИ | рд╕рд╛рдлрд╝ рддреМрд░ рдкрд░ рдмрддрд╛рдИ рдЧрдИ рд╢рд░реНрддреЛрдВ (рд╡реНрд╣рд╛рдЗрдЯ рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб, рдЦрд╛рд╕ рд╕реНрдЯрд╛рдЗрд▓, рдлрд╝реНрд░реЗрдорд┐рдВрдЧ) рдХреЗ рд╣рд┐рд╕рд╛рдм рд╕реЗ, рдЕрдиреБрдорд╛рдирд┐рдд рдФрд░ рдкреНрд░реЛрдбрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдирддреАрдЬреЗ рдорд┐рд▓рддреЗ рд╣реИрдВ |
| рдПрдХ рд╕реЗ рдЬрд╝реНрдпрд╛рджрд╛ рдмрд╛рд░ рдмрд╛рддрдЪреАрдд рдХрд░рдиреЗ рдХреА рд╕реБрд╡рд┐рдзрд╛, рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рд╕реБрд╡рд┐рдзрд╛ рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИ | рдЪреИрдЯ рдореЗрдВ рдореМрдЬреВрдж рд╣рд░ рдореИрд╕реЗрдЬ, рдкрд┐рдЫрд▓реЗ рдХреЙрдиреНрдЯреЗрдХреНрд╕реНрдЯ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рддреИрдпрд╛рд░ рд╣реЛрддрд╛ рд╣реИ. рдЗрд╕рд╕реЗ, рдЬрд╡рд╛рдм рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдФрд░ рдЙрд╕рдореЗрдВ рдПрдХрд░реВрдкрддрд╛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдореЗрдВ рдорджрдж рдорд┐рд▓рддреА рд╣реИ |
| рдЬрд╡рд╛рдм рджреЗрдиреЗ рдХреЗ рддрд░реАрдХреЗ рд╕реЗ рдЬреБрдбрд╝реЗ рдХрдВрдЯреНрд░реЛрд▓ рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ | рдЗрдореЗрдЬ рдЬрдирд░реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, ["TEXT", "IMAGE"] рд╕реЗрдЯрд┐рдВрдЧ рдЪрд╛рд▓реВ рдХрд░рдирд╛ рдЬрд╝рд░реВрд░реА рд╣реИ. рдЗрд╕рдХреЗ рдмрд┐рдирд╛, рдЖрдкрдХреЛ рд╕рд┐рд░реНрдлрд╝ рдЯреЗрдХреНрд╕реНрдЯ рдорд┐рд▓реЗрдЧрд╛ |
рдХреАрдордд рдХреА рдЦрд╛рд╕ рдЬрд╛рдирдХрд╛рд░реА
рдЗрд╕ рд▓реЗрд╡рд▓ рдХреЗ рд▓рд┐рдП, рдЖрдкрдиреЗ Gemini 2.5 Flash (Nano Banana) рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдХреЗ рджреЛ рдЗрдореЗрдЬ рдЬрдирд░реЗрдЯ рдХреА рд╣реИрдВ:
| рдЖрдЗрдЯрдо | рдЯреЛрдХрди | рд▓рд╛рдЧрдд |
|---|---|---|
| рдкреЛрд░реНрдЯреНрд░реЗрдЯ (1024├Ч1024) | ~1,290 рдЖрдЙрдЯрдкреБрдЯ рдЯреЛрдХрди | ~4.35 рд░реБрдкрдпреЗ |
| рдЖрдЗрдХреЙрди (1024├Ч1024) | ~1,290 рдЖрдЙрдЯрдкреБрдЯ рдЯреЛрдХрди | ~4.35 рд░реБрдкрдпреЗ |
| рдХреБрд▓ | ~2,580 рдЯреЛрдХрди | ~0.08 рдбреЙрд▓рд░ |
рд╕рдлрд╝рд░ рдЬрд╛рд░реА рд╣реИ
рдПрдХреНрд╕рдкреНрд▓реЛрд░рд░ рдХреЗ рддреМрд░ рдкрд░ рдЖрдкрдХреА рдкрд╣рдЪрд╛рди рдХреА рдкреБрд╖реНрдЯрд┐ рд╣реЛ рдЧрдИ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ: рдЖрдкрдХреА рдЬрдЧрд╣ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдХреА рдкреБрд╖реНрдЯрд┐ рдирд╣реАрдВ рд╣реБрдИ рд╣реИ.
рджреБрдирд┐рдпрд╛ рдХрд╛ рдореИрдк рджреЗрдЦреЗрдВтАФрдЖрдкрдХрд╛ рдмреАрдХрди рдзреБрдВрдзрд▓рд╛ рд╣реИ рдФрд░ рдзреАрд░реЗ-рдзреАрд░реЗ рдкрд▓реНрд╕ рдХрд░ рд░рд╣рд╛ рд╣реИ. рд░реЗрд╕реНрдХреНрдпреВ рдиреЗрдЯрд╡рд░реНрдХ рдХреЛ рдкрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдореМрдЬреВрдж рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЙрдиреНрд╣реЗрдВ рдпрд╣ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЖрдк рдХрд┐рд╕ рдЬрдЧрд╣ рдкрд░ рд╣реИрдВ. рдЖрдкрдХреА рд▓реЛрдХреЗрд╢рди, рдкреГрдереНрд╡реА рдХреА рд╕рддрд╣ рдХреЗ рдХрд┐рд╕реА рдмрдбрд╝реЗ рдЗрд▓рд╛рдХреЗ рдореЗрдВ рдХрд╣реАрдВ рднреА рд╣реЛ рд╕рдХрддреА рд╣реИ.
рд▓реЗрд╡рд▓ 1: рдЕрдкрдиреА рдЬрдЧрд╣ рдХреА рдЬрд╛рдирдХрд╛рд░реА рд╕реЗрдЯ рдХрд░рдирд╛ рдореЗрдВ, рдЖрдкрдХреЛ рдпреЗ рдХрд╛рдо рдХрд░рдиреЗ рд╣реЛрдВрдЧреЗ:
- Google рдХреЗ рдПрдЬреЗрдВрдЯ рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рдХрд┐рдЯ (рдПрдбреАрдХреЗ) рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдХреЗ, рдорд▓реНрдЯреА-рдПрдЬреЗрдВрдЯ рд╕рд┐рд╕реНрдЯрдо рдмрдирд╛рдирд╛
- рднреВрд╡реИрдЬреНрдЮрд╛рдирд┐рдХ, рд╡рдирд╕реНрдкрддрд┐ рд╡рд┐рдЬреНрдЮрд╛рди, рдФрд░ рдЦрдЧреЛрд▓реАрдп рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП рдПрдорд╕реАрдкреА рд╕рд░реНрд╡рд░ рдмрдирд╛рдирд╛
- рдЯреЗрдХреНрд╕реНрдЯ, рдЗрдореЗрдЬ, рдФрд░ рд╡реАрдбрд┐рдпреЛ рд╡рдЧреИрд░рд╣ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдХреЗ рджрд┐рдП рдЧрдП рдЗрдирдкреБрдЯ рдХреЛ рдкреНрд░реЛрд╕реЗрд╕ рдХрд░рдирд╛. рдЬреИрд╕реЗ, рджреБрд░реНрдШрдЯрдирд╛ рдХреА рдЬрдЧрд╣ рдХреА рдЗрдореЗрдЬ
- рдПрдЖрдИ рдХреА рдорджрдж рд╕реЗ, рдкреБрд╖реНрдЯрд┐ рдХреА рдЧрдИ рдЬрдЧрд╣ рдХрд╛ рдЯрдкреЛрдЧреНрд░рд╛рдлрд╝рд┐рдХрд▓ рдореИрдк рдЬрдирд░реЗрдЯ рдХрд░рдирд╛
- рдЕрдкрдиреЗ рдмреАрдХрди рдХреЛ рдЪрд╛рд▓реВ рдХрд░реЗрдВ, рддрд╛рдХрд┐ рдмрдЪрд╛рд╡ рджрд▓ рдЖрдкрдХреЛ рдвреВрдВрдв рд╕рдХреЗ!
рд▓реЗрд╡рд▓ 1 рдореЗрдВ, рдЬрд╝реНрдпрд╛рджрд╛ рдРрдбрд╡рд╛рдВрд╕ рдХреЙрдиреНрд╕реЗрдкреНрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ. рдЬреИрд╕реЗ, рдорд▓реНрдЯреА-рдПрдЬреЗрдВрдЯ рдСрд░реНрдХреЗрд╕реНрдЯреНрд░реЗрд╢рди, рдореЙрдбрд▓ рдХреЙрдиреНрдЯреЗрдХреНрд╕реНрдЯ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ (рдПрдорд╕реАрдкреА), рдФрд░ рдкреНрд░реЛрдбрдХреНрд╢рди рдбрд┐рдкреНрд▓реЙрдпрдореЗрдВрдЯ рдкреИрдЯрд░реНрди. рдЖрдкрдХреЛ рдПрдХ рдореЙрдбрд▓ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдиреЗ рд╕реЗ рд▓реЗрдХрд░, рдкреВрд░рд╛ рдПрдЬреЗрдВрдЯрд┐рдХ рд╕рд┐рд╕реНрдЯрдо рдмрдирд╛рдиреЗ рддрдХ рдХрд╛ рддрд░реАрдХрд╛ рдмрддрд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛.
рд╕рд╛рдлрд╝ рдХрд░реЗрдВ (рдЬрд╝рд░реВрд░реА рдирд╣реАрдВ)
рдЕрдЧрд░ рдЖрдкрдХреЛ рд▓реЛрдХрд▓ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдХреНрд▓реАрди рдЕрдк рдХрд░рдирд╛ рд╣реИ (level_0 рдбрд╛рдпрд░реЗрдХреНрдЯреНрд░реА рд╕реЗ рдЪрд▓рд╛рдПрдВ):
rm -rf outputs/
rm ../config.json
deactivate # Exit virtual environment
рд░реЗрд╕реНрдХреНрдпреВ рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рд╕рд╛рде рдЖрдкрдХрд╛ рд░рдЬрд┐рд╕реНрдЯреНрд░реЗрд╢рди рдмрдирд╛ рд░рд╣рддрд╛ рд╣реИ. рд▓реЛрдХрд▓ рдлрд╝рд╛рдЗрд▓реЗрдВ рдорд┐рдЯрд╛рдиреЗ рдХреЗ рдмрд╛рдж рднреА, рдЖрдкрдХреЛ рдореИрдк рдкрд░ рджрд┐рдЦрд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛. рдЗрдореЗрдЬ рдХреЛ рдХреНрд▓рд╛рдЙрдб рдореЗрдВ рд╕реЗрд╡ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рди рдХрд┐ рдбрд┐рд╡рд╛рдЗрд╕ рдореЗрдВ.
рд╕рдВрд╕рд╛рдзрди
- Gemini рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдХреЗ рдЗрдореЗрдЬ рдЬрдирд░реЗрдЯ рдХрд░рдиреЗ рдХреА рд╕реБрд╡рд┐рдзрд╛ рд╕реЗ рдЬреБрдбрд╝рд╛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝
- рдЗрдореЗрдЬ рдЬрдирд░реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЙрдореНрдкреНрдЯ рдЗрдВрдЬреАрдирд┐рдпрд░рд┐рдВрдЧ рдЧрд╛рдЗрдб
- Nano Banana рд╕реЗ рдЬреБрдбрд╝реА рд╕реВрдЪрдирд╛ рджреЗрдиреЗ рд╡рд╛рд▓рд╛ рдмреНрд▓реЙрдЧ
- Way Back Home Repository
- рдкрд╣рд▓рд╛ рд▓реЗрд╡рд▓: рдЕрдкрдиреА рдЬрдЧрд╣ рдХреА рдЬрд╛рдирдХрд╛рд░реА рд╢реЗрдпрд░ рдХрд░рдирд╛
рдЖрдкрдХреЗ рдмреАрдХрди рдХреА рдкреБрд╖реНрдЯрд┐ рд╣реЛрдирд╛ рдмрд╛рдХреА рд╣реИ. рдПрдХреНрд╕рдкреНрд▓реЛрд░рд░, рд▓реЗрд╡рд▓ 1 рдореЗрдВ рдорд┐рд▓рддреЗ рд╣реИрдВ. ЁЯЪА
рдмреЛрдирд╕: рдлрд╝реЛрдЯреЛ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдЕрд╡рддрд╛рд░ (рдЬрд╝рд░реВрд░реА рдирд╣реАрдВ)
рдЕрд╡рдзрд┐: рддреАрди рдорд┐рдирдЯ
рдлрд╝реЛрдЯреЛ рд╕реЗ рдЕрд╡рддрд╛рд░ рдмрдирд╛рдиреЗ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрдм рдХрд░реЗрдВ
рдЕрдЧрд░ рдЖрдкрдХреЛ рдпрд╣ рддрд░реАрдХрд╛ рдкрд╕рдВрдж рд╣реИ, рддреЛ:
- рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдЕрд╡рддрд╛рд░ рдХреЛ рдЕрдкрдиреЗ рдЬреИрд╕рд╛ рдмрдирд╛рдирд╛ рд╣реИ
- рдЖрдкрдХреЛ рдХрд┐рд╕реА рдлрд╝реЛрдЯреЛ рдХреЛ рд╕реНрдЯрд╛рдЗрд▓ рдХрд░рдирд╛ рд╣реИ
- рдЖрдкрдХреЛ Gemini рдХреА рдЗрдореЗрдЬ рдХреЛ рджреВрд╕рд░реА рдЗрдореЗрдЬ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдирд╛ рд╣реЛ
рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ
рд╕рд┐рд░реНрдлрд╝ рдЯреЗрдХреНрд╕реНрдЯ рдХреЗ рдмреНрдпреМрд░реЗ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХреЛрдИ рдХрд┐рд░рджрд╛рд░ рдЬрдирд░реЗрдЯ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдХреЛрдИ рдлрд╝реЛрдЯреЛ рдЙрдкрд▓рдмреНрдз рдХрд░рд╛рдПрдВ рдФрд░ Gemini рд╕реЗ рдЙрд╕реЗ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣реЗрдВ. рд╕рд╛рде рд╣реА, рдпрд╣ рднреА рдХрд╣реЗрдВ рдХрд┐ рдлрд╝реЛрдЯреЛ рдореЗрдВ рджрд┐рдЦ рд░рд╣реЗ рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд▓реБрдХ рдореЗрдВ рдХреЛрдИ рдмрджрд▓рд╛рд╡ рди рдХрд┐рдпрд╛ рдЬрд╛рдП:
![]()
рдЕрдкрдиреА рдлрд╝реЛрдЯреЛ рдЕрдкрд▓реЛрдб рдХрд░реЗрдВ
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, Cloud Shell рдореЗрдВ рдХреЛрдИ рдлрд╝реЛрдЯреЛ рдЕрдкрд▓реЛрдб рдХрд░реЗрдВ:
- Cloud Shell рдореЗрдВ, рдЯрд░реНрдорд┐рдирд▓ рдЯреВрд▓рдмрд╛рд░ рдореЗрдВ рдореМрдЬреВрдж рддреАрди рдмрд┐рдВрджреБ рд╡рд╛рд▓реЗ рдореЗрдиреНрдпреВ (тЛо) рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ
- рдЕрдкрд▓реЛрдб рдХрд░реЗрдВ рдХреЛ рдЪреБрдиреЗрдВ
- рд╕рд╛рдлрд╝ рддреМрд░ рдкрд░ рджрд┐рдЦрдиреЗ рд╡рд╛рд▓реА рд╣реЗрдбрд╢реЙрдЯ рдлрд╝реЛрдЯреЛ рдЪреБрдиреЗрдВ (JPEG рдпрд╛ PNG)
- рдЕрдкрд▓реЛрдб рдХрд┐рдП рдЧрдП рдкрд╛рде рдХреЛ рдиреЛрдЯ рдХрд░реЗрдВ. рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
/home/your-username/my_photo.jpg)
рдЬрдирд░реЗрдЯрд░ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХрд░рдирд╛
рдХрд┐рд╕реА рдлрд╝реЛрдЯреЛ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ generator.py рдореЗрдВ рдкреЛрд░реНрдЯреНрд░реЗрдЯ рдЬрдирд░реЗрдЯ рдХрд░рдиреЗ рдХреЗ рдЪрд░рдг рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХрд░рдирд╛ рд╣реЛрдЧрд╛. рд╕рд┐рд░реНрдлрд╝ рдЯреЗрдХреНрд╕реНрдЯ рд╡рд╛рд▓реЗ рдкреНрд░реЙрдореНрдкреНрдЯ рдХреА рдЬрдЧрд╣, рдорд▓реНрдЯреАрдореЙрдбрд▓ рдкреНрд░реЙрдореНрдкреНрдЯ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░реЗрдВ. рдЗрд╕рдореЗрдВ рдЕрдкрдиреА рдлрд╝реЛрдЯреЛ рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВ:
# MODULE_5_STEP_2_GENERATE_PORTRAIT (Photo-based version)
# Load your photo
photo_path = "/home/your-username/my_photo.jpg" # Update this path!
user_photo = Image.open(photo_path)
# Convert photo to bytes for the API
photo_buffer = io.BytesIO()
user_photo.save(photo_buffer, format="JPEG")
photo_bytes = photo_buffer.getvalue()
portrait_prompt = f"""Transform this person into a stylized space explorer portrait.
PRESERVE from the original photo:
- The person's facial features, face shape, and likeness
- Their general expression and personality
- Any distinctive features (glasses, facial hair, etc.)
TRANSFORM with this style:
- Digital illustration style, clean lines, vibrant saturated colors
- Add a futuristic space suit with the name "{USERNAME}" on a shoulder patch
- Suit color: {SUIT_COLOR}
- Background: Pure solid white (#FFFFFF) - no gradients or elements
- Frame: Head and shoulders, 3/4 view
- Lighting: Soft diffused studio lighting
- Art style: Modern animated movie character (Pixar/Dreamworks aesthetic)
The result should be clearly recognizable as THIS specific person, but illustrated as a heroic space explorer."""
print("ЁЯОи Transforming your photo into an explorer portrait...")
# Send both the prompt AND the image
portrait_response = chat.send_message([
portrait_prompt,
types.Part.from_bytes(data=photo_bytes, mime_type="image/jpeg")
])
# Rest of the extraction code stays the same...
рдЕрдм рднреА рдорд▓реНрдЯреА-рдЯрд░реНрди рдХрдВрд╕рд┐рд╕реНрдЯреЗрдВрд╕реА рдХрд╛рдо рдХрд░рддреА рд╣реИ
рдлрд╝реЛрдЯреЛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЗрдореЗрдЬ рдЬрдирд░реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд╛рддрдЪреАрдд рдХреЗ рдХрдИ рдЪрд░рдгреЛрдВ рд╡рд╛рд▓реА рд╕реБрд╡рд┐рдзрд╛ рдЗрд╕реА рддрд░рд╣ рдХрд╛рдо рдХрд░рддреА рд╣реИ:
- рдкрд╣рд▓реА рдмрд╛рд░реА: рдлрд╝реЛрдЯреЛ + рдкреНрд░реЙрдореНрдкреНрдЯ тЖТ рд╕реНрдЯрд╛рдЗрд▓ рдореЗрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдкреЛрд░реНрдЯреНрд░реЗрдЯ (рдЖрдкрдХреА рддрд░рд╣ рджрд┐рдЦрдиреЗ рд╡рд╛рд▓рд╛, рдЗрд▓рд╕реНрдЯреНрд░реЗрдЯреЗрдб)
- рджреВрд╕рд░рд╛ рдЪрд░рдг: "рдЗрд╕реА рдХрд┐рд░рджрд╛рд░ рдХрд╛ рдЖрдЗрдХреЙрди рдмрдирд╛рдУ" тЖТ рдПрдХ рдЬреИрд╕рд╛ рдЖрдЗрдХреЙрди
рдЪреИрдЯ рд╕реЗрд╢рди рдореЗрдВ, рд╕реНрдЯрд╛рдЗрд▓ рдХреА рдЧрдИ рдЗрдореЗрдЬ рд╕реЗрд╡ рд╣реЛрддреА рд╣реИ, рди рдХрд┐ рдУрд░рд┐рдЬрдирд▓ рдлрд╝реЛрдЯреЛ. рдЗрд╕рд▓рд┐рдП, рдЖрдЗрдХреЙрди, рдмрджрд▓реЗ рдЧрдП рдкреЛрд░реНрдЯреНрд░реЗрдЯ рд╕реЗ рдкреВрд░реА рддрд░рд╣ рдореЗрд▓ рдЦрд╛рдПрдЧрд╛.
рдирд┐рдЬрддрд╛ рд╕реЗ рдЬреБрдбрд╝реА рдмрд╛рддреЗрдВ
Vertex AI Studio рдореЗрдВ рдЗрд╕реЗ рдЖрдЬрд╝рдорд╛рдПрдВ
рдХреЛрдб рд▓рд┐рдЦрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, Google Cloud Console рдореЗрдВ рдЬрд╛рдХрд░ рдлрд╝реЛрдЯреЛ рдХреЛ рдЗрдВрдЯрд░реИрдХреНрдЯрд┐рд╡ рддрд░реАрдХреЗ рд╕реЗ рдмрджрд▓рдиреЗ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рдЖрдЬрд╝рдорд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
- Vertex AI Studio рдкрд░ рдЬрд╛рдПрдВ
- рдЗрдореЗрдЬ рд╕реЗ рдЬреБрдбрд╝реА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рд╡рд╛рд▓рд╛ Gemini рдХрд╛ рдХреЛрдИ рдореЙрдбрд▓ рдЪреБрдиреЗрдВ
- рдЕрдЯреИрдЪрдореЗрдВрдЯ рдмрдЯрди рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдХреЗ рдЕрдкрдиреА рдлрд╝реЛрдЯреЛ рдЕрдкрд▓реЛрдб рдХрд░реЗрдВ
- рдЗрдореЗрдЬ рдЯреНрд░рд╛рдВрд╕рдлрд╝реЙрд░реНрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЙрдореНрдкреНрдЯ рдбрд╛рд▓реЗрдВ
- рдЬрдм рддрдХ рдЖрдкрдХреЛ рдордирдореБрддрд╛рдмрд┐рдХ рдирддреАрдЬрд╛ рди рдорд┐рд▓ рдЬрд╛рдП, рддрдм рддрдХ рд╕реНрдЯрд╛рдЗрд▓ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХрд░рддреЗ рд░рд╣реЗрдВ
- рдирддреАрдЬреЗ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ
outputs/portrait.pngрдХреЗ рддреМрд░ рдкрд░ рд╕реЗрд╡ рдХрд░реЗрдВ - рдЪрд▓рд╛рдПрдВ:
python create_identity.py --skip-generation(рдЕрдЧрд░ рдпрд╣ рдлрд╝реНрд▓реИрдЧ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ), рддрд╛рдХрд┐ рдореИрдиреНрдпреБрдЕрд▓ рддрд░реАрдХреЗ рд╕реЗ рдЬрдирд░реЗрдЯ рдХреА рдЧрдИ рдЗрдореЗрдЬ рдЕрдкрд▓реЛрдб рдХреА рдЬрд╛ рд╕рдХреЗрдВ
рдпрд╣ рдЗрдВрдЯрд░реИрдХреНрдЯрд┐рд╡ рддрд░реАрдХрд╛, рдкреНрд░реЙрдореНрдкреНрдЯ рдХреЗ рд╕рд╛рде рдПрдХреНрд╕рдкреЗрд░рд┐рдореЗрдВрдЯ рдХрд░рдиреЗ рдФрд░ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд░реАрдпрд▓-рдЯрд╛рдЗрдо рдореЗрдВ рдирддреАрдЬреЗ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░реАрди рд╣реИ!
рдЖрдкрдиреЗ рдХреНрдпрд╛ рд╕реАрдЦрд╛ (рдмреЛрдирд╕)
тЬУ Gemini рдХреА рдорджрдж рд╕реЗ, рдЗрдореЗрдЬ рдХреЛ рджреВрд╕рд░реА рдЗрдореЗрдЬ рдореЗрдВ рдмрджрд▓рдиреЗ рдХрд╛ рддрд░реАрдХрд╛
тЬУ рдПрдХ рд╣реА рдореИрд╕реЗрдЬ рдореЗрдВ рдЯреЗрдХреНрд╕реНрдЯ рдФрд░ рдЗрдореЗрдЬ рдЬреИрд╕реЗ рдХрдИ рддрд░рд╣ рдХреЗ рдХреЙрдиреНрдЯреЗрдВрдЯ рдХреЛ рднреЗрдЬрдиреЗ рдХрд╛ рддрд░реАрдХрд╛
тЬУ рдЖрд░реНрдЯрд┐рд╕реНрдЯрд┐рдХ рд╕реНрдЯрд╛рдЗрд▓ рдЯреНрд░рд╛рдВрд╕рдлрд╝рд░ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╕рдордп, рдЗрдореЗрдЬ рдХреА рд╕рдорд╛рдирддрд╛ рдХреЛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХрд╛ рддрд░реАрдХрд╛
тЬУ рдлрд╝реЛрдЯреЛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдЖрдИ рд╕реЗ рдЗрдореЗрдЬ рдЬрдирд░реЗрдЯ рдХрд░рдиреЗ рдХреЗ рджреМрд░рд╛рди, рдирд┐рдЬрддрд╛ рд╕реЗ рдЬреБрдбрд╝реА рдмрд╛рддреЛрдВ рдХрд╛ рдзреНрдпрд╛рди рд░рдЦрдирд╛
