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;
use App\Helpers\FirstParty\AI\OpenAI;
use App\Helpers\FirstParty\Meme\MemeGenerator;
use App\Models\Category;
use App\Models\MemeMedia;
use ProtoneMedia\LaravelFFMpeg\Support\FFMpeg;
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()
{
$meme_medias = MemeMedia::whereNull('action_keywords')->get();
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);

View File

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

View File

@@ -12,9 +12,9 @@ class FrontMediaController extends Controller
{
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([
'success' => [

View File

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

View File

@@ -18,8 +18,8 @@
* @property string $type
* @property int|null $category_id
* @property int|null $user_id
* @property int|null $meme_id
* @property int|null $background_id
* @property int|null $meme_media_id
* @property int|null $background_media_id
* @property string $status
* @property string $prompt
* @property string|null $caption
@@ -42,8 +42,8 @@ class Meme extends Model
'category_id' => 'int',
'user_id' => 'int',
'meme_id' => 'int',
'background_id' => 'int',
'meme_media_id' => 'int',
'background_media_id' => 'int',
'meme_keywords' => 'array',
'keywords' => 'array',
@@ -58,8 +58,8 @@ class Meme extends Model
'is_system',
'category_id',
'user_id',
'meme_id',
'background_id',
'meme_media_id',
'background_media_id',
'status',
'prompt',
'caption',
@@ -74,11 +74,11 @@ class Meme extends Model
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()
{
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('user_id')->nullable();
$table->foreignId('meme_id')->nullable();
$table->foreignId('background_id')->nullable();
$table->foreignId('meme_media_id')->nullable();
$table->foreignId('background_media_id')->nullable();
$table->enum('status', ['pending', 'completed'])->default('pending');
$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');
});
}
};