This commit is contained in:
ct
2025-06-20 23:40:27 +08:00
parent 201837441d
commit e8e3def103
7 changed files with 69 additions and 18 deletions

View File

@@ -3,18 +3,39 @@
namespace App\Helpers\FirstParty\Maintenance; namespace App\Helpers\FirstParty\Maintenance;
use App\Helpers\FirstParty\AI\OpenAI; use App\Helpers\FirstParty\AI\OpenAI;
use App\Helpers\FirstParty\Meme\MemeGenerator;
use App\Models\Category;
use App\Models\MemeMedia; use App\Models\MemeMedia;
use ProtoneMedia\LaravelFFMpeg\Support\FFMpeg; use ProtoneMedia\LaravelFFMpeg\Support\FFMpeg;
class MemeMediaMaintenance class MemeMediaMaintenance
{ {
public static function generateMemesByCategories()
{
Category::where('system_memes_generated_count', '<', 1)
->chunk(10, function ($categories) {
foreach ($categories as $category) {
dump('Processing ' . $category->name);
$meme = MemeGenerator::generateMemeByCategory($category);
if (!is_null($meme)) {
$category->system_memes_generated_count++;
$category->save();
}
}
});
}
public static function patchMemeKeywords() public static function patchMemeKeywords()
{ {
$meme_medias = MemeMedia::whereNull('action_keywords')->get(); $meme_medias = MemeMedia::whereNull('action_keywords')->get();
foreach ($meme_medias as $key => $meme_media) { foreach ($meme_medias as $key => $meme_media) {
dump('Processing '.$key + 1 .'/'.$meme_medias->count().': '.$meme_media->name); dump('Processing ' . $key + 1 . '/' . $meme_medias->count() . ': ' . $meme_media->name);
$meme_keywords_response = OpenAI::getMemeKeywords($meme_media->name, $meme_media->description); $meme_keywords_response = OpenAI::getMemeKeywords($meme_media->name, $meme_media->description);

View File

@@ -92,13 +92,13 @@ public static function generateMemeByCategory(Category $category)
} }
if (! is_null($meme) && $meme->status == self::STATUS_PENDING) { if (! is_null($meme) && $meme->status == self::STATUS_PENDING) {
// populate meme_id // populate meme_media_id
$meme->meme_id = self::getSuitableMemeMedia($meme)->id; $meme->meme_media_id = self::getSuitableMemeMedia($meme)->id;
$meme->background_id = self::generateBackgroundMediaWithRunware($meme_output->background)->id; $meme->background_media_id = self::generateBackgroundMediaWithRunware($meme_output->background)->id;
if ( if (
//!is_null($meme->meme_id) && //!is_null($meme->meme_media_id) &&
! is_null($meme->background_id) ! is_null($meme->background_media_id)
) { ) {
$meme->status = self::STATUS_COMPLETED; $meme->status = self::STATUS_COMPLETED;
} }

View File

@@ -12,9 +12,9 @@ class FrontMediaController extends Controller
{ {
public function init(Request $request) public function init(Request $request)
{ {
$meme = Meme::with('meme_media', 'background_media')->where('status', MemeGenerator::STATUS_COMPLETED)->take(1)->latest()->first(); $meme = Meme::with('meme_media', 'background_media')->where('status', MemeGenerator::STATUS_COMPLETED)->inRandomOrder()->first();
$meme_media = MemeGenerator::getSuitableMemeMedia($meme); $meme_media = MemeGenerator::getSuitableMemeMedia($meme, 2);
return response()->json([ return response()->json([
'success' => [ 'success' => [

View File

@@ -47,6 +47,7 @@ class Category extends Model
'sample_captions' => 'array', 'sample_captions' => 'array',
'keywords' => 'array', 'keywords' => 'array',
'payload' => 'object', 'payload' => 'object',
'system_memes_generated_count' => 'int',
]; ];
protected $fillable = [ protected $fillable = [
@@ -61,6 +62,7 @@ class Category extends Model
'sample_captions', 'sample_captions',
'keywords', 'keywords',
'payload', 'payload',
'system_memes_generated_count',
]; ];
/** /**

View File

@@ -18,8 +18,8 @@
* @property string $type * @property string $type
* @property int|null $category_id * @property int|null $category_id
* @property int|null $user_id * @property int|null $user_id
* @property int|null $meme_id * @property int|null $meme_media_id
* @property int|null $background_id * @property int|null $background_media_id
* @property string $status * @property string $status
* @property string $prompt * @property string $prompt
* @property string|null $caption * @property string|null $caption
@@ -42,8 +42,8 @@ class Meme extends Model
'category_id' => 'int', 'category_id' => 'int',
'user_id' => 'int', 'user_id' => 'int',
'meme_id' => 'int', 'meme_media_id' => 'int',
'background_id' => 'int', 'background_media_id' => 'int',
'meme_keywords' => 'array', 'meme_keywords' => 'array',
'keywords' => 'array', 'keywords' => 'array',
@@ -58,8 +58,8 @@ class Meme extends Model
'is_system', 'is_system',
'category_id', 'category_id',
'user_id', 'user_id',
'meme_id', 'meme_media_id',
'background_id', 'background_media_id',
'status', 'status',
'prompt', 'prompt',
'caption', 'caption',
@@ -74,11 +74,11 @@ class Meme extends Model
public function meme_media() public function meme_media()
{ {
return $this->hasOne(MemeMedia::class, 'id', 'meme_id'); return $this->hasOne(MemeMedia::class, 'id', 'meme_media_id');
} }
public function background_media() public function background_media()
{ {
return $this->hasOne(BackgroundMedia::class, 'id', 'background_id'); return $this->hasOne(BackgroundMedia::class, 'id', 'background_media_id');
} }
} }

View File

@@ -34,8 +34,8 @@ public function up(): void
$table->foreignId('category_id')->nullable(); $table->foreignId('category_id')->nullable();
$table->foreignId('user_id')->nullable(); $table->foreignId('user_id')->nullable();
$table->foreignId('meme_id')->nullable(); $table->foreignId('meme_media_id')->nullable();
$table->foreignId('background_id')->nullable(); $table->foreignId('background_media_id')->nullable();
$table->enum('status', ['pending', 'completed'])->default('pending'); $table->enum('status', ['pending', 'completed'])->default('pending');
$table->text('prompt'); $table->text('prompt');

View File

@@ -0,0 +1,28 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::table('categories', function (Blueprint $table) {
$table->integer('system_memes_generated_count')->default(0);
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::table('categories', function (Blueprint $table) {
$table->dropColumn('system_memes_generated_count');
});
}
};