Skip to main content

Visão geral

LoRA (Low-Rank Adaptation) é uma técnica de fine-tuning que ensina a um modelo de IA um novo estilo visual usando um pequeno conjunto de imagens de exemplo. Ela funciona injetando novos “pesos de estilo” em um modelo existente, tornando o treinamento rápido e eficiente. Este guia percorre o fluxo completo:

Preparar imagens de treinamento

Faça a curadoria e upload de imagens de alta qualidade que representem o estilo desejado

Enviar job de treinamento

Envie uma requisição POST para /styles/train com as URLs das imagens e a configuração

Monitorar o progresso

Acompanhe o status do seu job de treinamento usando o job_id retornado

Gerar com seu estilo

Aplique seu estilo treinado à geração de imagens

Preparar imagens de treinamento

Curando seu dataset

A qualidade das suas imagens de treinamento impacta diretamente os resultados. Diferentes tipos de treinamento têm requisitos distintos:
TipoCaso de usoDicas
EstiloEstilos artísticos, estéticas visuaisEstilo consistente em assuntos variados
PersonagemAparência pessoal, personagens consistentesPoses, expressões e iluminação variadas
ObjetoItens específicos, produtosMúltiplos ângulos, objeto consistente

Quantas imagens?

Qualidade importa muito mais que quantidade. Um pequeno conjunto de imagens excelentes vai superar um grande conjunto de imagens medianas.
Tamanho do datasetOrientação
5 imagensMínimo viável. Pode funcionar para estilos simples e consistentes
10-30 imagensRecomendado. Melhor equilíbrio entre qualidade e cobertura
50+ imagensRetornos decrescentes, a menos que o estilo tenha alta variação
Qualidade > Quantidade15 imagens de alta qualidade produzirão melhores resultados que 50 de baixa qualidade. Priorize:
  • Alta resolução (mínimo 1024x1024)
  • Estilo consistente em todas as imagens
  • Sem marcas d’água, sobreposições de texto ou artefatos de compressão
  • Assuntos variados mantendo a coerência de estilo
Datasets de exemplo
  • Treinamento de personagem: fotos de uma pessoa com poses, expressões e condições de iluminação variadas. Evite incluir outras pessoas nas imagens.
  • Treinamento de estilo: uma coleção de obras de arte em um estilo consistente. Por exemplo, o The Metropolitan Museum of Art Ukiyo-E Dataset fornece xilogravuras japonesas ideais para treinar um estilo artístico.

Fazer upload das imagens

Antes do treinamento, faça upload das suas imagens para obter URLs hospedadas. Use o endpoint /assets:
import requests
import os
from dotenv import load_dotenv
import mimetypes

load_dotenv()

API_BASE = "https://api.krea.ai"
API_TOKEN = os.getenv("API_TOKEN")

image_dir = "training_images"
uploaded_urls = []

for filename in os.listdir(image_dir):
    if filename.lower().endswith(('.jpg', '.jpeg', '.png', '.webp')):
        filepath = os.path.join(image_dir, filename)
        mime_type, _ = mimetypes.guess_type(filepath)

        with open(filepath, 'rb') as f:
            response = requests.post(
                f"{API_BASE}/assets",
                headers={"Authorization": f"Bearer {API_TOKEN}"},
                files={"file": (filename, f, mime_type)},
                data={"description": f"Training image: {filename}"}
            )

        if response.ok:
            data = response.json()
            uploaded_urls.append(data["image_url"])
            print(f"Uploaded: {filename}")
        else:
            print(f"Failed: {filename}")

print(f"\nUploaded {len(uploaded_urls)} images")
Salve os valores de image_url retornados — você os passará para o endpoint de treinamento.

Treinar seu estilo

Exemplo básico de treinamento

Envie as URLs das suas imagens para iniciar o treinamento:
import requests
import os
from dotenv import load_dotenv

load_dotenv()

API_BASE = "https://api.krea.ai"
API_TOKEN = os.getenv("API_TOKEN")

# Training URLs from the upload step
urls = [
    "https://krea.ai/assets/img1.jpg",
    "https://krea.ai/assets/img2.jpg",
    "https://krea.ai/assets/img3.jpg",
    # ... more images
]

response = requests.post(
    f"{API_BASE}/styles/train",
    headers={
        "Authorization": f"Bearer {API_TOKEN}",
        "Content-Type": "application/json"
    },
    json={
        "name": "Ukiyo-E Style",
        "urls": urls,
        "model": "flux_dev",
        "type": "Style",
        "max_train_steps": 500
    }
)

response.raise_for_status()
job = response.json()
print(f"Training started! Job ID: {job['job_id']}")

Tipos de treinamento

O parâmetro type define padrões inteligentes otimizados para seu caso de uso:
TipoMelhor para
StyleEstilos artísticos, estéticas visuais
CharacterAparência pessoal, personagens consistentes
ObjectItens específicos, produtos
DefaultTreinamento genérico

Parâmetros

Parâmetros obrigatórios

name
string
required
Um nome descritivo para seu estilo personalizado.Exemplo: "Ukiyo-E Style", "Product Photos"
urls
array
required
Array de URLs de imagens para treinar. Inclua mais imagens para melhores resultados.

Parâmetros opcionais

model
string
default:"flux_dev"
Modelo base para treinamento:Modelos de imagem:
  • flux_dev - Alta qualidade, versátil
  • flux_schnell - Modelo em tempo real da BFL
  • qwen - Modelo da Alibaba
  • z-image - Modelo eficiente de imagem da Alibaba
  • wan22 - Apenas geração de imagem
Modelos de vídeo:
  • wan - Modelo de vídeo da Alibaba
type
string
default:"Default"
Categoria de treinamento: Style, Object, Character ou Default
trigger_word
string
Palavra personalizada para ativar este estilo nos prompts. Quando não especificada, usa o nome do estilo.
Escolha palavras-gatilho únicas que não apareçam em prompts típicos. Use underscores para gatilhos com múltiplas palavras: ukiyo_style
learning_rate
number
Controla a intensidade do treinamento. Valores mais altos treinam mais rápido, mas podem causar overfitting.Faixa recomendada: 0.0001 - 0.001
max_train_steps
integer
Máximo de iterações de treinamento. Faixa: 1-2000
batch_size
integer
Imagens processadas simultaneamente. Lotes maiores = treinamento mais rápido, mas mais memória.

Ajustando parâmetros avançados

Comece com os padrões definidos pelo campo type — eles funcionam bem para a maioria dos casos. Ajuste-os apenas se você observar problemas específicos:
Controla o quão agressivamente o modelo se adapta às suas imagens de treinamento.
ValorQuando usar
0.0001 (menor)Problemas de overfitting, estilos complexos, datasets pequenos
0.0003 (padrão)Maioria dos casos
0.0005-0.001 (maior)Treinamento mais rápido
Sinais de que você precisa ajustar:
  • As saídas parecem idênticas às imagens de treinamento → reduza a taxa
  • A influência do estilo está fraca após o treinamento → aumente a taxa levemente
Por quanto tempo o modelo treina nas suas imagens.
Tamanho do datasetPassos recomendados
5-10 imagens300-500 passos
15-30 imagens500-800 passos
50+ imagens800-1500 passos
Sinais de que você precisa ajustar:
  • Saídas muito rígidas, ignorando os prompts → reduza os passos
  • Influência do estilo fraca → aumente os passos
  • Imagens geradas ficam exatamente iguais aos dados de treinamento → reduza os passos (overfitting)
Ajuste iterativoSe sua primeira tentativa de treinamento não produzir os resultados desejados:
  1. Comece ajustando max_train_steps (correção mais comum)
  2. Depois tente learning_rate se os passos sozinhos não ajudarem

Formato da resposta

{
  "job_id": "550e8400-e29b-41d4-a716-446655440000",
  "status": "queued",
  "created_at": "2024-01-15T10:30:00Z"
}

Monitorar o progresso do treinamento

O treinamento normalmente leva de 5 a 15 minutos. Faça polling na Jobs API para verificar o status:
import requests
import time
import os
from dotenv import load_dotenv

load_dotenv()

API_BASE = "https://api.krea.ai"
API_TOKEN = os.getenv("API_TOKEN")
job_id = "your-job-id"

while True:
    response = requests.get(
        f"{API_BASE}/jobs/{job_id}",
        headers={"Authorization": f"Bearer {API_TOKEN}"}
    )
    job = response.json()
    status = job["status"]

    print(f"Status: {status}")

    if status == "completed":
        style_id = job["result"]["style_id"]
        print(f"Training complete! Style ID: {style_id}")
        break
    elif status in ["failed", "cancelled"]:
        print(f"Training {status}")
        break

    time.sleep(30)
Jobs de treinamento passam por estes estados:
  1. queued - Aguardando na fila
  2. processing - Treinamento ativo
  3. completed - Treinamento concluído com sucesso
  4. failed - Treinamento encontrou um erro
  5. cancelled - Job cancelado manualmente

Usar seu estilo treinado

Assim que o treinamento for concluído, aplique seu estilo à geração de imagens usando o parâmetro styles:
Propriedade do estilo entre o app e a APIA API e o webapp da Krea operam como identidades de usuário separadas dentro do seu workspace. Estilos são privados do usuário que os criou, portanto:
  • Estilos treinados no app não são acessíveis pela API, a menos que sejam compartilhados
  • Estilos treinados na API não são acessíveis no app, a menos que sejam compartilhados
Para compartilhar um estilo com seu workspace (funciona nos dois sentidos):
curl -X POST https://api.krea.ai/styles/YOUR_STYLE_ID/share/workspace \
  -H "Authorization: Bearer YOUR_API_TOKEN"
import requests
import time
import os
from dotenv import load_dotenv

load_dotenv()

API_BASE = "https://api.krea.ai"
API_TOKEN = os.getenv("API_TOKEN")
STYLE_ID = "w29t6pvy0"

response = requests.post(
    f"{API_BASE}/generate/image/krea/krea-2/medium",
    headers={
        "Authorization": f"Bearer {API_TOKEN}",
        "Content-Type": "application/json"
    },
    json={
        "prompt": "An abstract, colorful, surreal composition of symmetry and balance. Swirling colors, imagery of trees and coalescing patterns converge. The lantern of light and death. It is as if the world was at once dark, and yet again lit.",
        "aspect_ratio": "1:1",
        "resolution": "1K",
        "styles": [
            {
                "id": STYLE_ID,
                "strength": 0.95
            }
        ]
    }
)

job = response.json()
job_id = job["job_id"]
print(f"Generation started! Job ID: {job_id}")

# Poll for completion
while True:
    check = requests.get(
        f"{API_BASE}/jobs/{job_id}",
        headers={"Authorization": f"Bearer {API_TOKEN}"}
    )
    status_data = check.json()

    if status_data["status"] == "completed":
        image_url = status_data["result"]["urls"][0]
        print(f"Image ready: {image_url}")
        break
    elif status_data["status"] == "failed":
        print("Generation failed")
        break

    time.sleep(2)

Força do estilo

O parâmetro strength (0.0-1.0) controla o quão fortemente seu estilo é aplicado:
ForçaEfeito
0.5-0.7Influência sutil, mantém flexibilidade do prompt
0.8-0.9Aplicação forte do estilo, ponto de partida recomendado
0.95-1.0Aderência máxima ao estilo, pode reduzir responsividade ao prompt
Comece com força 0.8 e ajuste com base nos resultados. Valores menores dão mais liberdade criativa; valores maiores impõem aderência mais estrita ao estilo.

Combinando múltiplos estilos

Aplique vários estilos adicionando-os ao array styles:
"styles": [
    {"id": "style-id-1", "strength": 0.6},
    {"id": "style-id-2", "strength": 0.4}
]

Boas práticas

  • Use quantas imagens de alta qualidade você tiver para melhores resultados
  • Garanta estilo consistente em todas as imagens de treinamento
  • Inclua variedade nos assuntos mantendo a coerência de estilo
  • Evite marcas d’água, sobreposições de texto ou artefatos
  • Use imagens com pelo menos 1024x1024 de resolução
  • Comece com os parâmetros padrão usando o campo type
  • Para estilos: 500-1000 passos costumam ser suficientes
  • Learning rates menores (0.0001-0.0003) previnem overfitting
  • Aumente os passos se o estilo não estiver forte o suficiente
  • Diminua os passos se a saída estiver muito rígida
  • Use a mesma palavra-gatilho se você planeja combinar múltiplos estilos
  • As palavras-gatilho são injetadas automaticamente no prompt se você incluir o estilo
  • Evite palavras comuns que aparecem em prompts típicos
  • Use underscores para gatilhos com múltiplas palavras: my_custom_style