Das Notsignal
Dauer: 1 Min.

Ihre Rettungskapsel rast durch die Atmosphäre einer unbekannten Welt. Auf allen Feldern blinken Warnleuchten. Das Navigationssystem ist kaputt. Die Kommunikation ist ausgefallen. Als die Notfallprotokolle des Pods aktiviert werden, erwacht der KI-Assistent zum Leben:
„Überlebender erkannt. Notlandung erfolgreich. „Rettungsbojenprotokoll wird eingeleitet…“
ACHTUNG: Identitätsbestätigung erforderlich. Das galaktische Rettungsnetzwerk kann nicht registrierte Entdecker nicht finden. Bitte bestätigen Sie Ihre Identität, um Ihren Beacon zu aktivieren.“
Sie schauen aus dem Sichtfenster. Eine außerirdische Landschaft erstreckt sich bis zum Horizont – seltsame Felsformationen, unbekannte Vegetation, ein ungewöhnlich gefärbter Himmel. Irgendwo da draußen sind andere Überlebende deiner Mission über die Oberfläche dieses Planeten verstreut.
Aber zuerst müssen Sie im System vorhanden sein.
Umfang
In dieser Stufe erstellen Sie mithilfe der Bildgenerierung in mehreren Schritten mit den Gemini-Modellen von Google (auch bekannt als Nano Banana 🍌) Ihre eigene Identität als Weltraumforscher. Ihr Avatar wird auf der globalen Rettungskarte angezeigt, die für alle anderen Überlebenden bei Ihrem Workshop-Event sichtbar ist.

Lerninhalte
| Konzept | Beschreibung |
|---|---|
| Bildgenerierung in mehreren Schritten | Konsistenz von Charakteren bei mehreren Bildgenerierungen mithilfe von Chatsitzungen beibehalten |
| Prompt Engineering für Bilder | Effektive Prompts für stilisierte, konsistente Ausgaben mit bestimmten Einschränkungen erstellen |
| Gemini Image API (Nano Banana) | Native Bildgenerierungsfunktionen von Gemini über das Python SDK verwenden |
| Chatsitzungen | Konversationskontext für iterative Verfeinerung und Konsistenz der Charaktere nutzen |
Am Ende dieses Levels haben Sie:
✅ Sie haben mit KI, die Text in Bilder umwandelt, ein Porträt von sich erstellt.
✅ Sie haben mit einem Dialog mit mehreren Zügen ein einheitliches Kartensymbol erstellt.
✅ Sie haben sich beim Rettungsnetzwerk registriert.
✅ Sie werden auf der Live-Weltkarte neben anderen Entdeckern angezeigt.
Wir helfen Ihnen dabei, auf der Karte präsent zu sein. 📍
Umgebung vorbereiten
Dauer: 2 Minuten
Auf Cloud Shell zugreifen
Zuerst öffnen wir Cloud Shell. Das ist ein browserbasiertes Terminal, in dem das Google Cloud SDK und andere wichtige Tools vorinstalliert sind.
Google Cloud-Guthaben erforderlich?
• Wenn Sie an einem von einem Kursleiter geleiteten Workshop teilnehmen: Ihr Kursleiter stellt Ihnen einen Gutscheincode zur Verfügung. Verwenden Sie die von ihnen angegebene.
• Wenn Sie dieses Codelab selbst durcharbeiten: Sie können ein kostenloses Google Cloud-Guthaben einlösen, um die Workshopkosten zu decken. Klicken Sie auf diesen Link, um eine Gutschrift zu erhalten, und folgen Sie der Anleitung im Video unten, um sie auf Ihr Konto anzuwenden.
![]()
Klicken Sie oben in der Google Cloud Console auf Cloud Shell aktivieren (das Terminalsymbol in der Navigationsleiste rechts oben).

So finden Sie Ihre Google Cloud-Projekt-ID:
- Öffnen Sie die Google Cloud Console: https://console.cloud.google.com.
- Wählen Sie oben auf der Seite im Drop-down-Menü das Projekt aus, das Sie für diesen Workshop verwenden möchten.
- Ihre Projekt-ID wird auf der Karte „Projektinformationen“ im Dashboard angezeigt.

Prüfen Sie nach dem Öffnen von Cloud Shell, ob Sie authentifiziert sind:
# Check that you are logged in
gcloud auth list
Ihr Konto sollte als (ACTIVE) aufgeführt sein.
Projekt konfigurieren
Prüfen Sie, ob Ihr Projekt richtig eingestellt ist:
export PROJECT_ID=$(gcloud config get-value project)
echo "Using project: $PROJECT_ID"
Wenn kein Projekt festgelegt ist oder Sie es ändern möchten:
gcloud config set project YOUR_PROJECT_ID
Erforderliche APIs aktivieren
Aktivieren Sie die Vertex AI API für die Bildgenerierung:
gcloud services enable aiplatform.googleapis.com
Repository klonen
Klonen Sie das Way Back Home-Repository und rufen Sie das Projekt auf:
git clone https://github.com/ayoisio/way-back-home.git
cd way-back-home
Abhängigkeiten installieren
Wechseln Sie zu Ebene 0 und installieren Sie die erforderlichen Python-Pakete:
cd level_0
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
Die wichtigsten Abhängigkeiten sind:
| Paket | Zweck |
|---|---|
google-genai |
Gemini API-Client für die Bildgenerierung |
requests |
HTTP-Client für API-Aufrufe an Mission Control |
Pillow |
Bildverarbeitung und Dateiverwaltung |
Einrichtung überprüfen
Führen Sie eine kurze Überprüfung durch, um sicherzustellen, dass alles richtig konfiguriert ist:
cd ~/way-back-home
python scripts/verify_setup.py
Hier sollten Sie dies sehen:
✓ Google Cloud project configured: your-project-id
✓ Vertex AI API enabled
✓ Dependencies installed
✓ Ready to proceed!
Das haben Sie gerade abgeschlossen
✅ Cloud Shell geöffnet
✅ Google Cloud-Projekt konfiguriert
✅ Vertex AI-APIs aktiviert
✅ Codelab-Repository geklont
✅ Python-Abhängigkeiten installiert
✅ Einrichtung überprüft
Nächster Schritt:Stellen Sie eine Verbindung zu Mission Control her und beanspruchen Sie Ihren Forschernamen.
Verbindung zu Mission Control herstellen
Dauer: 2 Minuten
Setup-Skript ausführen
Das Einrichtungs-Script verbindet Sie mit dem Way Back Home-Rettungsnetzwerk und reserviert Ihre Explorer-Identität. Führen Sie den Befehl im Stammverzeichnis des Projekts aus:
cd ~/way-back-home
chmod +x scripts/setup.sh
./scripts/setup.sh
Sie werden aufgefordert, zwei Informationen anzugeben.
Eventcode eingeben
Der Eventcode gibt an, an welcher Workshop-Veranstaltung Sie teilnehmen.
Wenn Sie an einem Workshop teilnehmen:Geben Sie den Eventcode aus dem QR‑Code, der Folie oder von Ihrem Workshop-Leiter ein.
🚀 Welcome to Way Back Home!
Enter event code (from QR/slide): devfest-nyc-26
Validating event...
✓ Connected to: DevFest NYC 2026
Wenn Sie selbstständig lernen:Geben Sie sandbox ein, um der öffentlichen Lernumgebung beizutreten.
🚀 Welcome to Way Back Home!
Enter event code (from QR/slide): sandbox
Validating event...
✓ Connected to: Way Back Home Sandbox
Name für den Explorer auswählen
Wählen Sie einen eindeutigen Namen für den Explorer aus. So werden Sie auf der Weltkarte und der Bestenliste angezeigt.
Choose your explorer name: AstroAyo
✓ Username available!
Wenn der von Ihnen gewählte Name bereits von einem anderen Teilnehmer derselben Veranstaltung verwendet wird:
Choose your explorer name: SpaceExplorer
⚠️ That name is taken. Try another.
Choose your explorer name: SpaceExplorer42
✓ Username available!
Einrichtung abgeschlossen
Wenn der Vorgang abgeschlossen ist, wird eine Bestätigung angezeigt:
Initializing your explorer profile...
✓ Environment configured!
Explorer ID: a1b2c3d4
Starting coordinates: (47, 23)
Next: cd level_0 && python customize.py
Zu Stufe 0 wechseln
Wechseln Sie nun zum Verzeichnis der Ebene 0 (Ihre Abhängigkeiten wurden bereits in Modul 2 installiert):
cd level_0
Konfiguration prüfen
Sehen Sie sich an, was gespeichert wurde (config.json befindet sich im Projektstammverzeichnis):
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"
}
Diese Konfigurationsdatei wird von nachfolgenden Skripts verwendet, um Sie im Rettungsnetzwerk zu identifizieren.
Das haben Sie gerade abgeschlossen
✓ Mit der Mission Control API verbunden
✓ Einen eindeutigen Namen für Ihren Explorer reserviert
✓ Teilnehmer-ID und Startkoordinaten erhalten
✓ Konfiguration für die nächsten Schritte gespeichert
Weiter:Passen Sie das Erscheinungsbild des Explorers an.
Explorer anpassen
Dauer: 1 Min.
Anpassungsskript ausführen
Bevor Sie Ihren Avatar erstellen, müssen Sie einige Entscheidungen zum Aussehen Ihres Explorers treffen:
python customize.py
Farbe des Anzugs auswählen
Wählen Sie eine Farbe für den Raumanzug des Explorers aus:
🎨 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 beschreiben (optional)
Sie können eine kurze Beschreibung des Aussehens Ihres Explorers eingeben oder die Eingabetaste drücken, um eine zufällige Zuweisung zu erhalten:
Brief description of your explorer (or Enter for random):
Example: 'short dark hair, glasses, friendly smile'
> short dark hair, glasses, determined expression
✓ Preferences saved!
Wenn Sie die Eingabetaste drücken, ohne etwas einzugeben, werden zufällige Merkmale generiert:
>
✓ Random traits: confident expression, short styled hair
Konfiguration aktualisiert
Ihre Einstellungen wurden gespeichert:
✓ Preferences saved!
Next: Open generator.py and follow the codelab instructions
Then run: python create_identity.py
Prüfen Sie die aktualisierte Konfiguration:
cat ../config.json
Ihre Einstellungen werden hinzugefügt:
{
"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"
}
Das haben Sie gerade abgeschlossen
✓ Sie haben die Farbe Ihres Anzugs ausgewählt.
✓ Sie haben das Aussehen Ihres Explorers festgelegt.
✓ Die Konfiguration ist für die Bildgenerierung bereit.
Als Nächstes:Das Hauptereignis – den Code für die Bildgenerierung schreiben!
Avatar-Generator erstellen
Dauer: 4 Minuten
Dies ist das Kernmodul. Sie schreiben Python-Code, mit dem Ihr individueller Explorer-Avatar mithilfe der Multi-Turn-Bildgenerierungsfunktionen von Gemini (Nano Banana) generiert wird.
Generator-Datei öffnen
Öffnen Sie den Avatar-Generator im Cloud Shell-Editor:
cloudshell edit generator.py
Alternativ können Sie in Cloud Shell auf Editor öffnen klicken und im Ordner level_0 zu generator.py navigieren.
Dateistruktur
Die Datei enthält Startcode und drei Platzhalterabschnitte, in denen Sie Ihre Implementierung hinzufügen:
"""
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']}")
Ersetzen Sie die drei TODO-Abschnitte durch Ihre Implementierung.
Schritt 1: Chatsitzung erstellen
Suchen Sie den Platzhalter MODULE_5_STEP_1_CREATE_CHAT_SESSION und ersetzen Sie die Zeile chat = None # Replace this line durch:
# 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"]
)
)
Schritt 2: Porträt generieren
Suchen Sie nach MODULE_5_STEP_2_GENERATE_PORTRAIT und ersetzen Sie portrait_image = None # Replace this section durch den folgenden Code:
# 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!")
Schritt 3: Kartensymbol generieren
Suchen Sie nach MODULE_5_STEP_3_GENERATE_ICON und ersetzen Sie icon_image = None # Replace this section durch:
# 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!")
Ihr fertiger Code
Nachdem Sie alle drei Abschnitte hinzugefügt haben, sollte Ihre generate_explorer_avatar()-Funktion so aussehen:
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"
}
Datei speichern
So sparst du generator.py:
- Cloud Shell Editor:Strg+S (Windows/Linux) oder Cmd+S (Mac)
- vim:Drücken Sie die Esc-Taste, geben Sie
:wqein und drücken Sie die Eingabetaste.
Was Sie gerade erstellt haben
✓ Eine Chatsitzung für die Bildgenerierung in mehreren Schritten erstellt
✓ Einen detaillierten Prompt für die Porträtgenerierung mit Stilvorgaben erstellt
✓ Ein einheitliches Kartensymbol mithilfe des Konversationskontexts generiert
✓ Gelernt, Bilddaten aus Gemini-Antworten zu parsen
Wichtige Konzepte verstanden:
| Konzept | Das haben Sie gelernt |
|---|---|
| Chatsitzungen | client.chats.create() behält den Kontext über mehrere Turns hinweg bei |
| Antwortmodalitäten | ["TEXT", "IMAGE"] ermöglicht die Bildgenerierung in Antworten |
| Prompt-Struktur | Thema → Variablen → Stil → Technische Einschränkungen |
| Charaktere mit Wiedererkennungswert | Dieselbe Chatsitzung = dieselbe Figur auf allen Bildern |
| Antworten analysieren | Bilder aus inline_data in Antwortteilen extrahieren |
Nächster Schritt:Führen Sie Ihren Code aus und sehen Sie sich auf der Karte an.
Generieren und registrieren
Dauer: 2 Minuten
Projekt-ID festlegen
Prüfen Sie, ob Ihre Projekt-ID als Umgebungsvariable verfügbar ist:
export GOOGLE_CLOUD_PROJECT=$(gcloud config get-value project)
Identität erstellen
Führen Sie nun das Hauptskript aus, das die Generierung, den Upload und die Registrierung orchestriert:
python create_identity.py
Der Fortschritt der Generierung wird in Echtzeit angezeigt:
🚀 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! ║
║ ║
╚═══════════════════════════════════════════════════════════════╝
Generierten Avatar ansehen
So sehen Sie sich die generierten Bilder lokal an:
# List the generated files
ls -la outputs/
# Download to view on your local machine
cloudshell download outputs/portrait.png
cloudshell download outputs/icon.png
Alternativ können Sie sie direkt im Cloud Shell-Editor ansehen, indem Sie zum Ordner outputs/ gehen und auf die Bilddateien klicken.
Das generierte Porträt und Symbol sehen etwa so aus:
![]()
Sehen Sie sich auf der Karte an!
Öffnen Sie die in der Ausgabe angezeigte Weltkarten-URL:
https://waybackhome.dev/e/{your-event-code}
Beispiel: https://waybackhome.dev/e/devfest-nyc-26
Suchen Sie Ihren Avatar auf der Karte. Sie sehen hier Folgendes:
- Ihr Symbol, das Ihre Position auf der Erdoberfläche markiert
- Ihr Explorer-Name als Label unter Ihrem Symbol
- Ein abgedunkeltes Signal, das langsam um Ihre Markierung pulsiert
![]()
Klicken Sie auf Ihre Markierung, um Ihr vollständiges Porträt auf der Detailkarte zu sehen.
Sie sind mit Ihrem Avatar nicht zufrieden? Neu generieren
Wenn Sie einen anderen Avatar möchten, können Sie ihn neu generieren lassen:
# Option 1: Change your appearance settings first
python customize.py
# Option 2: Just regenerate with current settings
python create_identity.py
Jedes Mal, wenn Sie create_identity.py ausführen, wird ein völlig neuer Avatar generiert (neue Chatsitzung = neue Figur) und Ihre Registrierung wird aktualisiert. Sie können die Eingabeaufforderung so lange anpassen, bis Sie mit dem Ergebnis zufrieden sind.
Fehlerbehebung
Das haben Sie gerade abgeschlossen
✓ Du hast dein einzigartiges Explorer-Porträt erstellt.
✓ Du hast ein einheitliches Kartensymbol erstellt.
✓ Du hast Assets in Mission Control hochgeladen.
✓ Du hast deine Identität im Rettungsnetzwerk registriert.
✓ Du bist auf der Live-Weltkarte zu sehen.
Glückwunsch! Sie sind jetzt im Rettungsnetzwerk. Ihr Peilsender ist aktiv (wenn auch schwach) und andere Überlebende können Sie auf der Karte sehen.
Fazit
Dauer: 1 Min.
Was Sie erstellt haben
In nur 10 Minuten haben Sie ein vollständiges System zur Avatar-Generierung mit Multi-Turn-KI-Bildgenerierung erstellt:
┌─────────────────────────────────────────────────────────────┐
│ 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 │
│ │
└─────────────────────────────────────────────────────────────┘
Zusammenfassung
| Lektion | Warum ist das wichtig? |
|---|---|
| Kontext in Chatsitzungen beibehalten | Unerlässlich, um konsistente Charaktere in mehreren Bildern ohne Abweichungen zu generieren |
| Die Prompt-Struktur ist wichtig | Klare Einschränkungen (weißer Hintergrund, bestimmter Stil, Bildausschnitt) führen zu vorhersehbaren, produktionsreifen Ergebnissen. |
| Multi-Turn-Anfragen sind besser als unabhängige Aufrufe | Jede Nachricht in einem Chat baut auf dem vorherigen Kontext auf, was eine iterative Optimierung und Konsistenz ermöglicht. |
| Ausgabe über Antwortmodalitäten steuern | Die Einstellung ["TEXT", "IMAGE"] ist für die Bildgenerierung erforderlich. Andernfalls erhalten Sie nur Text. |
Kostenzusammenfassung
Für dieses Level haben Sie zwei Bilder mit Gemini 2.5 Flash (Nano Banana) generiert:
| Element | Tokens | Kosten |
|---|---|---|
| Hochformat (1024 × 1024) | ~1.290 Ausgabetokens | ~0,039 $ |
| Symbol (1024 × 1024) | ~1.290 Ausgabetokens | ~0,039 $ |
| Summe | ~2.580 Tokens | ~0,08$ |
Es geht weiter
Ihre Explorer-Identität wurde bestätigt, aber es gibt ein Problem: Ihr Standort ist nicht bestätigt.
Sehen Sie sich die Weltkarte an. Ihr Leuchtfeuer ist schwach und pulsiert langsam. Das Rettungsnetzwerk weiß, dass Sie existieren, aber nicht genau, wo Sie sich befinden. Sie könnten sich an einem beliebigen Ort in einer riesigen Region der Planetenoberfläche befinden.
Im Level 1: Pinpoint Your Location (Stufe 1: Standort ermitteln) haben Sie folgende Möglichkeiten:
- Multi-Agent-System mit dem Agent Development Kit (ADK) von Google erstellen
- MCP-Server für geologische, botanische und astronomische Analysen erstellen
- Multimodale Eingabe verarbeiten (Bilder von der Absturzstelle)
- Mit KI eine topografische Karte Ihres bestätigten Standorts erstellen
- Aktivieren Sie Ihren Notsender, damit Rettungsteams Sie finden können.
In Stufe 1 werden deutlich komplexere Konzepte eingeführt: Multi-Agent-Orchestration, das Model Context Protocol (MCP) und Muster für die Bereitstellung in der Produktion. Sie gehen von der Verwendung einer einzelnen Modellfunktion zum Erstellen eines vollständigen agentenbasierten Systems über.
Bereinigen (optional)
So bereinigen Sie lokale Dateien (Ausführung im Verzeichnis level_0):
rm -rf outputs/
rm ../config.json
deactivate # Exit virtual environment
Ihre Registrierung im Rettungsnetzwerk bleibt bestehen. Sie werden auch nach dem Löschen lokaler Dateien weiterhin auf der Karte angezeigt. Die Bilder werden in der Cloud und nicht lokal gespeichert.
Ressourcen
- Dokumentation zur Gemini-Bildgenerierung
- Leitfaden für Prompt Engineering für Bilder
- Blog zur Ankündigung von Nano Banana
- Way Back Home-Repository
- Level 1: Standort ermitteln
Ihr Beacon muss noch bestätigt werden. Wir sehen uns in Level 1, Entdecker. 🚀
Bonus: Fotobasierter Avatar (optional)
Dauer: 3 Minuten
Wann sollte die Funktion „Foto zu Avatar“ verwendet werden?
Dieser Ansatz ist unter Umständen sinnvoll, wenn:
- Sie möchten, dass Ihr Avatar Ihnen ähnelt.
- Sie haben ein bestimmtes Foto, das Sie stilisieren möchten
- Sie möchten die Funktionen von Gemini für die Bild-zu-Bild-Transformation ausprobieren.
Funktionsweise
Anstatt einen Charakter nur anhand einer Textbeschreibung zu generieren, stellen Sie ein Foto zur Verfügung und bitten Gemini, es zu transformieren, wobei das Aussehen der Person beibehalten werden soll:
![]()
Foto hochladen
Laden Sie zuerst ein Foto in Cloud Shell hoch:
- Klicken Sie in Cloud Shell in der Terminal-Symbolleiste auf das Dreipunkt-Menü (⋮).
- Wählen Sie Hochladen aus.
- Wählen Sie ein deutliches Porträtfoto im JPEG- oder PNG-Format aus.
- Notieren Sie sich den hochgeladenen Pfad (z.B.
/home/your-username/my_photo.jpg)
Generator ändern
Wenn Sie ein Foto verwenden möchten, müssen Sie den Schritt zur Porträterstellung in generator.py ändern. Ersetzen Sie den reinen Text-Prompt durch einen multimodalen Prompt, der Ihr Foto enthält:
# 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...
Konsistenz über mehrere Schritte funktioniert weiterhin
Der Ansatz mit mehreren Anfragen funktioniert bei der fotobasierten Generierung genauso:
- Runde 1: Foto + Prompt → stilisiertes Porträt (Ihr Abbild, illustriert)
- Turn 2: „Create icon of this SAME character“ (Erstelle ein Symbol dieser SELBEN Figur) → Einheitliches Symbol
Da in der Chatsitzung die stilisierte Version gespeichert wird, die erstellt wurde, und nicht das Originalfoto, stimmt das Symbol perfekt mit dem transformierten Porträt überein.
Datenschutz
In Vertex AI Studio ausprobieren
Sie können auch interaktiv in der Google Cloud Console mit der Fototransformation experimentieren, bevor Sie Code schreiben:
- Zu Vertex AI Studio
- Gemini-Modell mit Bildfunktionen auswählen
- Laden Sie Ihr Foto über die Schaltfläche zum Anhängen hoch.
- Umwandlungs-Prompt eingeben
- Wiederholen Sie den Vorgang, bis Sie mit dem Ergebnis zufrieden sind.
- Laden Sie das Ergebnis herunter und speichern Sie es als
outputs/portrait.png. - Ausführen:
python create_identity.py --skip-generation(falls dieses Flag unterstützt wird), um manuell generierte Bilder hochzuladen
Dieser interaktive Ansatz eignet sich hervorragend, um mit Prompts zu experimentieren und Ergebnisse in Echtzeit zu sehen, bevor Sie sich für Code entscheiden.
Das haben Sie gelernt (Bonus)
✓ Bild-zu-Bild-Transformation mit Gemini verwenden
✓ Multimodale Inhalte (Text + Bild) in einer einzigen Nachricht senden
✓ Ähnlichkeit beibehalten und gleichzeitig künstlerischen Stil übertragen
✓ Datenschutzaspekte bei der KI-basierten Fotogenerierung
