🖥️ Shopping2 — Desktop-GUI für KI-gestützte Produktvideo-Erstellung

Tkinter-App mit Tabs für Upload, Skript-Editor und Einstellungen. OpenAI Vision analysiert Produktbilder, ElevenLabs generiert Voiceover. Konfiguration persistent via INI-Datei.

PythonTkinterOpenAI VisionElevenLabsConfigParser

🚀 Desktop-App statt Browser — für Power-User mit lokalem Workflow

Vereinbaren Sie ein unverbindliches Strategiegespräch

📞 02406 803 7603 ✉️ info@computerkumpel.de

📊 Architektur — 3-Tab GUI

📤
Upload-Tab
Bild per URL hinzufügen → OpenAI Vision analysiert → Vorschau + Beschreibung. Produktfelder: Name, Preis, Affiliate-Link.
✏️
Skript-Editor-Tab
Scrollbarer Editor für response.json. Jede Szene mit Bildvorschau (100x100) + editierbarem Voiceover-Text.
⚙️
Einstellungen-Tab
Amazon API Keys, OpenAI Key, ElevenLabs Key, Prompt-Templates. Alles via ConfigParser in config.ini.
💾
JSON Export
image_data.json + product.json mit einem Klick. Button „Video-Skript erstellen" triggert OpenAI-Skript-Generierung.

💻 Code — Tkinter Hauptanwendung mit Tab-System

3-Tab GUI mit Logo, Notebook & Config-Manager

import tkinter as tk
from tkinter import ttk, messagebox, scrolledtext
from PIL import Image, ImageTk
import configparser, json, requests
from io import BytesIO

class ConfigManager:
    def __init__(self):
        self.config = configparser.ConfigParser()
        self.config_file = 'config.ini'
        self.load_config()
    
    def load_config(self):
        if os.path.exists(self.config_file):
            self.config.read(self.config_file)
        else:
            self.create_default_config()
    
    def get_value(self, section, key):
        return self.config.get(section, key, fallback='')
    
    def set_value(self, section, key, value):
        self.config.set(section, key, value)
    
    def save_config(self):
        with open(self.config_file, 'w') as f:
            self.config.write(f)

class MainApplication(tk.Tk):
    def __init__(self):
        super().__init__()
        self.title("JSON Image and Product Creator")
        self.geometry("800x600")
        self.image_data = []
        self.config_manager = ConfigManager()
        self.create_widgets()
    
    def create_widgets(self):
        # Logo
        logo_img = Image.open("logo.png").resize((200,50))
        self.logo = ImageTk.PhotoImage(logo_img)
        ttk.Label(self, image=self.logo).pack(pady=10)
        
        # Notebook mit 3 Tabs
        self.notebook = ttk.Notebook(self)
        self.notebook.pack(expand=True, fill="both")
        
        self.upload_tab = ttk.Frame(self.notebook)
        self.editor_tab = ttk.Frame(self.notebook)
        self.settings_tab = ttk.Frame(self.notebook)
        
        self.notebook.add(self.upload_tab, text="Upload")
        self.notebook.add(self.editor_tab, text="Video-Skript-Editor")
        self.notebook.add(self.settings_tab, text="Einstellungen")
        
        self.create_upload_tab()
        self.create_editor_tab()
        self.create_settings_tab()

💻 Code — OpenAI Vision Bildanalyse

Produktbild via URL analysieren

def analyze_image(image_url, product_title, product_desc):
    """GPT-4 Vision analysiert Produktbild"""
    response = openai.ChatCompletion.create(
        model="gpt-4-vision-preview",
        messages=[{
            "role": "user",
            "content": [
                {"type": "text", 
                 "text": f"Beschreibe dieses Produktbild. "
                         f"Produkt: {product_title}. "
                         f"Beschreibung: {product_desc}"},
                {"type": "image_url",
                 "image_url": {"url": image_url}}
            ]
        }],
        max_tokens=150
    )
    return response.choices[0].message.content

def add_image_url(self):
    link = self.url_entry.get()
    titel = self.title_entry.get()
    desc = self.product_description_entry.get()
    
    if not titel or not desc:
        messagebox.showerror("Fehler", 
            "Produktname und Beschreibung erforderlich")
        return
    
    if link:
        # Bildanalyse via OpenAI Vision
        description = analyze_image(link, titel, desc)
        self.image_data.append({
            'url': link, 
            'description': description
        })
        
        # Vorschaubild laden
        response = requests.get(link)
        img_data = Image.open(BytesIO(response.content))
        img_data = img_data.resize((150, 150), Image.LANCZOS)
        img = ImageTk.PhotoImage(img_data)
        
        panel = ttk.Label(self.image_frame, image=img)
        panel.image = img  # Referenz behalten!
        panel.pack(side="left", padx=5, pady=5)

💻 Code — Einstellungen mit ConfigParser

INI-basiertes API-Key-Management

# config.ini Struktur
[API]
KEY = AKIAIRS33A6UBUKJ7ORA
SECRET = 2KkpJLDUftwSrdVbKWIupL5...
TAG = computerkumpe-21
COUNTRY = DE
OPENAI_API_KEY = DEIN_OPENAI_API_KEY
ELEVENLABS_API_KEY = sk_0895c474f3796dd962cfea...

[PROMPTS]
PROMPT1 = Standard OpenAI Prompt 1
PROMPT2 = Standard OpenAI Prompt 2

# Laden in Python
config = configparser.ConfigParser()
config.read('config.ini')
key = config.get('API', 'KEY')
config.set('API', 'OPENAI_API_KEY', new_key)
with open('config.ini', 'w') as f:
    config.write(f)

🎯 Strategische Erkenntnisse

🖥️

Desktop-Apps sind nicht tot

Für Power-User mit lokalem Dateisystem-Zugriff ist Tkinter schneller als jede Web-App. Kein Deployment, kein Server, kein Browser-Overhead.

Desktop-App + lokale KI = unschlagbare Latenz für Kreativ-Workflows.

👁️

Vision API = Content-Asset

OpenAI Vision beschreibt nicht nur Bilder — es generiert Voiceover-taugliche Texte. Aus einem Produktfoto wird ein Skript. Das ist der Produktivitätssprung.

Bild → Text → Audio → Video: Die Content-Pipeline der Zukunft.

Eigene Desktop-App für Ihren Content-Workflow

Ich baue Ihre maßgeschneiderte Content-Creation-App. Tkinter oder Electron — lokal, schnell, ohne Cloud-Abhängigkeit.

📞 Jetzt anrufen ✉️ E-Mail senden