Sora π¬
Sora ΠΎΡ OpenAI β ΡΠ΅Π²ΠΎΠ»ΡΡΠΈΠΎΠ½Π½Π°Ρ AI ΠΌΠΎΠ΄Π΅Π»Ρ Π΄Π»Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ Π²ΠΈΠ΄Π΅ΠΎ ΠΈΠ· ΡΠ΅ΠΊΡΡΠ° ΠΈ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ. Π‘ΠΎΠ·Π΄Π°Π²Π°ΠΉΡΠ΅ ΡΠ΅Π°Π»ΠΈΡΡΠΈΡΠ½ΡΠ΅ Π²ΠΈΠ΄Π΅ΠΎΡΠΎΠ»ΠΈΠΊΠΈ Ρ ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΈ ΡΠΎΡΠ½ΡΠΌΠΈ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡΠΌΠΈ, Π΅ΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠΉ Π°Π½ΠΈΠΌΠ°ΡΠΈΠ΅ΠΉ ΠΈ Π²ΡΡΠΎΠΊΠΎΠΉ Π΄Π΅ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ.
Sora ΠΎΡ OpenAI β ΡΠ΅Π²ΠΎΠ»ΡΡΠΈΠΎΠ½Π½Π°Ρ AI ΠΌΠΎΠ΄Π΅Π»Ρ Π΄Π»Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ Π²ΠΈΠ΄Π΅ΠΎ ΠΈΠ· ΡΠ΅ΠΊΡΡΠ° ΠΈ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ. Π‘ΠΎΠ·Π΄Π°Π²Π°ΠΉΡΠ΅ ΡΠ΅Π°Π»ΠΈΡΡΠΈΡΠ½ΡΠ΅ Π²ΠΈΠ΄Π΅ΠΎΡΠΎΠ»ΠΈΠΊΠΈ Ρ ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΈ ΡΠΎΡΠ½ΡΠΌΠΈ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡΠΌΠΈ, Π΅ΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠΉ Π°Π½ΠΈΠΌΠ°ΡΠΈΠ΅ΠΉ ΠΈ Π²ΡΡΠΎΠΊΠΎΠΉ Π΄Π΅ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ.
Π‘ΠΎΠ·Π΄Π°ΡΡ
Π Π΅Π·ΡΠ»ΡΡΠ°Ρ
Π Π΅Π·ΡΠ»ΡΡΠ°Ρ ΠΏΠΎΡΠ²ΠΈΡΡΡ Π·Π΄Π΅ΡΡ
Π ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ
Sora β ΡΡΠΎ ΠΏΠ΅ΡΠ΅Π΄ΠΎΠ²Π°Ρ AI-ΠΌΠΎΠ΄Π΅Π»Ρ ΠΎΡ OpenAI Π΄Π»Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ Π²ΠΈΠ΄Π΅ΠΎ, ΡΠΏΠΎΡΠΎΠ±Π½Π°Ρ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Π²ΡΡΠΎΠΊΠΎΠΊΠ°ΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΠ΅ Π²ΠΈΠ΄Π΅ΠΎΡΠΎΠ»ΠΈΠΊΠΈ Π΄Π»ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡΡ Π΄ΠΎ 20 ΡΠ΅ΠΊΡΠ½Π΄ ΠΈΠ· ΡΠ΅ΠΊΡΡΠΎΠ²ΡΡ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠΉ ΠΈΠ»ΠΈ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ. ΠΠΎΠ΄Π΅Π»Ρ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ ΡΠΈΠ·ΠΈΠΊΡ ΡΠ΅Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΌΠΈΡΠ°, ΡΠΎΠ·Π΄Π°Π²Π°Ρ ΡΠ΅Π°Π»ΠΈΡΡΠΈΡΠ½ΡΠ΅ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡ ΠΏΠ΅ΡΡΠΎΠ½Π°ΠΆΠ΅ΠΉ, Π΅ΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΡ Π°Π½ΠΈΠΌΠ°ΡΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΈ ΠΏΠ»Π°Π²Π½ΡΠ΅ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄Ρ ΠΊΠ°ΠΌΠ΅ΡΡ. ΠΠΎΡΡΡΠΏΠ½Ρ ΡΡΠΈ Π²Π°ΡΠΈΠ°Π½ΡΠ° ΠΌΠΎΠ΄Π΅Π»ΠΈ: β’ Sora Turbo β Π±ΡΡΡΡΠ°Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΡ Π΄Π»Ρ ΠΏΡΠΎΡΠΎΡΠΈΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ β’ Sora HD β Π²ΡΡΠΎΠΊΠΎΠ΅ ΠΊΠ°ΡΠ΅ΡΡΠ²ΠΎ Π΄Π»Ρ ΠΏΡΠΎΡΠ΅ΡΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ° β’ Sora Pro β ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΠΊΠ°ΡΠ΅ΡΡΠ²ΠΎ Π΄Π»Ρ ΠΊΠΈΠ½ΠΎΠΌΠ°ΡΠΎΠ³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ²
ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ
- ΠΠ΅Π½Π΅ΡΠ°ΡΠΈΡ Π²ΠΈΠ΄Π΅ΠΎ ΠΈΠ· ΡΠ΅ΠΊΡΡΠΎΠ²ΡΡ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠΉ (text-to-video) Π΄Π»ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡΡ Π΄ΠΎ 20 ΡΠ΅ΠΊΡΠ½Π΄
- ΠΠ½ΠΈΠΌΠ°ΡΠΈΡ ΡΡΠ°ΡΠΈΡΠ½ΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ (image-to-video) Ρ ΡΠ΅Π°Π»ΠΈΡΡΠΈΡΠ½ΡΠΌΠΈ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡΠΌΠΈ
- 3 ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΊΠ°ΡΠ΅ΡΡΠ²Π°: Turbo (Π±ΡΡΡΡΠΎ), HD (Π²ΡΡΠΎΠΊΠΎΠ΅ ΠΊΠ°ΡΠ΅ΡΡΠ²ΠΎ), Pro (ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΠΊΠ°ΡΠ΅ΡΡΠ²ΠΎ)
- ΠΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅Π½Π½ΡΠ΅ ΡΠΎΡΠΌΠ°ΡΡ: ΠΊΠ²Π°Π΄ΡΠ°Ρ 1:1, ΠΏΠΎΡΡΡΠ΅Ρ 9:16, Π°Π»ΡΠ±ΠΎΠΌ 16:9, ΡΠΈΡΠΎΠΊΠΎΡΠΊΡΠ°Π½Π½ΠΎΠ΅
- Π€ΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΈ ΡΠΎΡΠ½Π°Ρ ΡΠΈΠΌΡΠ»ΡΡΠΈΡ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠΉ, Π³ΡΠ°Π²ΠΈΡΠ°ΡΠΈΠΈ ΠΈ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠΉ
- ΠΡΡΠ΅ΡΡΠ²Π΅Π½Π½Π°Ρ Π°Π½ΠΈΠΌΠ°ΡΠΈΡ ΠΏΠ΅ΡΡΠΎΠ½Π°ΠΆΠ΅ΠΉ Ρ ΡΠ΅Π°Π»ΠΈΡΡΠΈΡΠ½ΡΠΌΠΈ ΡΠΌΠΎΡΠΈΡΠΌΠΈ
- ΠΠ»Π°Π²Π½ΡΠ΅ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡ ΠΊΠ°ΠΌΠ΅ΡΡ: ΠΏΠ°Π½ΠΎΡΠ°ΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅, Π½Π°Π΅Π·Π΄, ΠΎΠ±Π»Π΅Ρ
- Π‘ΡΠΈΠ»ΠΈ: Natural, Cinematic, Animated, Abstract
- ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ Π΄ΠΎ 10 ΠΠ Π² ΡΠΎΡΠΌΠ°ΡΠ°Ρ JPG, PNG, WebP
- ΠΠ΅Π½Π΅ΡΠ°ΡΠΈΡ ΠΎΡ 30 ΡΠ΅ΠΊΡΠ½Π΄ Π΄ΠΎ 5 ΠΌΠΈΠ½ΡΡ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΠΊΠ°ΡΠ΅ΡΡΠ²Π°
Π’Π΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π΄Π΅ΡΠ°Π»ΠΈ
API ΠΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ
ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ Playground API Π΄Π»Ρ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ Sora π¬ Π² Π²Π°ΡΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΡΠ΅ Π·Π°ΠΏΡΠΎΡΡ ΡΡΠ΅Π±ΡΡΡ Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΡΠ΅ΡΠ΅Π· API ΠΊΠ»ΡΡ.
Π¨Π°Π³ 1: ΠΠΎΠ»ΡΡΠΈΡΠ΅ API ΠΊΠ»ΡΡ
Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ API ΠΊΠ»ΡΡ Π² Π²Π°ΡΠ΅ΠΌ Π»ΠΈΡΠ½ΠΎΠΌ ΠΊΠ°Π±ΠΈΠ½Π΅ΡΠ΅.
Π¨Π°Π³ 2: Endpoint
Π¨Π°Π³ 3: ΠΡΠΈΠΌΠ΅ΡΡ ΠΊΠΎΠ΄Π°
import requests
API_KEY = "YOUR_PTOLEMY_API_KEY"
BASE_URL = "https://ptolemy.ru"
def generate_sora(prompt, image_path=None):
url = f"{BASE_URL}/playground/api/sora/generate/"
headers = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json"
}
data = {
"prompt": prompt,
"model": "sora-2", # ΠΠΎΠ΄Π΅Π»Ρ
"duration": "5s", # ΠΠ»ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ
"aspect_ratio": "1:1", # Aspect Ratio
}
# Optional: Add image for image-to-image
if image_path:
import base64
with open(image_path, 'rb') as f:
image_b64 = base64.b64encode(f.read()).decode()
data["image"] = image_b64
response = requests.post(url, headers=headers, json=data)
result = response.json()
if result.get("success"):
print(f"β Generated successfully!")
print(f"Video URL: {result.get('video_url')}")
print(f"Cost: {result.get('cost_rub')} β½")
print(f"Time: {result.get('processing_time_ms')/1000:.1f}s")
# Show model response if available
if result.get('model_response'):
print(f"\nπ Model response:\n{result.get('model_response')}")
return result
else:
print(f"β Error: {result.get('error')}")
return None
# Example usage
result = generate_sora(
"A serene sunset over mountains",
image_path="input.jpg" # Optional
)
Π¨Π°Π³ 4: ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π·Π°ΠΏΡΠΎΡΠ°
| ΠΠ°ΡΠ°ΠΌΠ΅ΡΡ | Π’ΠΈΠΏ | ΠΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠΉ | ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ |
|---|---|---|---|
| prompt | string | ΠΠ° | ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΡΠΎΠ³ΠΎ, ΡΡΠΎ Π½ΡΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°ΡΡ (3-2000 ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ²) |
| image | string (base64) | ΠΠ΅Ρ | ΠΡΡ ΠΎΠ΄Π½ΠΎΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π² base64 (Π΄Π»Ρ image-to-image) |
| model | select | ΠΠ° |
ΠΡΠ±Π΅ΡΠΈΡΠ΅ ΠΌΠΎΠ΄Π΅Π»Ρ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΡΠ΅Π±ΡΠ΅ΠΌΠΎΠ³ΠΎ ΠΊΠ°ΡΠ΅ΡΡΠ²Π° ΠΈ ΡΠΊΠΎΡΠΎΡΡΠΈ
ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ: sora-2
|
| duration | select | ΠΠ° |
ΠΠ»ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Π²ΠΈΠ΄Π΅ΠΎ (20 ΡΠ΅ΠΊ Π΄ΠΎΡΡΡΠΏΠ½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ Sora Pro)
ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ: 5s
|
| aspect_ratio | select | ΠΠ΅Ρ |
Image dimensions
ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ: 1:1
|
| style | select | ΠΠ΅Ρ |
ΠΠΈΠ·ΡΠ°Π»ΡΠ½ΡΠΉ ΡΡΠΈΠ»Ρ Π²ΠΈΠ΄Π΅ΠΎ
ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ: natural
|
Π¨Π°Π³ 5: ΠΡΠ²Π΅Ρ API
Π£ΡΠΏΠ΅ΡΠ½ΡΠΉ ΠΎΡΠ²Π΅Ρ (200 OK):
{
"success": true,
"video_url": "https://cdn.ptolemy.ru/...",
"prompt": "A serene sunset over mountains",
"cost_kopeks": 390,
"cost_rub": 3.90,
"processing_time_ms": 3250,
"usage_id": "12345",
"model_response": "...full response from model...",
"request_id": "abc-def-123"
}
ΠΡΠ²Π΅Ρ Ρ ΠΎΡΠΈΠ±ΠΊΠΎΠΉ (400/401/500):
{
"error": "ΠΠ΅Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΡΡΠ΅Π΄ΡΡΠ²",
"detail": "ΠΠ° Π±Π°Π»Π°Π½ΡΠ΅ 2.50 β½, ΡΡΠ΅Π±ΡΠ΅ΡΡΡ 3.90 β½"
}