<!DOCTYPE html>
<html lang="ar" dir="rtl">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>YouTubeGen Pro - لوحة التحكم</title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
    <link href="https://fonts.googleapis.com/css2?family=Tajawal:wght@400;500;700&display=swap" rel="stylesheet">
    <style>
        body {
            background-color: #f8f9fa;
            font-family: 'Tajawal', sans-serif;
        }
        h1, h2 {
            color: #0d6efd;
        }
        .form-container {
            background-color: #ffffff;
            padding: 20px;
            border-radius: 10px;
            box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
            margin-bottom: 20px;
        }
        .btn-primary {
            background-color: #0d6efd;
            border-color: #0d6efd;
        }
        .btn-primary:hover {
            background-color: #0b5ed7;
            border-color: #0b5ed7;
        }
        .log-area {
            background-color: #f4f4f4;
            font-family: monospace;
            font-size: 14px;
            padding: 10px;
            border-radius: 5px;
            border: 1px solid #ddd;
            height: 300px;
            overflow-y: auto;
        }
    </style>
</head>
<body>
    <div class="container mt-5">
        {% with messages = get_flashed_messages(with_categories=true) %}
            {% if messages %}
                {% for category, message in messages %}
                    <div class="alert alert-{{ category }}">
                        {{ message }}
                    </div>
                {% endfor %}
            {% endif %}
        {% endwith %}

        <h1 class="text-center mb-4">YouTubeGen Pro - لوحة التحكم</h1>

        <div class="form-container">
            <h2 class="mb-3">الإعدادات النصية والمرئية</h2>
            <form id="combinedSettingsForm" action="/update_settings" method="POST">
                <div class="mb-3">
                    <label for="topic" class="form-label">📝 موضوع الفيديو:</label>
                    <textarea class="form-control" id="topic" name="topic" rows="3" required>{{ env_data.get('TOPIC', '') }}</textarea>
                </div>
                <div class="mb-3">
                    <label for="word_count" class="form-label">🔢 عدد الكلمات:</label>
                    <input type="number" class="form-control" id="word_count" name="word_count" value="{{ env_data.get('WORD_COUNT', '6000') }}" required>
                </div>
                <div class="mb-3">
                    <label for="text_type" class="form-label">🖋️ نوع النص:</label>
                    <select class="form-select" id="text_type" name="text_type" required>
                        <option value="حكاية" {% if env_data.get('TEXT_TYPE') == 'حكاية' %}selected{% endif %}>حكاية</option>
                        <option value="مقال" {% if env_data.get('TEXT_TYPE') == 'مقال' %}selected{% endif %}>مقال</option>
                        <option value="وصف" {% if env_data.get('TEXT_TYPE') == 'وصف' %}selected{% endif %}>وصف</option>
                        <option value="قصة" {% if env_data.get('TEXT_TYPE') == 'قصة' %}selected{% endif %}>قصة</option>
                        <option value="أفكار" {% if env_data.get('TEXT_TYPE') == 'أفكار' %}selected{% endif %}>أفكار</option>
                        <option value="تحليل" {% if env_data.get('TEXT_TYPE') == 'تحليل' %}selected{% endif %}>تحليل</option>
                    </select>
                </div>
                <div class="mb-3">
                    <label for="language_type" class="form-label">🌐 لغة النص:</label>
                    <select class="form-select" id="language_type" name="language_type" required>
                        <option value="ar" {% if env_data.get('LANGUAGE_TYPE') == 'ar' %}selected{% endif %}>العربية</option>
                        <option value="en" {% if env_data.get('LANGUAGE_TYPE') == 'en' %}selected{% endif %}>الإنجليزية</option>
                        <option value="fr" {% if env_data.get('LANGUAGE_TYPE') == 'fr' %}selected{% endif %}>الفرنسية</option>
                    </select>
                </div>
                <div class="mb-3">
                    <label for="style_number" class="form-label">🎨 اختر الاستايل:</label>
                    <select class="form-select" id="style_number" name="style_number" required>
                        <!-- ... خيارات الاستايل -->
                    </select>
                </div>
                <div class="mb-3">
                    <label for="size_number" class="form-label">📏 اختر حجم الفيديو:</label>
                    <select class="form-select" id="size_number" name="size_number" required>
                        <!-- ... خيارات الحجم -->
                    </select>
                </div>
                <div class="mb-3">
                    <label for="voice_number" class="form-label">🔊 رقم الصوت:</label>
                    <input type="number" class="form-control" id="voice_number" name="voice_number" value="{{ env_data.get('VOICE_NUMBER', '1') }}" required>
                </div>
                <div class="mb-3">
                    <label for="speed" class="form-label">⚡️ سرعة الصوت:</label>
                    <input type="range" class="form-range" id="speed" name="speed" min="50" max="200" value="{{ env_data.get('SPEED', '90') }}">
                    <span id="speedValue">{{ (env_data.get('SPEED', '90') | float) }}</span>
                </div>
                <button type="submit" class="btn btn-primary w-100">💾 حفظ الإعدادات النصية والمرئية</button>
                <button type="button" class="btn btn-secondary w-100 mt-2" onclick="clearLog()">🧹 مسح سجل العمليات</button>
                <button type="button" class="btn btn-success w-100 mt-2" onclick="runAllScripts()">🚀 تشغيل جميع السكربتات</button>
            </form>
        </div>

        <div class="form-container">
            <h2 class="mb-3">التحكم بالسكربتات</h2>
            <table class="table table-bordered">
                <thead>
                    <tr>
                        <th>✅ تشغيل</th>
                        <th>📝 اسم السكربت</th>
                        <th>📁 مسار السكربت</th>
                    </tr>
                </thead>
                <tbody id="scriptTableBody">
                    {% set scripts = [
                        {"name": "1 TOPICE GENERATE TEXT.py"},
                        {"name": "2 Prompts.py"},
                        {"name": "3 Generate Images.py"},
                        {"name": "4 Generate Tashkeel.py"},
                        {"name": "5 Generate Audio.py"},
                        {"name": "6 Generate Video 1.py"},
                        {"name": "7 Generate Video Translate 2.py"},
                        {"name": "8 Generate Video Final 3.py"},
                        {"name": "9 UPLOAD VIDEO YOUTUBE.py"}
                    ] %}
                    {% for script in scripts %}
                    <tr>
                        <td>
                            <form action="{{ url_for('run_script', script_name=script.name) }}" method="POST">
                                <button type="submit" class="btn btn-primary">تشغيل</button>
                            </form>
                        </td>
                        <td>{{ script.name }}</td>
                        <td>D:/YoutubeGen Pro Online/Models/{{ script.name }}</td>
                    </tr>
                    {% endfor %}
                </tbody>
            </table>
        </div>

        <div class="form-container">
            <h2 class="mb-3">سجل العمليات</h2>
            <div class="log-area" id="logArea"></div>
        </div>
    </div>

    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
    <script>
        document.getElementById('speed').addEventListener('input', function () {
            const speedValue = (this.value / 100).toFixed(2);
            document.getElementById('speedValue').textContent = speedValue;
        });

        function log(message, color = 'black') {
            const logArea = document.getElementById('logArea');
            const logEntry = document.createElement('div');
            logEntry.innerHTML = `<span style="color:${color};">${message}</span>`;
            logArea.appendChild(logEntry);
            logArea.scrollTop = logArea.scrollHeight;
        }

        function clearLog() {
            document.getElementById('logArea').innerHTML = '';
        }

        function runAllScripts() {
            // إجراء لبدء جميع السكربتات، قد تحتاج إلى إجراء POST إلى خادمك لتشغيلها
            log("تشغيل جميع السكربتات...", "green");
            // توجيه POST إلى endpoint المناسب لتشغيل جميع السكربتات
            fetch('/run_all_scripts', { method: 'POST' })
                .then(response => {
                    if (response.ok) {
                        log('تم تشغيل جميع السكربتات بنجاح!', "green");
                    } else {
                        log('فشل في تشغيل السكربتات.', "red");
                    }
                })
                .catch(err => log('حدث خطأ: ' + err, "red"));
        }
    </script>
</body>
</html> قوم بتطوير هذة الصفحة وتنسيقها وعرض السجلات داخل خانة سجل العمليات واضف اليها كل البيانات الموجودة فى ملف الكونفج # D:/YouTubeGen Pro 3/CONFIG/config.py

import os
from pathlib import Path
from dotenv import load_dotenv, set_key

# =========================
# إعداد المسارات الرئيسية
# =========================
BASE_PATH = Path(__file__).resolve().parent.parent
CONFIG_PATH = BASE_PATH / "CONFIG"
OUTPUT_PATH = BASE_PATH / "OUTPUT"
ENV_FILE = CONFIG_PATH / ".env"

# إنشاء مجلد الإخراج إذا لم يكن موجودًا
OUTPUT_PATH.mkdir(parents=True, exist_ok=True)

# =========================
# تحميل الإعدادات من .env
# =========================
def load_settings():
    load_dotenv(ENV_FILE)
    return {
        "BASE_PATH": str(BASE_PATH),  # تحويل Path إلى str لتجنب المشاكل
        "CONFIG_PATH": str(CONFIG_PATH),
        "OUTPUT_PATH": str(OUTPUT_PATH),
        "ENV_FILE": str(ENV_FILE),  # إضافة ENV_FILE هنا
        "TOPIC": os.getenv("TOPIC", "اكتب مقال عن حوادثه او ظاهره غريبه لم يتم حل لغزها حتى الان موثرة فى التاريخ معا كتابة اسم الحادثه بوضوح فى العنوان واكتشف ان لم يكن اسم الحادث موجود اعد كتابته بوضوح واكتب مقدمة مثيرة ولكن قصيرة لحث المشاهد على اكمال الفيديو للاخر ورحب بالمشاهدين"),
        "INSTRUCTIONS": os.getenv("INSTRUCTIONS", ""),
        "WORD_COUNT": int(os.getenv("WORD_COUNT", 350)),
        "STYLE": os.getenv("STYLE", "رسمى"),
        "TEXT_TYPE": os.getenv("TEXT_TYPE", "حكاية"),
        "LANGUAGE_TYPE": os.getenv("LANGUAGE_TYPE", "ar"),
        "AUTO_RUN": os.getenv("AUTO_RUN", "false").lower() == "true",
        "AUTO_RUN_INTERVAL": int(os.getenv("AUTO_RUN_INTERVAL", 60)),
        "SPEED": float(os.getenv("SPEED", 0.90)),
        "VOICE_NUMBER": int(os.getenv("VOICE_NUMBER", 1)),
        "STYLE_NUMBER": int(os.getenv("STYLE_NUMBER", 1)),
        "SIZE_NUMBER": int(os.getenv("SIZE_NUMBER", 2)),
        "CHROMEDRIVER_PATH": os.getenv("CHROMEDRIVER_PATH", "C:/Program Files/chromedriver-win64/chromedriver.exe"),
        "CANARY_BINARY_PATH": os.getenv("CANARY_BINARY_PATH", "C:/Users/cazan/AppData/Local/Google/Chrome SxS/Application/chrome.exe"),
        "USER_DATA_DIR": os.getenv("USER_DATA_DIR", "C:/Users/cazan/AppData/Local/Google/Chrome SxS/User Data"),
        "PROFILES": os.getenv("PROFILES", "Default,Profile 5"),
        "VIDEO_PATH": os.getenv("VIDEO_PATH", "D:/YouTubeGen Pro 3/OUTPUT/Merged_Video/final_video.mp4"),
        "TITLE_PATH": os.getenv("TITLE_PATH", "D:/YouTubeGen Pro 3/OUTPUT/Pro Output Text/video_title.txt"),
        "DESCRIPTION_PATH": os.getenv("DESCRIPTION_PATH", "D:/YouTubeGen Pro 3/OUTPUT/Pro Output Text/video_description.txt"),
        "KEYWORDS_PATH": os.getenv("KEYWORDS_PATH", "D:/YouTubeGen Pro 3/OUTPUT/Pro Output Text/seo_keywords.txt"),
        "DELAY_BETWEEN_SCRIPTS": int(os.getenv("DELAY_BETWEEN_SCRIPTS", 5)),
        "RESTART_WAIT_MIN": int(os.getenv("RESTART_WAIT_MIN", 1300)),
        "RESTART_WAIT_MAX": int(os.getenv("RESTART_WAIT_MAX", 6000)),
        "SCRIPT_1_NAME": os.getenv("SCRIPT_1_NAME", "1 TOPICE GENERATE TEXT"),
        "SCRIPT_1_PATH": os.getenv("SCRIPT_1_PATH", "D:/YouTubeGen Pro 3/Models/1 TOPICE GENERATE TEXT.py"),
        "SCRIPT_2_NAME": os.getenv("SCRIPT_2_NAME", "2 Prompts"),
        "SCRIPT_2_PATH": os.getenv("SCRIPT_2_PATH", "D:/YouTubeGen Pro 3/Models/2 Prompts.py"),
        "SCRIPT_3_NAME": os.getenv("SCRIPT_3_NAME", "3 Generate Images"),
        "SCRIPT_3_PATH": os.getenv("SCRIPT_3_PATH", "D:/YouTubeGen Pro 3/Models/3 Generate Images.py"),
        "SCRIPT_4_NAME": os.getenv("SCRIPT_4_NAME", "4 Generate Tashkeel"),
        "SCRIPT_4_PATH": os.getenv("SCRIPT_4_PATH", "D:/YouTubeGen Pro 3/Models/4 Generate Tashkeel.py"),
        "SCRIPT_5_NAME": os.getenv("SCRIPT_5_NAME", "5 Generate Audio"),
        "SCRIPT_5_PATH": os.getenv("SCRIPT_5_PATH", "D:/YouTubeGen Pro 3/Models/5 Generate Audio.py"),
        "SCRIPT_6_NAME": os.getenv("SCRIPT_6_NAME", "6 Generate Video 1"),
        "SCRIPT_6_PATH": os.getenv("SCRIPT_6_PATH", "D:/YouTubeGen Pro 3/Models/6 Generate Video 1.py"),
        "SCRIPT_7_NAME": os.getenv("SCRIPT_7_NAME", "7 Generate Video Translate 2"),
        "SCRIPT_7_PATH": os.getenv("SCRIPT_7_PATH", "D:/YouTubeGen Pro 3/Models/7 Generate Video Teranslate 2.py"),
        "SCRIPT_8_NAME": os.getenv("SCRIPT_8_NAME", "8 Generate Video Final 3"),
        "SCRIPT_8_PATH": os.getenv("SCRIPT_8_PATH", "D:/YouTubeGen Pro 3/Models/8 Generate Video Final 3.py"),
        "SCRIPT_9_NAME": os.getenv("SCRIPT_9_NAME", "Script9"),
        "SCRIPT_9_PATH": os.getenv("SCRIPT_9_PATH", "D:/YouTubeGen Pro 3/Models/9 UPLOUD VIDEO YOUTUBE.py"),
        "PYTHON_ENV_PATH": os.getenv("PYTHON_ENV_PATH", "D:/YouTubeGen Pro 3/.venv/Scripts/python.exe"),
        "RANDOM_WAIT_MIN": int(os.getenv("RANDOM_WAIT_MIN", 30)),
        "RANDOM_WAIT_MAX": int(os.getenv("RANDOM_WAIT_MAX", 80)),
        "RESTART_DELAY_AFTER_COMPLETE": int(os.getenv("RESTART_DELAY_AFTER_COMPLETE", 10900)),
        "CLOSE_PROCESSES": os.getenv("CLOSE_PROCESSES", ""),
        "PROFILE_NAME": os.getenv("PROFILE_NAME", "Default"),
        "UPLOAD_PROFILE": os.getenv("UPLOAD_PROFILE", "Default"),
    }

def load_api_keys():
    load_dotenv(ENV_FILE)
    return {
        "GOOGLE_API_KEYS": [
            key.strip() for key in os.getenv("GOOGLE_API_KEYS", "AIzaSyAhndIyxh6MeHmdpnklUNAwglNAW9xOEeE,AIzaSyCOdY_Dcu4v6gmVLKtU70DCq2GBhUQMyNI").split(",") if key.strip()
        ],
        "HUGGINGFACE_API_KEYS": [
            key.strip() for key in os.getenv("HUGGINGFACE_API_KEYS", "<TRUFFLEHOG_REDACTED_HUGGINGFACE>,<TRUFFLEHOG_REDACTED_HUGGINGFACE>,<TRUFFLEHOG_REDACTED_HUGGINGFACE>,<TRUFFLEHOG_REDACTED_HUGGINGFACE>,<TRUFFLEHOG_REDACTED_HUGGINGFACE>,<TRUFFLEHOG_REDACTED_HUGGINGFACE>,<TRUFFLEHOG_REDACTED_HUGGINGFACE>,<TRUFFLEHOG_REDACTED_HUGGINGFACE>,<TRUFFLEHOG_REDACTED_HUGGINGFACE>,<TRUFFLEHOG_REDACTED_HUGGINGFACE>").split(",") if key.strip()
        ],
    }