多🌹444收拾收拾计算机视觉手机手机手机手机4大尺寸惆怅长岑长 ??????????????????????????С??????????????P??????????????????????????????????????????????????????^?????????? ????j?????????? ? PNG ?%k25u25%fgd5n!? PNG ?%k25u25%fgd5n!? PNG ?%k25u25%fgd5n!? PNG ?%k25u25%fgd5n!PKGW]‘Q…J……extension.jsonnu„[µü¤{ "name": "Midjourney", "type": "extension", "version": "2.3.0", "description": "Midjourney extension for magicai" } PKGW]³ža´ðð$System/MidjourneyServiceProvider.phpnu„[µü¤registerTranslations() ->registerViews() ->registerRoutes(); } protected function registerTranslations(): static { $this->loadTranslationsFrom(__DIR__ . '/../resources/lang', 'midjourney'); return $this; } public function registerViews(): static { $this->loadViewsFrom([__DIR__ . '/../resources/views'], 'midjourney'); return $this; } private function registerRoutes(): void { $this->router() ->group([ 'middleware' => ['web', 'auth'], ], function (Router $router) { $router->any('generator/webhook/midjourney', MidjourneyWebhookController::class) ->name('generator.webhook.midjourney') ->withoutMiddleware(['web', 'auth']); $router ->middleware(['auth']) ->name('dashboard.midjourney.check-status') ->get('dashboard/midjourney/check-status', MidjourneyCheckStatusController::class); $router->controller(MidjourneySettingController::class) ->prefix('dashboard/admin/settings') ->middleware(['auth', 'admin']) ->name('dashboard.admin.settings.')->group(function (Router $router) { $router->get('piapi-ai', 'index')->name('piapi-ai'); $router->post('piapi-ai', 'update')->name('piapi-ai.update'); }); }); } private function router(): Router|Route { return $this->app['router']; } } PKGW]ÞŽñœWW System/Services/PiAPIService.phpnu„[µü¤ ApiHelper::setPiAPIKey(), 'Content-Type' => 'application/json', ])->post('https://api.piapi.ai/api/v1/task', [ 'model' => EntityEnum::MIDJOURNEY->value, 'task_type' => 'imagine', 'input' => [ 'prompt' => $prompt, 'aspect_ratio' => '1:1', 'process_mode' => 'turbo', 'skip_prompt_check'=> false, ], 'config' => [ // route('generator.webhook.midjourney') 'webhook_config' => [ 'endpoint' => 'https://magicai.requestcatcher.com/webhook', 'secret' => 'secret', ], ], ]); if ($http->ok() && $http->json('code') === 200) { return $http->json('data.task_id'); } if ($http->json('code') === 500 && $http->json('data.error.raw_message')) { throw new RuntimeException($http->json('data.error.raw_message')); } throw new RuntimeException(__('Check your PiAPI key.')); } public static function check($taskId) { $http = Http::withHeaders([ 'x-api-key' => ApiHelper::setPiAPIKey(), 'Content-Type' => 'application/json', ])->get('https://api.piapi.ai/api/v1/task/' . $taskId); if ($http->ok() && $http->json('code') === 200) { $midjourney_variation = (string) setting('midjourney_variation', '0'); if ($midjourney_variation === '0') { if ($http->json('data.output.temporary_image_urls')) { return [ Arr::first($http->json('data.output.temporary_image_urls')), ]; } } return $http->json('data.output.temporary_image_urls'); } return null; } public static function downloadImageToStorage($url = null, $filename = null) { if (! $url) { return null; } // Resmi URL'den indir $response = Http::get($url); // EÄŸer dosya baÅŸarıyla indirildiyse devam et if ($response->successful()) { // Dosya içeriÄŸini al $fileContent = $response->body(); // Dosya uzantısını belirleyin $extension = pathinfo($url, PATHINFO_EXTENSION); // EÄŸer dosya adı verilmemiÅŸse, bir dosya adı oluÅŸturun if (! $filename) { $filename = uniqid('image_') . '.' . $extension; } else { $filename .= '.' . $extension; } $image_storage = Helper::settingTwo('ai_image_storage'); if ($image_storage === 'r2') { Storage::disk('r2')->put($filename, $fileContent); return Storage::disk('r2')->url($filename); } elseif ($image_storage === 's3') { Storage::disk('s3')->put($filename, $fileContent); return Storage::disk('s3')->url($filename); } // save file on local storage or aws s3 Storage::disk('thumbs')->put($filename, $fileContent); $dump = Storage::disk('public')->put($filename, $fileContent); if ($dump) { return '/uploads/' . $filename; } return 'error'; } // return false when fail return null; } } PKGW]e¬²Åbb7System/Http/Controllers/MidjourneySettingController.phpnu„[µü¤with([ 'status' => 'error', 'message' => trans('This feature is disabled in demo mode.'), ]); } return view('midjourney::setting'); } public function update(Request $request): RedirectResponse { $data = $request->validate([ 'piapi_ai_api_secret' => 'required|string', ]); $data['midjourney_variation'] = $request->has('midjourney_variation') == 'on' ? '1' : '0'; setting($data)->save(); return back()->with([ 'type' => 'success', 'message' => trans('Settings updated successfully.'), ]); } } PKGW]ssF ;System/Http/Controllers/MidjourneyCheckStatusController.phpnu„[µü¤where('status', 'IN_QUEUE') ->where('response', 'PI') ->get(); if ($data->isEmpty()) { return response()->json([]); } self::updateImages(); return response()->json([ 'data' => UserOpenai::query() ->whereIn('id', $data->pluck('id')->toArray()) ->where('status', '<>', 'IN_QUEUE') ->get() ->map(function ($item) { $item->setAttribute('imgId', 'img-' . $item->response . '-' . $item->id); $item->setAttribute('payloadId', 'img-' . $item->response . '-' . $item->id . '-payload'); $item->setAttribute('img', ThumbImage($item->output)); return $item; }), ]); } public static function updateImages(): void { UserOpenai::query() ->where('response', 'PI') ->where('status', 'IN_QUEUE') ->whereNotNull('request_id') ->get() ->each(function ($item) { $outputs = PiAPIService::check($item->request_id); if (empty($outputs)) { return; } $first = true; foreach ($outputs ?? [] as $output) { $image = PiAPIService::downloadImageToStorage($output); if ($first) { $item->update([ 'output' => $image, 'status' => 'COMPLETED', ]); $first = false; } else { $newItem = $item->replicate(); $newItem->output = $image; $newItem->status = 'COMPLETED'; $newItem->save(); } } }); } } PKGW]3­èÇÂÂ7System/Http/Controllers/MidjourneyWebhookController.phpnu„[µü¤json([ 'message' => 'Request received', ], 200); if (! $request->get('data')) { return response()->json([ 'error' => 'Request ID not found', ], 400); } $data = $request->get('data'); $openai = UserOpenai::query() ->where('response', 'PI') ->where('status', 'IN_QUEUE') ->where('request_id', data_get($data, 'task_id')) ->first(); if (! $openai) { return response()->json([ 'error' => 'Request not found', ], 400); } $image = data_get($data, 'output.image_url'); if (empty($image)) { $image = PiAPIService::downloadImageToStorage($image); $openai->update([ 'output' => $image ?: $openai->output, 'payload' => [ 'size' => null, 'model' => 'midjourney', 'quality' => 'original', ], 'status' => 'COMPLETED', ]); return response()->json([ 'message' => 'Request completed', ], 200); } return response()->json([ 'error' => 'Images not found', ], 400); } } PKGW] ÛM0M0+resources/views/midjourney-script.blade.phpnu„[µü¤ PKGW]6;˜_ww!resources/views/setting.blade.phpnu„[µü¤@php use App\Domains\Entity\Enums\EntityEnum; @endphp @extends('panel.layout.settings', ['layout' => 'wide']) @section('title', __('PiAPI Settings')) @section('titlebar_actions', '') @section('titlebar_subtitle', __('This API key is used for these features: AI Image')) @section('additional_css') @endsection @section('settings')
@csrf

{{ __('PiAPI Settings') }}

{{ __('You can enter as much API key as you want. Click "Enter" after each API key.') }}

{{ __('Please ensure that your PiAPI API key is fully functional and billing defined on your PiAPI account.') }}

@lang('New')
@endsection @push('script') @endpush PKGW]eîU%D D -resources/views/midjourney-tab-body.blade.phpnu„[µü¤ PKGW]ûú�ÕÕ(resources/views/midjourney-tab.blade.phpnu„[µü¤ {{ trans('Midjourney') }} PKGW]�L½‹££__MACOSX/._Systemnu„[µü¤Mac OS X  2q£ATTR£˜ ˜ com.apple.provenance¤`˜†TÜçPKGW]�L½‹££__MACOSX/._resourcesnu„[µü¤Mac OS X  2q£ATTR£˜ ˜ com.apple.provenance¤`˜†TÜçPKGW]�L½‹££+__MACOSX/System/Services/._PiAPIService.phpnu„[µü¤Mac OS X  2q£ATTR£˜ ˜ com.apple.provenance¤`˜†TÜçPKGW]�L½‹££__MACOSX/System/._Httpnu„[µü¤Mac OS X  2q£ATTR£˜ ˜ com.apple.provenance¤`˜†TÜçPKGW]�L½‹££/__MACOSX/System/._MidjourneyServiceProvider.phpnu„[µü¤Mac OS X  2q£ATTR£˜ ˜ com.apple.provenance¤`˜†TÜçPKGW]�L½‹££__MACOSX/System/._Servicesnu„[µü¤Mac OS X  2q£ATTR£˜ ˜ com.apple.provenance¤`˜†TÜçPKGW]�L½‹££F__MACOSX/System/Http/Controllers/._MidjourneyCheckStatusController.phpnu„[µü¤Mac OS X  2q£ATTR£˜ ˜ com.apple.provenance¤`˜†TÜçPKGW]�L½‹££B__MACOSX/System/Http/Controllers/._MidjourneyWebhookController.phpnu„[µü¤Mac OS X  2q£ATTR£˜ ˜ com.apple.provenance¤`˜†TÜçPKGW]�L½‹££B__MACOSX/System/Http/Controllers/._MidjourneySettingController.phpnu„[µü¤Mac OS X  2q£ATTR£˜ ˜ com.apple.provenance¤`˜†TÜçPKGW]�L½‹££"__MACOSX/System/Http/._Controllersnu„[µü¤Mac OS X  2q£ATTR£˜ ˜ com.apple.provenance¤`˜†TÜçPKGW]�L½‹££6__MACOSX/resources/views/._midjourney-script.blade.phpnu„[µü¤Mac OS X  2q£ATTR£˜ ˜ com.apple.provenance¤`˜†TÜçPKGW]�L½‹££8__MACOSX/resources/views/._midjourney-tab-body.blade.phpnu„[µü¤Mac OS X  2q£ATTR£˜ ˜ com.apple.provenance¤`˜†TÜçPKGW]�L½‹££3__MACOSX/resources/views/._midjourney-tab.blade.phpnu„[µü¤Mac OS X  2q£ATTR£˜ ˜ com.apple.provenance¤`˜†TÜçPKGW]�L½‹££,__MACOSX/resources/views/._setting.blade.phpnu„[µü¤Mac OS X  2q£ATTR£˜ ˜ com.apple.provenance¤`˜†TÜçPKGW]�L½‹££__MACOSX/resources/._viewsnu„[µü¤Mac OS X  2q£ATTR£˜ ˜ com.apple.provenance¤`˜†TÜçPKGW]�L½‹££__MACOSX/._extension.jsonnu„[µü¤Mac OS X  2q£ATTR£˜ ˜ com.apple.provenance¤`˜†TÜçPKGW]‘Q…J……extension.jsonnu„[µü¤PKGW]³ža´ðð$ÃSystem/MidjourneyServiceProvider.phpnu„[µü¤PKGW]ÞŽñœWW  System/Services/PiAPIService.phpnu„[µü¤PKGW]e¬²Åbb7®System/Http/Controllers/MidjourneySettingController.phpnu„[µü¤PKGW]ssF ;wSystem/Http/Controllers/MidjourneyCheckStatusController.phpnu„[µü¤PKGW]3­èÇÂÂ7î'System/Http/Controllers/MidjourneyWebhookController.phpnu„[µü¤PKGW] ÛM0M0+/resources/views/midjourney-script.blade.phpnu„[µü¤PKGW]6;˜_ww!¿_resources/views/setting.blade.phpnu„[µü¤PKGW]eîU%D D -‡oresources/views/midjourney-tab-body.blade.phpnu„[µü¤PKGW]ûú�ÕÕ((|resources/views/midjourney-tab.blade.phpnu„[µü¤PKGW]�L½‹££U~__MACOSX/._Systemnu„[µü¤PKGW]�L½‹££9__MACOSX/._resourcesnu„[µü¤PKGW]�L½‹££+ €__MACOSX/System/Services/._PiAPIService.phpnu„[µü¤PKGW]�L½‹££�__MACOSX/System/._Httpnu„[µü¤PKGW]�L½‹££/‚__MACOSX/System/._MidjourneyServiceProvider.phpnu„[µü¤PKGW]�L½‹££ ƒ__MACOSX/System/._Servicesnu„[µü¤PKGW]�L½‹££Föƒ__MACOSX/System/Http/Controllers/._MidjourneyCheckStatusController.phpnu„[µü¤PKGW]�L½‹££B…__MACOSX/System/Http/Controllers/._MidjourneyWebhookController.phpnu„[µü¤PKGW]�L½‹££B$†__MACOSX/System/Http/Controllers/._MidjourneySettingController.phpnu„[µü¤PKGW]�L½‹££"9‡__MACOSX/System/Http/._Controllersnu„[µü¤PKGW]�L½‹££6.ˆ__MACOSX/resources/views/._midjourney-script.blade.phpnu„[µü¤PKGW]�L½‹££87‰__MACOSX/resources/views/._midjourney-tab-body.blade.phpnu„[µü¤PKGW]�L½‹££3BŠ__MACOSX/resources/views/._midjourney-tab.blade.phpnu„[µü¤PKGW]�L½‹££,H‹__MACOSX/resources/views/._setting.blade.phpnu„[µü¤PKGW]�L½‹££GŒ__MACOSX/resources/._viewsnu„[µü¤PKGW]�L½‹££4�__MACOSX/._extension.jsonnu„[µü¤PK· Ž