The Distress Signal
Süre: 1 dakika

Kaçış kapsülünüz, bilinmeyen bir dünyanın atmosferini yarıyor. Uyarı ışıkları her panelde yanıp söner. Navigasyon sistemi bozuldu. İletişim kesintisi yaşanıyor. Pod'un acil durum protokolleri devreye girerken yapay zeka asistanı şu şekilde yanıt veriyor:
"Survivor detected. Acil iniş başarılı. Kurtarma sinyali protokolü başlatılıyor..."
"UYARI: Kimlik doğrulama gerekiyor. Galaktik kurtarma ağı, kayıtlı olmayan kaşifleri bulamaz. Beacon'unuzu etkinleştirmek için lütfen kimliğinizi doğrulayın."
Görüntü alanından dışarı bakarsınız. Ufka kadar uzanan bir uzaylı manzarası: garip kaya oluşumları, bilinmedik bitki örtüsü ve tuhaf renkli bir gökyüzü. Bir yerlerde, görevinizden hayatta kalan diğer kişiler bu gezegenin yüzeyine dağılmış durumda.
Ancak öncelikle sistemde yer almanız gerekir.
Ne Oluşturacaksınız?
Bu seviyede, Google'ın Gemini görüntü üretme modelleri (Nano Banana 🍌 olarak da bilinir) ile çok turlu görüntü üretme özelliğini kullanarak benzersiz uzay kaşifi kimliğinizi oluşturacaksınız. Avatarınız, atölye etkinliğinizdeki diğer tüm katılımcıların görebileceği şekilde küresel kurtarma haritasında görünecek.

Neler Öğreneceksiniz?
| Kavram | Açıklama |
|---|---|
| Çok turlu görüntü üretme | Sohbet oturumlarını kullanarak birden fazla görüntü oluşturma işleminde karakter tutarlılığını koruma |
| Görüntüler İçin İstem Mühendisliği | Belirli kısıtlamalara sahip, stilize edilmiş ve tutarlı çıktılar için etkili istemler oluşturma |
| Gemini Image API (Nano Banana) | Python SDK aracılığıyla Gemini'ın yerel görüntü üretme özelliklerini kullanma |
| Sohbet Oturumları | Tekrarlı iyileştirme ve karakter tutarlılığı için ileti dizisi bağlamından yararlanma |
Bu seviyenin sonunda:
✅ Metinden görüntüye yapay zeka kullanarak kaşifinizin portresini oluşturduysanız
✅ Çok turlu sohbeti kullanarak tutarlı bir harita simgesi oluşturduysanız
✅ Kimliğinizi kurtarma ağına kaydettiyseniz
✅ Diğer kaşiflerle birlikte canlı dünya haritasında görünüyorsanız
Haritada yerinizi alalım. 📍
Ortamınızı Hazırlama
Süre: 2 dakika
Cloud Shell'e erişme
Öncelikle, Google Cloud SDK ve diğer temel araçların önceden yüklendiği tarayıcı tabanlı bir terminal olan Cloud Shell'i açacağız.
Google Cloud kredisine mi ihtiyacınız var?
• Eğitmen tarafından yönetilen bir atölyeye katılıyorsanız: Eğitmeniniz size kredi kodu sağlar. Lütfen sağladıkları kodu kullanın.
• Bu Codelab'i kendi başınıza tamamlıyorsanız: Atölye çalışması maliyetlerini karşılamak için ücretsiz Google Cloud kredisi kullanabilirsiniz. Kredi almak için lütfen bu bağlantıyı tıklayın ve krediyi hesabınıza uygulamak için aşağıdaki video kılavuzundaki adımları uygulayın.
![]()
Google Cloud Console'un üst kısmında Cloud Shell'i etkinleştir'i (sağ üst gezinme çubuğundaki terminal simgesi) tıklayın.

Google Cloud proje kimliğinizi bulma:
- Google Cloud Console'u açın: https://console.cloud.google.com
- Sayfanın üst kısmındaki proje açılır listesinden bu atölye çalışması için kullanmak istediğiniz projeyi seçin.
- Proje kimliğiniz, Kontrol Paneli'ndeki Proje bilgileri kartında gösterilir.

Cloud Shell açıldıktan sonra kimliğinizin doğrulandığını onaylayın:
# Check that you are logged in
gcloud auth list
Hesabınız (ACTIVE) olarak listelenir.
Projenizi Yapılandırma
Projenizin doğru şekilde ayarlandığını doğrulayın:
export PROJECT_ID=$(gcloud config get-value project)
echo "Using project: $PROJECT_ID"
Proje ayarlanmamışsa veya projeyi değiştirmeniz gerekiyorsa:
gcloud config set project YOUR_PROJECT_ID
Gerekli API'leri etkinleştirme
Görüntü oluşturma için Vertex AI API'yi etkinleştirin:
gcloud services enable aiplatform.googleapis.com
Depoyu Klonlama
Way Back Home deposunu klonlayın ve projeye gidin:
git clone https://github.com/ayoisio/way-back-home.git
cd way-back-home
Bağımlılıkları yükleme
0. düzeye gidin ve gerekli Python paketlerini yükleyin:
cd level_0
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
Temel bağımlılıklar şunlardır:
| Paket | Amaç |
|---|---|
google-genai |
Görüntü üretme için Gemini API istemcisi |
requests |
Mission Control'e yapılan API çağrıları için HTTP istemcisi |
Pillow |
Görüntü işleme ve dosya işleme |
Kurulumu Doğrulama
Her şeyin doğru şekilde yapılandırıldığından emin olmak için hızlı bir doğrulama yapın:
cd ~/way-back-home
python scripts/verify_setup.py
Aşağıdaki bilgileri görürsünüz:
✓ Google Cloud project configured: your-project-id
✓ Vertex AI API enabled
✓ Dependencies installed
✓ Ready to proceed!
Az Önce Tamamladığınız
✅ Cloud Shell'i açtıysanız
✅ Google Cloud projenizi yapılandırdıysanız
✅ Vertex AI API'lerini etkinleştirdiyseniz
✅ Codelab deposunu klonladıysanız
✅ Python bağımlılıklarını yüklediyseniz
✅ Kurulumunuzu doğruladıysanız
Sonraki: Görev Kontrolü'ne bağlanın ve kaşif adınızı talep edin.
Görev Kontrolü'ne bağlanma
Süre: 2 dakika
Kurulum komut dosyasını çalıştırma
Kurulum komut dosyası sizi Way Back Home kurtarma ağına bağlar ve kaşif kimliğinizi ayırır. Proje kökünden çalıştırın:
cd ~/way-back-home
chmod +x scripts/setup.sh
./scripts/setup.sh
İki bilgi girmeniz istenir.
Etkinlik kodunuzu girin
Etkinlik kodu, hangi atölye etkinliğine katıldığınızı tanımlar.
Bir atölye çalışmasındaysanız: QR kodundaki, slayttaki veya atölye çalışması eğitmeninizden aldığınız etkinlik kodunu girin.
🚀 Welcome to Way Back Home!
Enter event code (from QR/slide): devfest-nyc-26
Validating event...
✓ Connected to: DevFest NYC 2026
Kendi kendinize öğreniyorsanız: Herkese açık öğrenme ortamına katılmak için sandbox girin.
🚀 Welcome to Way Back Home!
Enter event code (from QR/slide): sandbox
Validating event...
✓ Connected to: Way Back Home Sandbox
Kaşif Adınızı Seçme
Kaşifiniz için benzersiz bir ad seçin. Dünya haritasında ve skor tablosunda bu şekilde görünürsünüz.
Choose your explorer name: AstroAyo
✓ Username available!
Seçtiğiniz ad aynı etkinlikteki başka bir katılımcı tarafından zaten kullanılıyorsa:
Choose your explorer name: SpaceExplorer
⚠️ That name is taken. Try another.
Choose your explorer name: SpaceExplorer42
✓ Username available!
Kurulum Tamamlandı
İşlem tamamlandığında onay mesajı gösterilir:
Initializing your explorer profile...
✓ Environment configured!
Explorer ID: a1b2c3d4
Starting coordinates: (47, 23)
Next: cd level_0 && python customize.py
0. seviyeye gitme
Şimdi Level 0 dizinine gidin (bağımlılıklarınız Module 2'den zaten yüklenmiştir):
cd level_0
Yapılandırmanızı İnceleme
Kaydedilenlere göz atın (config.json, proje kök dizinindedir):
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"
}
Bu yapılandırma dosyası, sonraki komut dosyaları tarafından sizi kurtarma ağına tanıtmak için kullanılır.
Az Önce Tamamladığınız
✓ Mission Control API'ye bağlandı
✓ Benzersiz kaşif adınızı ayırttınız
✓ Katılımcı kimliğinizi ve başlangıç koordinatlarınızı aldınız
✓ Sonraki adımlar için yapılandırma kaydedildi
Sonraki: Gezgininizin görünümünü özelleştirin.
Gezgininizi Özelleştirme
Süre: 1 dakika
Özelleştirme komut dosyasını çalıştırın
Avatarınızı oluşturmadan önce, kaşifinizin görünümüyle ilgili birkaç seçim yaparsınız:
python customize.py
Elbise Renginizi Seçme
Kaşifinizin uzay giysisi için bir renk seçin:
🎨 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
Explorer'ınızı açıklayın (isteğe bağlı)
Kaşifinizin görünümüyle ilgili kısa bir açıklama girebilir veya rastgele bir atama için Enter tuşuna basabilirsiniz:
Brief description of your explorer (or Enter for random):
Example: 'short dark hair, glasses, friendly smile'
> short dark hair, glasses, determined expression
✓ Preferences saved!
Hiçbir şey yazmadan Enter tuşuna basarsanız rastgele özellikler elde edersiniz:
>
✓ Random traits: confident expression, short styled hair
Yapılandırma güncellendi
Tercihleriniz kaydedildi:
✓ Preferences saved!
Next: Open generator.py and follow the codelab instructions
Then run: python create_identity.py
Güncellenen yapılandırmayı doğrulayın:
cat ../config.json
Eklenen tercihlerinizi görürsünüz:
{
"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"
}
Az Önce Tamamladığınız
✓ Takım elbisenizin rengini seçtiyseniz
✓ Kaşifinizin görünümünü tanımladıysanız
✓ Yapılandırma, resim oluşturmaya hazırsa
Sıradaki adım: Asıl etkinlik: Görüntü oluşturma kodunu yazma
Avatar oluşturma aracını geliştirme
Süre: 4 dakika
Bu, temel eğitim modülüdür. Gemini'ın çok turlu görüntü oluşturma özelliklerini (Nano Banana) kullanarak benzersiz kaşif avatarınızı oluşturacak Python kodu yazacaksınız.
Generator File'ı açın
Avatar oluşturucuyu Cloud Shell Düzenleyici'de açın:
cloudshell edit generator.py
Alternatif olarak Cloud Shell'de Open Editor'ı (Düzenleyiciyi Aç) tıklayın ve level_0 klasöründe generator.py'ye gidin.
Dosya Yapısını Anlama
Dosyada başlangıç kodu ve uygulamanızı ekleyeceğiniz üç yer tutucu bölüm bulunur:
"""
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 bölümünü uygulamanızla değiştireceksiniz.
1. adım: Sohbet oturumunu oluşturun
MODULE_5_STEP_1_CREATE_CHAT_SESSION yer tutucusunu bulun ve chat = None # Replace this line satırını aşağıdakilerle değiştirin:
# 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"]
)
)
2. adım: Portreyi oluşturun
MODULE_5_STEP_2_GENERATE_PORTRAIT öğesini bulun ve portrait_image = None # Replace this section öğesini aşağıdaki kodla değiştirin:
# 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!")
3. adım: Harita simgesini oluşturun
MODULE_5_STEP_3_GENERATE_ICON öğesini bulup icon_image = None # Replace this section ile değiştirin:
# 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!")
Tamamlanmış Kodunuz
Üç bölümü de ekledikten sonra generate_explorer_avatar() işleviniz şu şekilde görünmelidir:
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"
}
Dosyanızı Kaydetme
Şunları kaydettiğinizden emin olun generator.py:
- Cloud Shell Düzenleyici: Ctrl+S (Windows/Linux) veya Cmd+S (Mac)
- vim: Escape tuşuna basın, ardından
:wqve Enter tuşlarına basın.
Az Önce Oluşturduğunuz
✓ Çok turlu görüntü üretme için sohbet oturumu oluşturma
✓ Stil kısıtlamalarıyla portre üretme için ayrıntılı istem oluşturma
✓ Sohbet bağlamını kullanarak tutarlı bir harita simgesi üretme
✓ Gemini yanıtlarındaki görüntü verilerini ayrıştırmayı öğrenme
Ustalaşılan Temel Kavramlar:
| Kavram | Öğrendikleriniz |
|---|---|
| Sohbet Oturumları | client.chats.create() Birden fazla dönüşte bağlamı korur. |
| Yanıt Modları | ["TEXT", "IMAGE"] yanıtlar için görüntü üretmeyi etkinleştirir |
| İstem Yapısı | Konu → Değişkenler → Stil → Teknik Kısıtlamalar |
| Karakter Tutarlılığı (Character Consistency) | Aynı sohbet oturumu = resimlerde aynı karakter |
| Yanıt ayrıştırma | Yanıt bölümlerinde inline_data içindeki resimleri ayıklama |
Sonraki: Kodunuzu çalıştırın ve kendinizi haritada görün.
Oluşturma ve Kaydetme
Süre: 2 dakika
Proje kimliğinizi ayarlama
Proje kimliğinizin ortam değişkeni olarak kullanılabilir olduğundan emin olun:
export GOOGLE_CLOUD_PROJECT=$(gcloud config get-value project)
Kimlik Oluşturucu'yu çalıştırma
Şimdi oluşturma, yükleme ve kaydı düzenleyen ana komut dosyasını çalıştırın:
python create_identity.py
Oluşturma işleminin ilerleme durumunu anlık olarak görürsünüz:
🚀 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! ║
║ ║
╚═══════════════════════════════════════════════════════════════╝
Oluşturulan Avatarınızı Görüntüleme
Üretilen resimlerinizi yerel olarak inceleyin:
# List the generated files
ls -la outputs/
# Download to view on your local machine
cloudshell download outputs/portrait.png
cloudshell download outputs/icon.png
Alternatif olarak, outputs/ klasörüne gidip resim dosyalarını tıklayarak bunları doğrudan Cloud Shell Düzenleyici'de görüntüleyebilirsiniz.
Oluşturulan portre ve simge aşağıdaki resimlere benzer:
![]()
Haritada kendinizi görün
Çıkışınızda gösterilen dünya haritası URL'sini açın:
https://waybackhome.dev/e/{your-event-code}
Örneğin: https://waybackhome.dev/e/devfest-nyc-26
Avatarınızı haritada bulma Şunları görürsünüz:
- Gezegen yüzeyindeki konumunuzu işaretleyen simge
- Simgenizin altındaki etiket olarak kaşif adınız
- İşaretçinizin etrafında yavaşça yanıp sönen soluk bir işaret
![]()
Ayrıntı kartında tam portrenizi görmek için işaretçinizi tıklayın.
Avatarınızdan Memnun Değil misiniz? Yeniden üret!
Farklı bir avatar istiyorsanız avatarı yeniden oluşturabilirsiniz:
# Option 1: Change your appearance settings first
python customize.py
# Option 2: Just regenerate with current settings
python create_identity.py
create_identity.py komutunu her çalıştırdığınızda tamamen yeni bir avatar oluşturulur (yeni sohbet oturumu = yeni karakter) ve kaydınız güncellenir. Sonuçtan memnun kalana kadar yineleme yapabilirsiniz.
Sorun giderme
Az Önce Tamamladığınız
✓ Benzersiz kaşif portrenizi oluşturduysanız
✓ Tutarlı bir harita simgesi oluşturduysanız
✓ Öğeleri Görev Kontrolü'ne yüklediyseniz
✓ Kimliğinizi kurtarma ağına kaydettiyseniz
✓ Canlı dünya haritasında görünüyorsanız
Tebrikler, kaşif! Artık kurtarma ağında yer alıyorsunuz. Feneriniz etkin (ancak sönük) ve diğer kurtulanlar sizi haritada görebilir.
Sonuç
Süre: 1 dakika
Oluşturduklarınız
Çok turlu yapay zeka görüntü üretme özelliğini kullanarak yalnızca 10 dakikada eksiksiz bir avatar oluşturma sistemi oluşturdunuz:
┌─────────────────────────────────────────────────────────────┐
│ 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 │
│ │
└─────────────────────────────────────────────────────────────┘
Temel çıkarımlar
| Ders | Neden önemli? |
|---|---|
| Chat oturumlarında bağlam korunur | Varyasyon kayması olmadan birden fazla resimde tutarlı karakterler oluşturmak için gereklidir. |
| İstem yapısı önemlidir | Net kısıtlamalar (beyaz arka plan, belirli stil, çerçeveleme) öngörülebilir ve üretime hazır sonuçlar verir. |
| Çok adımlı görüşmeler, bağımsız görüşmelerden daha iyi sonuç verir | Sohbetteki her mesaj, önceki bağlam üzerine kurulur. Bu sayede yinelemeli iyileştirme ve tutarlılık sağlanır. |
| Yanıt biçimleri çıkışı kontrol eder | Resim üretimi için ["TEXT", "IMAGE"] ayarı gereklidir. Bu ayar olmadan yalnızca metin alırsınız. |
Maliyet özeti
Bu seviyede, Gemini 2.5 Flash (Nano Banana) kullanarak 2 resim oluşturdunuz:
| Öğe | Token'lar | Maliyet |
|---|---|---|
| Dikey (1024×1024) | ~1.290 çıkış jetonu | ~0,039 ABD doları |
| Simge (1024×1024) | ~1.290 çıkış jetonu | ~0,039 ABD doları |
| Toplam | ~2.580 jeton | ~$0.08 |
Yolculuk Devam Ediyor
Kaşif kimliğiniz onaylandı ancak konumunuz onaylanmadı.
Dünya haritasına bakın. İşaretiniz soluk ve yavaşça yanıp sönüyor. Kurtarma ağı varlığınızdan haberdardır ancak tam olarak nerede olduğunuzu bilmez. Gezegenin yüzeyindeki geniş bir bölgenin herhangi bir yerinde olabilirsiniz.
1. Seviye: Konumunuzu Belirleyin bölümünde:
- Google'ın Agent Development Kit'ini (ADK) kullanarak çoklu aracı sistemi oluşturma
- Jeolojik, botanik ve astronomik analiz için MCP sunucuları oluşturma
- Çok formatlı girişi (kaza yerinizden alınan resimler) işleme
- Yapay zekayı kullanarak onaylanmış konumunuzun topografik haritasını oluşturma
- Kurtarma ekiplerinin sizi bulabilmesi için gerçekten sinyal verin.
1. Seviyede çok daha gelişmiş kavramlar (ör. çoklu aracı düzenleme, Model Context Protocol (MCP) ve üretime dağıtım kalıpları) tanıtılır. Tek bir model özelliği kullanmaktan eksiksiz bir aracı sistemi oluşturmaya geçiş yapacaksınız.
Temizleme (isteğe bağlı)
Yerel dosyaları temizlemek istiyorsanız (level_0 dizininden çalıştırın):
rm -rf outputs/
rm ../config.json
deactivate # Exit virtual environment
Kurtarma ağına kaydınız devam eder. Yerel dosyaları sildikten sonra bile haritada görünmeye devam edersiniz. Görüntüler yerel olarak değil, bulutta depolanır.
Kaynaklar
- Gemini ile görüntü üretme dokümanları
- Görüntüler İçin İstem Mühendisliği Rehberi
- Nano Banana Duyuru Blogu
- Way Back Home Repository
- 1. Seviye: Konumunuzu Belirleme
İşaretçinizin onaylanması bekleniyor. 1. seviyede görüşmek üzere, kaşif. 🚀
Bonus: Fotoğrafa Dayalı Avatar (İsteğe Bağlı)
Süre: 3 dakika
Fotoğraftan Avatar Oluşturma özelliğini ne zaman kullanmalısınız?
Aşağıdaki durumlarda bu yaklaşımı tercih edebilirsiniz:
- Avatarınızın size benzemesini istiyorsanız
- Stilize etmek istediğiniz belirli bir fotoğrafınız varsa
- Gemini'ın görüntüden görüntüye dönüştürme özelliklerini keşfetmek istiyorsanız
Nasıl Çalışır?
Tamamen metin açıklamasından bir karakter oluşturmak yerine fotoğraf sağlayıp Gemini'dan kişinin benzerliğini koruyarak fotoğrafı dönüştürmesini isteyin:
![]()
Fotoğrafınızı Yükleme
Öncelikle Cloud Shell'e bir fotoğraf yükleyin:
- Cloud Shell'de, terminal araç çubuğundaki üç nokta menüsünü (⋮) tıklayın.
- Yükle'yi seçin.
- Net bir vesikalık fotoğraf seçin (JPEG veya PNG)
- Yüklenen yolu not edin (ör.
/home/your-username/my_photo.jpg)
Jeneratörü değiştirme
Fotoğraf kullanmak için generator.py bölümünde portre oluşturma adımını değiştirirsiniz. Yalnızca metin içeren istemi, fotoğrafınızı da içeren çok formatlı bir istemle değiştirin:
# 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...
Çok turlu tutarlılık hâlâ çalışıyor
Çok turlu yaklaşım, fotoğrafa dayalı üretimde de aynı şekilde çalışır:
- 1. dönüşüm: Fotoğraf + istem → Stilize edilmiş portre (benzerliğiniz, resim olarak)
- 2. adım: "Bu karakterin AYNI simgesini oluştur" → Tutarlı simge
Sohbet oturumu, oluşturduğu stilize edilmiş sürümü (orijinal fotoğrafı değil) hatırladığından simge, dönüştürülmüş portreyle mükemmel şekilde eşleşir.
Gizlilikle İlgili Hususlar
Vertex AI Studio'da Deneyin
Ayrıca, kod yazmadan önce Google Cloud Console'da fotoğraf dönüştürme ile etkileşimli olarak denemeler yapabilirsiniz:
- Vertex AI Studio'ya gidin.
- Görüntü özelliklerine sahip bir Gemini modeli seçin
- Ekleme düğmesini kullanarak fotoğrafınızı yükleyin
- Dönüşüm istemini girin
- Sonuçtan memnun kalana kadar stili yineleyin.
- Sonucu indirip
outputs/portrait.pngolarak kaydedin. - Çalıştır:
python create_identity.py --skip-generation(bu işaret destekleniyorsa) manuel olarak oluşturulan resimleri yüklemek için
Bu etkileşimli yaklaşım, kodlamaya başlamadan önce istemlerle denemeler yapmak ve sonuçları anında görmek için idealdir.
Öğrendikleriniz (Bonus)
✓ Gemini ile görüntüden görüntüye dönüştürme nasıl kullanılır?
✓ Tek bir mesajda çok formatlı içerik (metin + resim) gönderme
✓ Sanatsal stil aktarımı uygularken benzerliği koruma
✓ Fotoğrafa dayalı yapay zeka üretimiyle ilgili gizlilik hususları
