Files
igny8/igny8-wp-plugin-for-reference-olny/ai/runware-api.php
2025-11-09 10:27:02 +00:00

192 lines
5.2 KiB
PHP

<?php
/**
* ==========================
* 🔐 IGNY8 FILE RULE HEADER
* ==========================
* @file : runware-api.php
* @location : /ai/runware-api.php
* @type : AI Integration
* @scope : Global
* @allowed : Runware API calls, image generation, AI processing
* @reusability : Globally Reusable
* @notes : Runware image generation API integration
*/
// Prevent direct access
if (!defined('ABSPATH')) {
exit;
}
/**
* Generate image using Runware API
*
* @param string $prompt The image generation prompt
* @param string $model The Runware model to use (default: gen3a_turbo)
* @return array|WP_Error Response data or error
*/
function igny8_runway_generate_image($prompt, $model = 'gen3a_turbo') {
$api_key = get_option('igny8_runware_api_key', '');
if (empty($api_key)) {
return new WP_Error('no_api_key', 'Runware API key not configured');
}
$url = 'https://api.runwayml.com/v1/image/generations';
$headers = [
'Authorization' => 'Bearer ' . $api_key,
'Content-Type' => 'application/json',
];
$body = [
'model' => $model,
'prompt' => $prompt,
'size' => '1024x1024',
'quality' => 'standard',
'n' => 1
];
$args = [
'method' => 'POST',
'headers' => $headers,
'body' => json_encode($body),
'timeout' => 60,
];
$response = wp_remote_post($url, $args);
if (is_wp_error($response)) {
igny8_log_ai_event('runway_api_error', 'error', [
'message' => $response->get_error_message(),
'prompt' => $prompt,
'model' => $model
]);
return $response;
}
$response_code = wp_remote_retrieve_response_code($response);
$response_body = wp_remote_retrieve_body($response);
$response_data = json_decode($response_body, true);
if ($response_code !== 200) {
$error_message = isset($response_data['error']['message']) ? $response_data['error']['message'] : 'Unknown error';
igny8_log_ai_event('runway_api_error', 'error', [
'code' => $response_code,
'message' => $error_message,
'prompt' => $prompt,
'model' => $model
]);
return new WP_Error('api_error', $error_message);
}
// Log successful API call
igny8_log_ai_event('runway_api_success', 'success', [
'model' => $model,
'prompt_length' => strlen($prompt),
'cost' => 0.036, // Runware pricing
'service' => 'runware'
]);
return $response_data;
}
/**
* Download and save image from Runware response
*
* @param array $response_data The API response data
* @param string $filename The desired filename
* @return string|WP_Error Saved file path or error
*/
function igny8_runway_save_image($response_data, $filename) {
if (!isset($response_data['data'][0]['url'])) {
return new WP_Error('no_image_url', 'No image URL in response');
}
$image_url = $response_data['data'][0]['url'];
// Create uploads directory
$upload_dir = wp_upload_dir();
$igny8_dir = $upload_dir['basedir'] . '/igny8-ai-images/';
if (!file_exists($igny8_dir)) {
wp_mkdir_p($igny8_dir);
}
// Download image
$image_response = wp_remote_get($image_url);
if (is_wp_error($image_response)) {
return $image_response;
}
$image_data = wp_remote_retrieve_body($image_response);
$file_path = $igny8_dir . $filename;
$saved = file_put_contents($file_path, $image_data);
if ($saved === false) {
return new WP_Error('save_failed', 'Failed to save image file');
}
return $file_path;
}
/**
* Test Runware API connection
*
* @return array Test result
*/
function igny8_test_runway_connection() {
$test_prompt = 'A simple test image: a red circle on white background';
$response = igny8_runway_generate_image($test_prompt);
if (is_wp_error($response)) {
return [
'success' => false,
'message' => $response->get_error_message(),
'details' => 'Runware API connection failed'
];
}
return [
'success' => true,
'message' => 'Runware API connection successful',
'details' => 'Test image generation completed successfully'
];
}
/**
* Get available Runware models
*
* @return array Available models
*/
function igny8_get_runway_models() {
return [
'gen3a_turbo' => [
'name' => 'Gen-3 Alpha Turbo',
'description' => 'Fast, high-quality image generation',
'cost' => 0.055
],
'gen3a' => [
'name' => 'Gen-3 Alpha',
'description' => 'Standard quality image generation',
'cost' => 0.055
]
];
}
/**
* Log AI event for Runway API
*
* @param string $event Event type
* @param string $status Success/error status
* @param array $context Additional context data
*/
function igny8_log_runway_event($event, $status, $context = []) {
igny8_log_ai_event($event, $status, array_merge($context, [
'service' => 'runware',
'timestamp' => current_time('mysql')
]));
}