{"id":34,"date":"2026-05-01T13:43:27","date_gmt":"2026-05-01T05:43:27","guid":{"rendered":"http:\/\/blog.lmxdg.sbs:40000\/?p=34"},"modified":"2026-05-01T13:43:27","modified_gmt":"2026-05-01T05:43:27","slug":"%e5%ba%93%e5%ad%98-ai%e5%9c%a8%e7%ba%bf%e7%bb%98%e7%94%bb","status":"publish","type":"post","link":"http:\/\/blog.lmxdg.sbs:40000\/?p=34","title":{"rendered":"\u5e93\u5b58-ai\u5728\u7ebf\u7ed8\u753b"},"content":{"rendered":"\n<!DOCTYPE html>\n<html lang=\"zh-CN\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Mountain AI &#8211; AI\u56fe\u7247\u751f\u6210<\/title>\n    <style>\n        * {\n            margin: 0;\n            padding: 0;\n            box-sizing: border-box;\n            font-family: 'Segoe UI', 'Microsoft YaHei', sans-serif;\n        }\n        \n        body {\n            background: linear-gradient(135deg, #1a2a3a 0%, #2c3e50 100%);\n            color: #ecf0f1;\n            min-height: 100vh;\n            display: flex;\n            justify-content: center;\n            align-items: center;\n            padding: 20px;\n        }\n        \n        .copyright {\n            position: fixed;\n            top: 10px;\n            right: 15px;\n            color: rgba(255, 255, 255, 0.6);\n            font-size: 12px;\n            z-index: 100;\n            text-align: right;\n        }\n        \n        .copyright a {\n            color: rgba(255, 255, 255, 0.7);\n            text-decoration: none;\n        }\n        \n        .container {\n            max-width: 800px;\n            width: 100%;\n            background: rgba(0, 0, 0, 0.4);\n            border-radius: 20px;\n            padding: 30px;\n            backdrop-filter: blur(10px);\n            border: 1px solid rgba(255, 255, 255, 0.1);\n            box-shadow: 0 20px 40px rgba(0, 0, 0, 0.3);\n        }\n        \n        h1 {\n            text-align: center;\n            margin-bottom: 10px;\n            font-size: 28px;\n            background: linear-gradient(135deg, #3498db, #2ecc71);\n            -webkit-background-clip: text;\n            -webkit-text-fill-color: transparent;\n            background-clip: text;\n        }\n        \n        .subtitle {\n            text-align: center;\n            color: rgba(255, 255, 255, 0.6);\n            margin-bottom: 30px;\n            font-size: 14px;\n        }\n        \n        .input-group {\n            margin-bottom: 20px;\n        }\n        \n        .input-group label {\n            display: block;\n            margin-bottom: 8px;\n            font-weight: 500;\n            color: #ecf0f1;\n        }\n        \n        textarea {\n            width: 100%;\n            background: rgba(255, 255, 255, 0.1);\n            border: 1px solid rgba(255, 255, 255, 0.2);\n            border-radius: 12px;\n            padding: 15px;\n            color: white;\n            font-size: 16px;\n            resize: vertical;\n            outline: none;\n            transition: all 0.3s;\n            font-family: inherit;\n        }\n        \n        textarea:focus {\n            border-color: #3498db;\n            box-shadow: 0 0 0 2px rgba(52, 152, 219, 0.2);\n        }\n        \n        .size-options {\n            display: grid;\n            grid-template-columns: repeat(3, 1fr);\n            gap: 15px;\n            margin: 15px 0;\n        }\n        \n        .size-option {\n            background: rgba(0, 0, 0, 0.4);\n            border: 2px solid rgba(255, 255, 255, 0.2);\n            border-radius: 12px;\n            padding: 12px;\n            text-align: center;\n            cursor: pointer;\n            transition: all 0.3s;\n            font-weight: 500;\n        }\n        \n        .size-option:hover {\n            border-color: #3498db;\n            transform: translateY(-2px);\n        }\n        \n        .size-option.active {\n            border-color: #2ecc71;\n            background: rgba(46, 204, 113, 0.1);\n            box-shadow: 0 0 10px rgba(46, 204, 113, 0.3);\n        }\n        \n        .generate-btn {\n            width: 100%;\n            background: linear-gradient(135deg, #3498db, #2ecc71);\n            border: none;\n            border-radius: 12px;\n            color: white;\n            padding: 15px;\n            font-weight: bold;\n            cursor: pointer;\n            transition: all 0.3s;\n            font-size: 18px;\n            margin: 10px 0 20px;\n        }\n        \n        .generate-btn:hover {\n            transform: translateY(-2px);\n            box-shadow: 0 5px 20px rgba(0, 0, 0, 0.3);\n        }\n        \n        .generate-btn:disabled {\n            opacity: 0.6;\n            cursor: not-allowed;\n            transform: none;\n        }\n        \n        .loading {\n            display: none;\n            flex-direction: column;\n            align-items: center;\n            gap: 15px;\n            margin: 20px 0;\n            padding: 40px;\n            background: rgba(0, 0, 0, 0.3);\n            border-radius: 12px;\n        }\n        \n        .spinner {\n            width: 40px;\n            height: 40px;\n            border: 3px solid rgba(255, 255, 255, 0.1);\n            border-top: 3px solid #3498db;\n            border-radius: 50%;\n            animation: spin 1s linear infinite;\n        }\n        \n        @keyframes spin {\n            0% { transform: rotate(0deg); }\n            100% { transform: rotate(360deg); }\n        }\n        \n        .image-preview {\n            background: rgba(0, 0, 0, 0.4);\n            border: 2px dashed rgba(255, 255, 255, 0.2);\n            border-radius: 12px;\n            min-height: 300px;\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            flex-direction: column;\n            gap: 15px;\n            margin-top: 20px;\n            overflow: hidden;\n        }\n        \n        .image-preview img {\n            max-width: 100%;\n            max-height: 500px;\n            border-radius: 8px;\n            display: none;\n        }\n        \n        .status {\n            text-align: center;\n            padding: 10px;\n            margin-top: 10px;\n            border-radius: 8px;\n            font-size: 14px;\n        }\n        \n        .status.success {\n            background: rgba(46, 204, 113, 0.2);\n            color: #2ecc71;\n        }\n        \n        .status.error {\n            background: rgba(231, 76, 60, 0.2);\n            color: #e74c3c;\n        }\n        \n        .status.info {\n            background: rgba(52, 152, 219, 0.2);\n            color: #3498db;\n        }\n        \n        .download-btn {\n            background: rgba(255, 255, 255, 0.1);\n            border: 1px solid rgba(255, 255, 255, 0.2);\n            border-radius: 8px;\n            color: white;\n            padding: 10px 20px;\n            cursor: pointer;\n            transition: all 0.3s;\n            margin-top: 10px;\n            font-size: 14px;\n        }\n        \n        .download-btn:hover {\n            background: rgba(255, 255, 255, 0.2);\n        }\n        \n        .button-group {\n            display: flex;\n            gap: 10px;\n            margin-top: 10px;\n        }\n        \n        .prompt-examples {\n            display: flex;\n            flex-wrap: wrap;\n            gap: 8px;\n            margin-top: 10px;\n        }\n        \n        .example-tag {\n            background: rgba(52, 152, 219, 0.2);\n            border: 1px solid rgba(52, 152, 219, 0.5);\n            border-radius: 20px;\n            padding: 5px 12px;\n            font-size: 12px;\n            cursor: pointer;\n            transition: all 0.3s;\n        }\n        \n        .example-tag:hover {\n            background: rgba(52, 152, 219, 0.4);\n            transform: scale(1.05);\n        }\n        \n        .api-status {\n            position: fixed;\n            bottom: 10px;\n            left: 15px;\n            font-size: 11px;\n            color: rgba(255, 255, 255, 0.4);\n        }\n    <\/style>\n<\/head>\n<body>\n    <div class=\"copyright\">\n        \u00a9 2025 Mountain AI<br>\n        <a href=\"mailto:mountain0708@outlook.com\">\u8054\u7cfb\u90ae\u7bb1<\/a>\n    <\/div>\n    \n    <div class=\"container\">\n        <h1>\ud83c\udfa8 Mountain AI \u56fe\u7247\u751f\u6210<\/h1>\n        <div class=\"subtitle\">AI \u56fe\u50cf\u751f\u6210\u5668 &#8211; \u8f93\u5165\u63cf\u8ff0\uff0c\u751f\u6210\u7cbe\u7f8e\u56fe\u7247<\/div>\n        \n        <div class=\"input-group\">\n            <label>\ud83d\udcdd \u56fe\u7247\u63cf\u8ff0<\/label>\n            <textarea id=\"image-prompt\" placeholder=\"\u4f8b\u5982\uff1a\u4e00\u53ea\u53ef\u7231\u7684\u6a58\u732b\u5750\u5728\u7a97\u53f0\u4e0a\uff0c\u9633\u5149\u6d12\u5728\u5b83\u8eab\u4e0a\uff0c\u6e29\u6696\u6cbb\u6108\u7684\u98ce\u683c\uff0c\u9ad8\u6e05\u753b\u8d28\" rows=\"4\"><\/textarea>\n        <\/div>\n        \n        <div class=\"prompt-examples\">\n            <span class=\"example-tag\" data-prompt=\"\u4e00\u53ea\u53ef\u7231\u7684\u6a58\u732b\u5750\u5728\u7a97\u53f0\u4e0a\uff0c\u9633\u5149\u6d12\u5728\u5b83\u8eab\u4e0a\uff0c\u6e29\u6696\u6cbb\u6108\u7684\u98ce\u683c\">\ud83d\udc31 \u53ef\u7231\u6a58\u732b<\/span>\n            <span class=\"example-tag\" data-prompt=\"\u672a\u6765\u57ce\u5e02\uff0c\u8d5b\u535a\u670b\u514b\u98ce\u683c\uff0c\u9713\u8679\u706f\u5149\uff0c\u9ad8\u697c\u6797\u7acb\uff0c\u96e8\u5929\uff0c\u53cd\u5c04\u706f\u5149\">\ud83c\udf06 \u8d5b\u535a\u57ce\u5e02<\/span>\n            <span class=\"example-tag\" data-prompt=\"\u7f8e\u4e3d\u7684\u6d77\u6ee9\u65e5\u843d\uff0c\u91d1\u8272\u7684\u9633\u5149\u6d12\u5728\u6d77\u9762\u4e0a\uff0c\u68d5\u6988\u6811\u7684\u526a\u5f71\uff0c\u6d6a\u6f2b\u6c1b\u56f4\">\ud83c\udf05 \u6d77\u6ee9\u65e5\u843d<\/span>\n            <span class=\"example-tag\" data-prompt=\"\u4e2d\u56fd\u5c71\u6c34\u753b\u98ce\u683c\uff0c\u5c71\u6c34\u4e91\u96fe\u7f2d\u7ed5\uff0c\u8fdc\u5c71\u5982\u9edb\uff0c\u610f\u5883\u60a0\u8fdc\">\u26f0\ufe0f \u5c71\u6c34\u753b<\/span>\n        <\/div>\n        \n        <div class=\"size-options\">\n            <div class=\"size-option active\" data-size=\"1024x1024\">\ud83d\udcd0 1:1 \u6b63\u65b9\u5f62<br><span style=\"font-size: 12px;\">1024&#215;1024<\/span><\/div>\n            <div class=\"size-option\" data-size=\"1280x720\">\ud83d\udcfa 16:9 \u6a2a\u5c4f<br><span style=\"font-size: 12px;\">1280&#215;720<\/span><\/div>\n            <div class=\"size-option\" data-size=\"1920x1080\">\ud83c\udfac \u9ad8\u6e05\u6a2a\u5c4f<br><span style=\"font-size: 12px;\">1920&#215;1080<\/span><\/div>\n        <\/div>\n        \n        <button id=\"generate-image-btn\" class=\"generate-btn\">\u2728 \u751f\u6210\u56fe\u7247<\/button>\n        \n        <div class=\"loading\" id=\"image-loading\">\n            <div class=\"spinner\"><\/div>\n            <div>\ud83c\udfa8 AI \u6b63\u5728\u521b\u4f5c\u4e2d&#8230;<\/div>\n        <\/div>\n        \n        <div class=\"image-preview\" id=\"image-preview\">\n            <div>\ud83d\uddbc\ufe0f \u751f\u6210\u7684\u56fe\u7247\u5c06\u663e\u793a\u5728\u8fd9\u91cc<\/div>\n            <img decoding=\"async\" id=\"generated-image\" src=\"\" alt=\"\u751f\u6210\u7684\u56fe\u7247\">\n        <\/div>\n        \n        <div class=\"button-group\" id=\"download-group\" style=\"display: none;\">\n            <button id=\"download-btn\" class=\"download-btn\">\ud83d\udcbe \u4e0b\u8f7d\u56fe\u7247<\/button>\n            <button id=\"regenerate-btn\" class=\"download-btn\">\ud83d\udd04 \u91cd\u65b0\u751f\u6210<\/button>\n        <\/div>\n        \n        <div class=\"status\" id=\"image-status\"><\/div>\n    <\/div>\n    \n    <div class=\"api-status\" id=\"api-status\">\ud83d\udfe2 \u7cfb\u7edf\u5c31\u7eea<\/div>\n\n    <script>\n        document.addEventListener('DOMContentLoaded', function() {\n            \/\/ API\u5bc6\u94a5\u914d\u7f6e - \u4fdd\u7559\u7684\u5bc6\u94a5\n            const apiKeys = [\n                \/\/ \u539f3\u53f7\u5bc6\u94a5\n                'sk-wvhobugfcbmpzzkukwukmdqividwfstgclngqywyewbmncnj',\n                \/\/ \u539f4\u53f7\u5bc6\u94a5\n                'sk-spaxacjlebnghdmbqxwsoiglvihsirwuqcmfhtyykjslhcqx',\n                \/\/ \u539f6\u53f7\u5bc6\u94a5\n                'sk-dpzutmtdwrftrfsfpfeqymajjmwvlpzaqpzgsisyzxtwjlyl',\n                \/\/ \u65b0\u6dfb\u52a0\u7684\u5bc6\u94a5\n                'sk-aerlojfshbjhnmcgcsmojdqappovvixjjiwkstamorubbqkh',\n                'sk-eceyminatzkynhhznntsfjyktkcljvtvszlenwtzxyjhpaie'\n            ];\n            \n            \/\/ API\u914d\u7f6e\n            const imageApiUrl = 'https:\/\/api.siliconflow.cn\/v1\/images\/generations';\n            const imageModel = 'Kwai-Kolors\/Kolors';\n            \n            \/\/ DOM \u5143\u7d20\n            const imagePrompt = document.getElementById('image-prompt');\n            const generateImageBtn = document.getElementById('generate-image-btn');\n            const imageLoading = document.getElementById('image-loading');\n            const imagePreview = document.getElementById('image-preview');\n            const generatedImage = document.getElementById('generated-image');\n            const imageStatus = document.getElementById('image-status');\n            const downloadGroup = document.getElementById('download-group');\n            const downloadBtn = document.getElementById('download-btn');\n            const regenerateBtn = document.getElementById('regenerate-btn');\n            const apiStatusDiv = document.getElementById('api-status');\n            const sizeOptions = document.querySelectorAll('.size-option');\n            const exampleTags = document.querySelectorAll('.example-tag');\n            \n            let selectedSize = '1024x1024';\n            let currentImageUrl = '';\n            \n            \/\/ \u66f4\u65b0API\u72b6\u6001\u663e\u793a\n            function updateApiStatus(message, isError = false) {\n                apiStatusDiv.textContent = message;\n                apiStatusDiv.style.color = isError ? '#e74c3c' : 'rgba(255, 255, 255, 0.4)';\n                if (!isError) {\n                    setTimeout(() => {\n                        if (apiStatusDiv.textContent === message) {\n                            apiStatusDiv.style.color = 'rgba(255, 255, 255, 0.4)';\n                        }\n                    }, 3000);\n                }\n            }\n            \n            \/\/ \u968f\u673a\u83b7\u53d6API\u5bc6\u94a5\n            function getRandomApiKey() {\n                const randomIndex = Math.floor(Math.random() * apiKeys.length);\n                return apiKeys[randomIndex];\n            }\n            \n            \/\/ \u663e\u793a\u56fe\u7247\u751f\u6210\u72b6\u6001\n            function showImageStatus(message, type = '') {\n                imageStatus.textContent = message;\n                imageStatus.className = 'status';\n                if (type) {\n                    imageStatus.classList.add(type);\n                }\n            }\n            \n            \/\/ \u5c3a\u5bf8\u9009\u62e9\n            sizeOptions.forEach(option => {\n                option.addEventListener('click', function() {\n                    sizeOptions.forEach(opt => opt.classList.remove('active'));\n                    this.classList.add('active');\n                    selectedSize = this.dataset.size;\n                    updateApiStatus(`\u5df2\u9009\u62e9\u5c3a\u5bf8: ${selectedSize}`);\n                });\n            });\n            \n            \/\/ \u793a\u4f8b\u6807\u7b7e\u70b9\u51fb\n            exampleTags.forEach(tag => {\n                tag.addEventListener('click', function() {\n                    const prompt = this.dataset.prompt;\n                    imagePrompt.value = prompt;\n                    updateApiStatus(`\u5df2\u586b\u5165\u793a\u4f8b: ${prompt.substring(0, 30)}...`);\n                });\n            });\n            \n            \/\/ \u4e0b\u8f7d\u56fe\u7247\n            downloadBtn.addEventListener('click', function() {\n                if (currentImageUrl) {\n                    const link = document.createElement('a');\n                    link.href = currentImageUrl;\n                    link.download = `mountain_ai_${Date.now()}.png`;\n                    document.body.appendChild(link);\n                    link.click();\n                    document.body.removeChild(link);\n                    updateApiStatus('\u56fe\u7247\u4e0b\u8f7d\u4e2d...');\n                }\n            });\n            \n            \/\/ \u91cd\u65b0\u751f\u6210\uff08\u4f7f\u7528\u76f8\u540c\u7684\u63d0\u793a\u8bcd\uff09\n            regenerateBtn.addEventListener('click', function() {\n                if (imagePrompt.value.trim()) {\n                    generateImage();\n                } else {\n                    showImageStatus('\u8bf7\u8f93\u5165\u56fe\u7247\u63cf\u8ff0', 'error');\n                }\n            });\n            \n            \/\/ \u751f\u6210\u56fe\u7247\u4e3b\u51fd\u6570\uff08\u5e26\u81ea\u52a8\u91cd\u8bd5\uff09\n            async function generateImage(retryCount = 0) {\n                const prompt = imagePrompt.value.trim();\n                if (!prompt) {\n                    showImageStatus('\u274c \u8bf7\u8f93\u5165\u56fe\u7247\u63cf\u8ff0', 'error');\n                    imagePrompt.focus();\n                    return;\n                }\n                \n                const MAX_RETRIES = apiKeys.length * 2;\n                \n                \/\/ \u663e\u793a\u52a0\u8f7d\u72b6\u6001\n                imageLoading.style.display = 'flex';\n                generateImageBtn.disabled = true;\n                downloadGroup.style.display = 'none';\n                generatedImage.style.display = 'none';\n                showImageStatus('\ud83c\udfa8 AI\u6b63\u5728\u521b\u4f5c\u4e2d\uff0c\u8bf7\u7a0d\u5019...', 'info');\n                updateApiStatus(`\u5c1d\u8bd5\u7b2c ${retryCount + 1} \u6b21...`);\n                \n                let lastError = null;\n                \n                \/\/ \u968f\u673a\u5c1d\u8bd5\u6240\u6709\u5bc6\u94a5\n                const triedKeys = new Set(); \/\/ \u8bb0\u5f55\u5c1d\u8bd5\u8fc7\u7684\u5bc6\u94a5\n                let attempts = 0;\n                let success = false;\n                \n                while (attempts < MAX_RETRIES &#038;&#038; !success) {\n                    try {\n                        let randomKey;\n                        \/\/ \u907f\u514d\u91cd\u590d\u4f7f\u7528\u540c\u4e00\u4e2a\u5bc6\u94a5\n                        do {\n                            randomKey = getRandomApiKey();\n                            attempts++;\n                            if (triedKeys.size >= apiKeys.length) break;\n                        } while (triedKeys.has(randomKey) && triedKeys.size < apiKeys.length);\n                        \n                        triedKeys.add(randomKey);\n                        updateApiStatus(`\u5c1d\u8bd5\u5bc6\u94a5 ${attempts}\/${MAX_RETRIES}...`);\n                        \n                        const response = await fetch(imageApiUrl, {\n                            method: 'POST',\n                            headers: {\n                                'Authorization': `Bearer ${randomKey}`,\n                                'Content-Type': 'application\/json'\n                            },\n                            body: JSON.stringify({\n                                model: imageModel,\n                                prompt: prompt,\n                                size: selectedSize,\n                                n: 1\n                            })\n                        });\n                        \n                        if (!response.ok) {\n                            throw new Error(`HTTP ${response.status}`);\n                        }\n                        \n                        const data = await response.json();\n                        \n                        if (data.data &#038;&#038; data.data.length > 0) {\n                            currentImageUrl = data.data[0].url;\n                            generatedImage.src = currentImageUrl;\n                            generatedImage.style.display = 'block';\n                            \n                            \/\/ \u66f4\u65b0\u9884\u89c8\u533a\u57df\n                            const previewDiv = document.querySelector('.image-preview > div:first-child');\n                            if (previewDiv) previewDiv.style.display = 'none';\n                            \n                            showImageStatus('\u2705 \u56fe\u7247\u751f\u6210\u6210\u529f\uff01', 'success');\n                            updateApiStatus(`\u2713 \u6210\u529f\uff01\u8017\u65f6 ${Math.round((Date.now() - startTime) \/ 1000)}\u79d2`);\n                            \n                            downloadGroup.style.display = 'flex';\n                            success = true;\n                            break;\n                        } else {\n                            throw new Error('\u672a\u6536\u5230\u56fe\u7247\u6570\u636e');\n                        }\n                        \n                    } catch (error) {\n                        console.error(`\u5c1d\u8bd5 ${attempts} \u5931\u8d25:`, error);\n                        lastError = error;\n                        updateApiStatus(`\u2717 \u5c1d\u8bd5 ${attempts} \u5931\u8d25: ${error.message}`, true);\n                        \n                        \/\/ \u77ed\u6682\u5ef6\u8fdf\u540e\u7ee7\u7eed\n                        await new Promise(resolve => setTimeout(resolve, 500));\n                    }\n                }\n                \n                \/\/ \u9690\u85cf\u52a0\u8f7d\u72b6\u6001\n                imageLoading.style.display = 'none';\n                generateImageBtn.disabled = false;\n                \n                if (!success) {\n                    let errorMsg = '\u751f\u6210\u5931\u8d25\uff1a';\n                    if (lastError?.message === 'HTTP 401') {\n                        errorMsg = '\u8ba4\u8bc1\u5931\u8d25\uff0c\u8bf7\u68c0\u67e5API\u5bc6\u94a5\u914d\u7f6e';\n                    } else if (lastError?.message === 'HTTP 429') {\n                        errorMsg = '\u8bf7\u6c42\u8fc7\u4e8e\u9891\u7e41\uff0c\u8bf7\u7a0d\u540e\u518d\u8bd5';\n                    } else if (lastError?.message === 'HTTP 500') {\n                        errorMsg = '\u670d\u52a1\u5668\u9519\u8bef\uff0c\u8bf7\u7a0d\u540e\u91cd\u8bd5';\n                    } else {\n                        errorMsg += lastError?.message || '\u6240\u6709\u5bc6\u94a5\u5747\u5c1d\u8bd5\u5931\u8d25';\n                    }\n                    showImageStatus(`\u274c ${errorMsg}`, 'error');\n                    updateApiStatus(`\u2717 \u6240\u6709\u5bc6\u94a5\u5c1d\u8bd5\u5931\u8d25`, true);\n                    \n                    \/\/ \u663e\u793a\u9884\u89c8\u533a\u63d0\u793a\n                    const previewDiv = document.querySelector('.image-preview > div:first-child');\n                    if (previewDiv) {\n                        previewDiv.style.display = 'flex';\n                        previewDiv.innerHTML = '\u274c \u751f\u6210\u5931\u8d25<br><span style=\"font-size:12px;\">\u8bf7\u7a0d\u540e\u91cd\u8bd5\u6216\u68c0\u67e5\u7f51\u7edc<\/span>';\n                    }\n                }\n            }\n            \n            \/\/ \u5305\u88c5\u751f\u6210\u51fd\u6570\uff0c\u8bb0\u5f55\u5f00\u59cb\u65f6\u95f4\n            let startTime;\n            async function generateImageWithTimer() {\n                startTime = Date.now();\n                await generateImage(0);\n            }\n            \n            \/\/ \u7ed1\u5b9a\u751f\u6210\u6309\u94ae\u4e8b\u4ef6\n            generateImageBtn.addEventListener('click', generateImageWithTimer);\n            \n            \/\/ \u652f\u6301\u56de\u8f66\u5feb\u6377\u952e\uff08Ctrl+Enter\uff09\n            imagePrompt.addEventListener('keydown', function(e) {\n                if (e.ctrlKey && e.key === 'Enter') {\n                    e.preventDefault();\n                    generateImageWithTimer();\n                }\n            });\n            \n            \/\/ \u521d\u59cb\u5316\u63d0\u793a\n            setTimeout(() => {\n                updateApiStatus(`\ud83d\udfe2 \u7cfb\u7edf\u5c31\u7eea | ${apiKeys.length}\u4e2a\u53ef\u7528\u5bc6\u94a5`);\n                showImageStatus('\ud83d\udca1 \u63d0\u793a\uff1a\u8f93\u5165\u63cf\u8ff0\u540e\u70b9\u51fb\u751f\u6210\uff0c\u652f\u6301 Ctrl+Enter \u5feb\u6377\u952e');\n            }, 500);\n            \n            console.log('Mountain AI \u56fe\u7247\u751f\u6210\u5668\u5df2\u542f\u52a8');\n            console.log('\u53ef\u7528\u5bc6\u94a5\u6570\u91cf:', apiKeys.length);\n        });\n    <\/script>\n<\/body>\n<\/html>\n","protected":false},"excerpt":{"rendered":"<p>Mountain AI &#8211; AI\u56fe\u7247\u751f\u6210 \u00a9 2025 Mountain AI \u8054\u7cfb\u90ae\u7bb1 \ud83c\udfa8 Mo&hellip; <a class=\"more-link\" href=\"http:\/\/blog.lmxdg.sbs:40000\/?p=34\">\u7ee7\u7eed\u9605\u8bfb<span class=\"screen-reader-text\">\u5e93\u5b58-ai\u5728\u7ebf\u7ed8\u753b<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-34","post","type-post","status-publish","format-standard","hentry","category-uncategorized","entry"],"_links":{"self":[{"href":"http:\/\/blog.lmxdg.sbs:40000\/index.php?rest_route=\/wp\/v2\/posts\/34","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/blog.lmxdg.sbs:40000\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/blog.lmxdg.sbs:40000\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/blog.lmxdg.sbs:40000\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/blog.lmxdg.sbs:40000\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=34"}],"version-history":[{"count":1,"href":"http:\/\/blog.lmxdg.sbs:40000\/index.php?rest_route=\/wp\/v2\/posts\/34\/revisions"}],"predecessor-version":[{"id":35,"href":"http:\/\/blog.lmxdg.sbs:40000\/index.php?rest_route=\/wp\/v2\/posts\/34\/revisions\/35"}],"wp:attachment":[{"href":"http:\/\/blog.lmxdg.sbs:40000\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=34"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/blog.lmxdg.sbs:40000\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=34"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/blog.lmxdg.sbs:40000\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=34"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}