Como criar um workflow visual de IA com Daggr + Gradio (passo a passo)

Se você já montou um pipeline com várias etapas (gerar → transformar → validar → exportar) sabe a dor: quando uma etapa quebra, você precisa rodar tudo de novo só para descobrir onde e por quê. O Daggr (da equipe do Gradio) resolve isso com uma abordagem code-first que automaticamente gera um canvas visual para inspecionar saídas intermediárias e reexecutar etapas isoladas.

✅ Fonte principal: Hugging Face Blog — Introducing Daggr: Chain apps programmatically, inspect visually

O que você vai construir

Um mini-workflow com 2 nós que chama dois Spaces públicos do Hugging Face:

  • Nó 1: gera uma imagem a partir de um prompt
  • Nó 2: remove o fundo da imagem gerada

O diferencial: você consegue ver o resultado de cada etapa, ajustar inputs e rerodar só a etapa problemática.

✅ Checklist (15 minutos)

  • Python 3.10+ instalado
  • Ambiente virtual criado (recomendado)
  • pip install daggr gradio
  • Escolher 2 endpoints de Spaces (imagem + background removal)
  • Rodar o script e abrir o canvas local

Passo a passo (com código)

Crie um arquivo app.py com o exemplo abaixo. Ele é inspirado no exemplo oficial do post do Daggr.

import random
import gradio as gr
from daggr import GradioNode, Graph

# 1) Gera uma imagem chamando um Space do HF
image_gen = GradioNode(
    "hf-applications/Z-Image-Turbo",
    api_name="/generate_image",
    inputs={
        "prompt": gr.Textbox(
            label="Prompt",
            value="Um robô barista servindo café em uma cafeteria futurista.",
            lines=3,
        ),
        "height": 1024,
        "width": 1024,
        "seed": random.random,
    },
    outputs={
        "image": gr.Image(label="Generated Image"),
    },
)

# 2) Remove o fundo com outro Space
bg_remover = GradioNode(
    "hf-applications/background-removal",
    api_name="/image",
    inputs={
        "image": image_gen.image,
    },
    outputs={
        "original_image": None,
        "final_image": gr.Image(label="Final Image"),
    },
)

graph = Graph(
    name="Gerador com Fundo Transparente",
    nodes=[image_gen, bg_remover],
)

if __name__ == "__main__":
    graph.launch()

Depois rode:

python app.py

Você verá um canvas visual com os nós conectados. O ponto forte é que você consegue inspecionar as saídas intermediárias (por exemplo, a imagem gerada antes da remoção de fundo) e reexecutar apenas um nó.

✅ 3 insights aplicáveis (para usar hoje)

  1. Debug por etapa > rerun total: quando seu pipeline fica grande (5–10 passos), a economia de tempo vem de reexecutar só o nó que falhou — especialmente em etapas caras (LLM, imagem, vídeo).
  2. Comece com Spaces públicos como “blocos de Lego”: você pode prototipar uma ideia usando APIs já prontas e só depois substituir por modelos próprios/privados. Isso reduz o tempo de validação.
  3. Padronize entradas/saídas: ao definir claramente o que cada nó recebe e entrega (texto, imagem, arquivo), fica mais fácil trocar um componente por outro (“backup nodes”) quando um modelo piora ou fica instável.

✅ Pergunta rápida

Você montaria um workflow desses para qual objetivo: conteúdo (posts/shorts), anúncios (criativos), suporte (FAQ) ou produto (micro automação)? Me diz o caso e eu sugiro uma sequência de nós.

✅ Próximo passo (prompt pronto)

Se você quer desenhar um workflow antes de codar, copie/cole este prompt em qualquer LLM:

Você é um arquiteto de automações.
Crie um workflow em etapas para o objetivo: [DESCREVA O OBJETIVO].
Regras:
- Separe em nós (Node 1, Node 2, ...).
- Para cada nó, liste: entrada, saída, validações e fallback.
- Priorize componentes reutilizáveis e permita reexecução por etapa.
- Sugira quais nós poderiam ser GradioNode (Spaces) e quais seriam FnNode (funções).
No final, entregue um pseudo-código em Python usando Daggr/Gradio.

Ver o post oficial do Daggr (com exemplos)

Transparência: este tutorial foi baseado na documentação pública do Hugging Face Blog e adaptado para um passo a passo rápido.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *