π¬ μν κ·Ή & μμ μ λ° ν둬ννΈ + μ΄λ―Έμ§ μμ±
π μν©λ³ μ½μ€ν¬ | πΈ μ μ μ·(Full Body) νμ | π¨ 4κ°μ§ νν
μΊλ¦ν° μλ²½ μΌμΉ | νκΈ μ΄μ€ν°μκ·Έ | μ€μ μΈλ¬Ό 2D λ³ν
β οΈ Cloudflare Worker μ€μ νμ!
μ΄λ―Έμ§/λΉλμ€ λ€μ΄λ‘λ λ° λΉλμ€ μμ±μ μν΄
Cloudflare Worker URLμ λ°λμ μ€μ ν΄μΌ ν©λλ€.
μλ API μ€μ μμ Worker URLμ μ λ ₯νλ©΄ μ΄ κ²½κ³ κ° μ¬λΌμ§λλ€.
π V14.2 μν κ·Ή μμ€ν μ΄λ?
λλ³Έμ μν©μ λ§κ² μΊλ¦ν°κ° μ§μ μ°κΈ°ν©λλ€!
- μ£Όμ μ μλ° β μ£Όμ μ μ λνΌ + μ£Όμ κΈ° λ€κ³ μλ λͺ¨μ΅
- ν΄λ½ νν° β νν°λ³΅ + μΆ€μΆλ μ μ μ·
- νΈλΌν λν΅λ Ή β κ·μ¬μ΄ 2D + λ―Έκ΅ κ΅κΈ° λ±μ§
- μ μ μ₯λ©΄ β ꡰ볡 + μ₯λκ° κ°μ κ·μ¬μ΄ ν±ν¬
π¨ μνλ 그림체λ₯Ό μ ννμΈμ
π λλ Έ API (Pollinations - ν둬ννΈ μμ±) 무λ£
μν κ·Ή ν둬ννΈ μμ±μ©. Pollinationsμμ λ¬΄λ£ λ°κΈ!
λλ Έ API ν€ λ°κΈ βπ Nano Banana PRO (DefAPI) μ λ£ - μ΄λ―Έμ§
κ³ νμ§ μ΄λ―Έμ§ μμ±. νκΈ ν μ€νΈ μ§μ!
DefAPI λ°λ‘κ°κΈ° βπ¬ Seedance 1.5 Pro (Kie.ai) μ λ£ - λΉλμ€
μ΄λ―Έμ§λ₯Ό μλμ λΉλμ€λ‘ λ³ν. 4μ΄/8μ΄/12μ΄ μ ν κ°λ₯
π° λΉμ©: 480p $0.04~$0.12 / 720p $0.07~$0.21 (durationλ³)
Kie.ai λ°λ‘κ°κΈ° βπ€ Kie.ai TTS Turbo 2.5 (μμ± + μλ§) μ λ£
λλ³Έμ μμ±μΌλ‘ λ³ν + SRT μλ§ νμΌ μλ μμ±!
Kie.ai API ν€ λ°κΈ ββοΈ Cloudflare Workers (CORS νλ‘μ) λ¬΄λ£ νμ!
μ΄λ―Έμ§ λ€μ΄λ‘λ CORS μ€λ₯ ν΄κ²°μ©. μλ λ¨κ³λ₯Ό λ°λΌ λ°°ν¬νμΈμ:
π λ°°ν¬ λ°©λ²:
1. Cloudflare Dashboard λ‘κ·ΈμΈ
2. μ’μΈ‘ λ©λ΄ β Workers & Pages ν΄λ¦
3. Create application β Create Worker ν΄λ¦
4. μ΄λ¦ μ λ ₯ (μ: dino-proxy) β Deploy ν΄λ¦
5. Edit code ν΄λ¦ ν μλ μ½λ λΆμ¬λ£κΈ°:
// Cloudflare Worker - CORS Proxy for Dino V14.2
export default {
async fetch(request, env, ctx) {
const corsHeaders = {
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Methods': 'GET, POST, OPTIONS',
'Access-Control-Allow-Headers': 'Content-Type, Authorization',
'Access-Control-Max-Age': '86400',
};
if (request.method === 'OPTIONS') {
return new Response(null, { headers: corsHeaders });
}
const url = new URL(request.url);
const targetUrl = url.searchParams.get('url');
if (!targetUrl) {
return new Response(JSON.stringify({
error: 'Missing url parameter',
usage: 'Add ?url=encoded_url to proxy requests'
}), {
status: 400,
headers: { 'Content-Type': 'application/json', ...corsHeaders }
});
}
try {
const decodedUrl = decodeURIComponent(targetUrl);
const headers = new Headers();
headers.set('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36');
const response = await fetch(decodedUrl, {
method: request.method,
headers: headers,
});
const responseHeaders = new Headers(response.headers);
Object.entries(corsHeaders).forEach(([key, value]) => {
responseHeaders.set(key, value);
});
const contentType = response.headers.get('content-type') || '';
if (contentType.includes('image') || contentType.includes('video')) {
const filename = decodedUrl.split('/').pop()?.split('?')[0] || 'download';
responseHeaders.set('Content-Disposition', `attachment; filename="${filename}"`);
}
return new Response(response.body, {
status: response.status,
statusText: response.statusText,
headers: responseHeaders
});
} catch (error) {
return new Response(JSON.stringify({
error: 'Proxy request failed',
message: error.message
}), {
status: 500,
headers: { 'Content-Type': 'application/json', ...corsHeaders }
});
}
}
};
6. Save and Deploy ν΄λ¦
7. μμ±λ URL (μ: https://dino-proxy.your-name.workers.dev)μ μλ μ€μ μ μ
λ ₯
π API μ€μ & μΊλ¦ν° μ€μ
β οΈ μΊλ¦ν° μ΄λ―Έμ§λ₯Ό μ λ‘λνμΈμ!
μ΄ μΊλ¦ν°κ° μν©μ λ§κ² μ·μ κ°μμ κ³ μ°κΈ°ν©λλ€
π λλ³Έ μ λ ₯ (μν κ·Ή λͺ¨λ)
AIκ° μν©λ³ μ½μ€ν¬ & μ μ μ‘μ μ μλ μ€κ³ν©λλ€!