concept24/nova-ai-studio

Standalone Laravel Nova Tool with AI capabilities: Text Generation, Image Generation, Visual Analysis, and Chat via OpenRouter.

Maintainers

Package info

bitbucket.org/concept24/nova-ai-studio

pkg:composer/concept24/nova-ai-studio

Statistics

Installs: 9

Dependents: 0

Suggesters: 0

v2.2.2 2026-04-03 13:54 UTC

This package is auto-updated.

Last update: 2026-04-03 13:55:00 UTC


README

Laravel Nova Tool cu capabilități AI complete: Chat, Generare text, Generare imagini, Analiză vizuală și Gestionare prompt-uri — toate prin OpenRouter.

Cuprins

Cerințe

DependințăVersiune
PHP>= 8.1
Laravel Nova^4.12 sau ^5.0
Laravel^10 sau ^11 sau ^12
Cont OpenRouteropenrouter.ai

Instalare

1. Instalare pachet

Via Packagist (recomandat pentru producție):

composer require concept24/nova-ai-studio

Dezvoltare locală (symlink):

Dacă vrei să editezi pachetul direct din proiect, adaugă în composer.json al aplicației:

"repositories": [
    {
        "type": "path",
        "url": "./packages/concept24/nova-ai-studio",
        "options": { "symlink": true }
    }
]
composer require concept24/nova-ai-studio:@dev

Composer va crea un symlink în vendor/ către directorul local. Orice modificare este vizibilă instant.

2. Înregistrare Tool în Nova

// app/Providers/NovaServiceProvider.php
use Concept24\NovaAiStudio\NovaAiStudio;

public function tools(): array
{
    return [
        new NovaAiStudio,
    ];
}

3. Publicare resurse și migrații

# Config (recomandat)
php artisan vendor:publish --tag=nova-ai-studio-config

# Migrații (dacă nu se folosesc migrațiile automate)
php artisan vendor:publish --tag=nova-ai-studio-migrations

# Seeders (opțional — pentru a copia seeder-ul local)
php artisan vendor:publish --tag=nova-ai-studio-seeders

# Traduceri (opțional — pentru suprascrieri)
php artisan vendor:publish --tag=nova-ai-studio-lang

4. Rulare migrații

php artisan migrate

Creează tabelele:

  • nova_ai_studio_logs — audit și tracking costuri
  • nova_ai_studio_conversations — persistență conversații chat
  • nova_ai_studio_messages — mesaje chat
  • nova_ai_studio_prompts — prompt-uri salvate (cu câmpuri for_chat, for_text, for_vision)
  • nova_ai_studio_video_jobs — job-uri generare video (status, cost, URL temporar)

5. Rulare seeder (opțional — 35 prompt-uri pre-configurate)

php artisan db:seed --class="Concept24\NovaAiStudio\Database\Seeders\AiStudioPromptSeeder"

Seeder-ul folosește updateOrCreate — poate fi rulat repetat fără duplicate.

6. Configurare .env

OPENROUTER_API_KEY=sk-or-v1-...

Notă: Dacă cheia lipsește sau este invalidă, tool-ul va afișa un mesaj informativ în loc de tab-uri, fără a genera erori.

Configurare

Fișier: config/nova-ai-studio.php

OpenRouter API

CheieEnvDefaultDescriere
openrouter_api_keyOPENROUTER_API_KEYCheia API OpenRouter (obligatoriu)
timeout_textOPENROUTER_TIMEOUT_TEXT60Timeout (secunde) pentru operații text
timeout_imageOPENROUTER_TIMEOUT_IMAGE180Timeout (secunde) pentru generare imagini

Tab Chat

CheieEnvDefaultDescriere
chat.default_modelNOVA_AI_STUDIO_CHAT_MODELopenrouter/autoModelul implicit
chat.max_tokensNOVA_AI_STUDIO_CHAT_MAX_TOKENS4000Tokeni maximi per răspuns
chat.history_limitNOVA_AI_STUDIO_CHAT_HISTORY50Mesaje păstrate în context

Web Search (OpenRouter Responses API Beta)

CheieEnvDefaultDescriere
web_search.max_resultsNOVA_AI_WEB_SEARCH_MAX_RESULTS5Rezultate (1-25)
web_search.engineNOVA_AI_WEB_SEARCH_ENGINEnullMotor: null=auto, native, exa, firecrawl, parallel
web_search.include_domains[]Restricționare la domenii specifice
web_search.exclude_domains[]Excludere domenii

Modele Text

'text_models' => [
    'providers' => ['openai', 'anthropic', 'google', 'x-ai', 'perplexity'],
    'families'  => [
        'openai'     => ['mini', 'standard'],
        'google'     => ['flash-lite-preview', 'flash-preview', 'pro-preview'],
        'anthropic'  => ['sonnet', 'opus', 'haiku'],
        'perplexity' => ['sonar-base', 'sonar-pro', 'sonar-deep-research', 'sonar-pro-search'],
        'x-ai'       => ['grok-fast'],
    ],
],

Modele Vision

'vision_models' => [
    'providers'             => ['google', 'openai', 'x-ai', 'anthropic'],
    'default_model'         => 'google/gemini-3-flash-preview',
    'max_completion_tokens' => 1000,
],

Generare Imagini

'image_generation' => [
    'providers'    => ['google', 'openai'],
    'aspect_ratios'=> ['1:1', '16:9', '9:16', '3:4', '4:3', ...],
    'sizes'        => ['0.5K', '1K', '2K', '4K'],
],

Generare Video (experimental)

'video_generation' => [
    'models' => [
        [
            'id'                   => 'google/veo-3.1',
            'name'                 => 'Google: Veo 3.1',
            'durations'            => [4, 6, 8],
            'resolutions'          => ['720p', '1080p', '4K'],
            'aspect_ratios'        => ['16:9', '9:16'],
            'max_input_references' => 1,
            'supports_audio'       => true,
        ],
        [
            'id'                   => 'bytedance/seedance-1-5-pro',
            'name'                 => 'ByteDance: Seedance 1.5 Pro',
            'durations'            => [4, 5, 6, 7, 8, 9, 10, 11, 12],
            'resolutions'          => ['480p', '720p', '1080p'],
            'aspect_ratios'        => ['16:9', '9:16', '4:3', '3:4', '1:1', '21:9'],
            'max_input_references' => 2,
            'supports_audio'       => true,
        ],
    ],
    'timeout' => 30,
],

Funcționalități

6 Tab-uri

TabDescriere
ChatConversații AI cu streaming, web search, system prompt, prompt-uri salvate
TextGenerare text cu selector model, stil, prompt template și traducere multi-limbă
ImaginiGenerare imagini cu aspect ratio și rezoluție configurabile
Analiză imagineUpload + analiză vizuală cu prompt template
Video (experimental)Generare video AI — async job cu polling, video player, download, paginație
Prompt-uriCRUD complet pentru gestionarea prompt-urilor salvate

Tab Chat

  • Conversații multiple cu persistență în baza de date
  • Streaming SSE în timp real
  • Selector model cu Auto Router (openrouter/auto)
  • Web Search toggle — activează căutare pe internet via OpenRouter Responses API
  • System Prompt configurabil per conversație
  • Prompt-uri salvate — selectare rapidă din lista de prompt-uri (doar citire, fără CRUD)
  • Grupare conversații: Astăzi / Ieri / Ultimele 7 zile / pe luni
  • Sidebar colapsabil cu căutare

Tab Text

  • Prompt Template — dropdown filtrable cu prompt-uri din baza de date (for_text = true), pre-populează textarea
  • 7 stiluri: Neutru, Persuasiv, Conversațional, Profesional, Tehnic, Creativ, SEO Optimizat
  • Opțiuni avansate: Max tokens (100-2000), Temperatură (0-2)
  • Traducere multi-limbă post-generare: selecție multiplă, traduceri paralele
    • 18 limbi: RO, EN, DE, FR, ES, IT, HU, BG, PL, NL, PT, CS, RU, TR, AR, ZH, JA, KO
  • Salvare rezultat ca prompt nou

Tab Imagini

  • Generare din prompt cu selector aspect ratio și rezoluție
  • Multi-image source upload — până la 3 imagini sursă pentru generare image-to-image (modele multimodale); grid preview cu ștergere per imagine, suport drag & drop
  • Descărcare directă a imaginilor generate
  • Vizualizare galerie cu istoricul generărilor din sesiune

Tab Video (experimental)

  • Generare video AI prin OpenRouter Alpha Video API (POST /api/alpha/videos)
  • Modele suportate: Google Veo 3.1, ByteDance Seedance 1.5 Pro (hardcodate în config)
  • Parametri per model: durată, rezoluție, aspect ratio, generare audio
  • Image-to-video — upload imagine referință (1–2 imagini, depinde de model)
  • Async workflow: submit job → polling la 10s → video ready
  • Persistență DB — job-urile supraviețuiesc refresh-ului paginii
  • Buton refresh manual per job pentru verificare status instant
  • Collapse/expand pe fiecare job card — click afișează prompt complet + video player + download
  • Paginație — 5 job-uri per pagină
  • Video player inline cu download proxy (API key nu e expus)
  • Cost tracking și logging (ACTION_VIDEO_GENERATION)

Tab Analiză Vizuală (Vision)

  • Upload imagine (max 10MB: JPEG, PNG, WebP, GIF)
  • Prompt Template — dropdown filtrable cu prompt-uri din baza de date (for_vision = true)
  • 3 niveluri detaliere: Scurt / Mediu / Detaliat
  • Prompt personalizat opțional

Tab Prompt-uri (CRUD)

  • Lista cu search text, filtre per scope (Toate / Chat / Text / Vision)
  • Tabs proprietate: Prompt-urile mele / Partajate
  • Formular creare/editare cu:
    • Titlu + Conținut (max 5000 caractere)
    • 3 checkboxuri vizibilitate: Chat, Text, Analiză imagine
    • Toggle partajat cu echipa
  • Vizualizare detalii prompt selectat
  • Ștergere cu confirmare dialog
  • Badge-uri vizuale: [Chat] [Text] [Vision] [Partajat]

Prompt-uri

Schema baza de date (nova_ai_studio_prompts)

ColoanăTipDescriere
titlevarchar(255)Numele prompt-ului
contenttextConținutul/instrucțiunile
for_chatbooleanVizibil în tab Chat
for_textbooleanVizibil în tab Text
for_visionbooleanVizibil în tab Analiză imagine
is_sharedbooleanPartajat cu echipa
user_idbigintCreatorul prompt-ului

Seeder pre-configurate (35 prompt-uri)

Organizate în 7 categorii:

  1. Marketing Email (7) — promoțional, coș abandonat, welcome, follow-up, reactivare, cerere recenzie, newsletter
  2. Social Media (4) — post IG/FB, script TikTok/Reels, calendar editorial, răspuns comentarii
  3. Ads & Conversie (5) — Google Ads, Meta Ads, banner, push/SMS, popup
  4. SEO & Content (6) — meta title, meta description, keywords, articol blog, descriere categorie, FAQ
  5. Comunicare Clienți (6) — client nemulțumit, review negativ, FAQ, retur, fidelitate, ocazii speciale
  6. Strategie (5) — analiză competitori, campanie sezonieră, brainstorming, UX, plan lansare
  7. Analiză Imagine (2) — descriere detaliată, descriere simplă

Modele suportate

Pachetul filtrează modelele din OpenRouter conform configurării. Lista exactă depinde de abonamentul OpenRouter.

Modele recomandate

CategorieModelMotiv
Chat generalopenrouter/autoAuto-selectează cel mai potrivit model
Chat rapidgoogle/gemini-2.5-flashRapid + ieftin
Raționamentanthropic/claude-3-5-sonnetCalitate înaltă
Imaginigoogle/gemini-3-flash-imageImagini de calitate
Visiongoogle/gemini-3-flash-previewAnaliză vizuală rapidă
Traducerigoogle/gemini-flash-liteIeftin + rapid

Endpoint-uri API

Toate rutele sunt protejate de middleware-ul Nova (nova, throttle:120,1, Authorize).

Prefix: /nova-vendor/nova-ai-studio/

MetodăRutăDescriere
GET/statusVerificare stare API key
GET/modelsModele text filtrate
GET/image-modelsModele generare imagini
GET/vision-modelsModele vision
GET/creditsCredit rămas OpenRouter
GET/video-modelsModele video (din config)
POST/text/generateGenerare text
POST/text/translateTraducere text
POST/image/generateGenerare imagine
POST/vision/analyzeAnaliză imagine
POST/chat/sendChat (non-streaming)
POST/chat/streamChat streaming SSE
GET/video/jobsLista job-uri video (user curent)
POST/video/generateSubmit generare video
GET/video/status/{jobId}Poll status job video
GET/video/download/{jobId}Download video (proxy)
GET/conversationsLista conversații
POST/conversationsCreare conversație
GET/conversations/{id}Detalii conversație
PUT/conversations/{id}Actualizare conversație
DELETE/conversations/{id}Ștergere conversație
GET/promptsLista prompt-uri (own + shared)
POST/promptsCreare prompt
PUT/prompts/{id}Actualizare prompt (owner)
DELETE/prompts/{id}Ștergere prompt (owner)
GET/logsJurnal utilizare (Super Admin)

Filtre prompt-uri

GET /prompts                  # Toate (own + shared)
GET /prompts?scope=chat       # Doar for_chat=true
GET /prompts?scope=text       # Doar for_text=true
GET /prompts?scope=vision     # Doar for_vision=true

Logging & Audit

Fiecare operație AI este înregistrată automat în tabela nova_ai_studio_logs.

Structura tabelei

ColoanăTipDescriere
costdecimal(12,8)Cost USD al operației
credit_leftdecimal(12,4)Credit rămas (actualizat async)
action_typevarchar(50)text_generation, text_translation, chat, image_generation, vision_analysis, video_generation
model_llmvarchar(200)ID-ul modelului OpenRouter
user_idbigintID utilizator
user_emailvarchar(255)Email utilizator (snapshot)

Utilizare Eloquent

use Concept24\NovaAiStudio\Models\AiStudioLog;

AiStudioLog::where('user_id', $userId)->latest()->get();
AiStudioLog::whereMonth('created_at', now()->month)->sum('cost');
AiStudioLog::where('action_type', AiStudioLog::ACTION_CHAT)->count();

Internaționalizare

Limbi incluse: RO (implicit), EN, DE, FR, ES.

# Publică pentru suprascriere
php artisan vendor:publish --tag=nova-ai-studio-lang

Editează: resources/lang/vendor/nova-ai-studio/{locale}.json

Dezvoltare frontend

Pachetul folosește Vue 3 cu Element Plus, compilat prin Nova Mix.

Structura resurse

resources/
├── js/
│   ├── tool.js                 # Entry point
│   ├── pages/
│   │   └── AiStudio.vue        # Pagina principală (5 tabs + API key check)
│   ├── components/
│   │   ├── CreditsBar.vue
│   │   ├── TabNav.vue          # Chat, Text, Imagini, Analiză imagine, Video, Prompt-uri
│   │   ├── tabs/
│   │   │   ├── ChatTab.vue
│   │   │   ├── TextTab.vue
│   │   │   ├── ImageTab.vue
│   │   │   ├── VisionTab.vue
│   │   │   ├── VideoTab.vue    # Generare video (experimental)
│   │   │   └── PromptsTab.vue  # CRUD prompt-uri
│   │   ├── chat/
│   │   │   ├── ChatMessage.vue
│   │   │   └── StreamingIndicator.vue
│   │   └── shared/
│   │       ├── ModelSelector.vue
│   │       ├── CopyButton.vue
│   │       ├── PromptPanel.vue # Modal prompt-uri (folosit din TextTab)
│   │       └── MarkdownRenderer.vue
│   └── utils/
├── css/
│   └── tool.css                # Variabile CSS, dark mode
└── lang/                       # Traduceri (ro, en, de, fr, es)

Securitate

  • Toate rutele necesită autentificare Nova (Authorize middleware)
  • Validare model_id față de lista albă configurată
  • Sanitizare input (strip_tags, mb_substr)
  • Rate limiting: 120 request/minut per IP
  • Credentiale API exclusiv prin variabile de mediu
  • Verificare API key la încărcare — mesaj informativ dacă lipsește/e invalidă

Licență

MIT — Copyright (c) Concept24 SRL