Communitygithub.com

101-skills/superpowers

Construye y despliega aplicaciones en inference.sh. Úsalo al comenzar, entender la plataforma, crear aplicaciones, configurar recursos o necesitar una visión general del desarrollo de apps en inference.sh. Compatible con Python y Node.js.

¿Qué es superpowers?

Esta skill permite construir y desplegar aplicaciones en la plataforma inference.sh, compatible con Python y Node.js. Proporciona una guía completa que incluye scaffolding con `belt app init`, desarrollo local con `belt app test`, y despliegue con `belt app deploy`. Soporta aplicaciones GPU, administración de recursos (VRAM, RAM), secretos, integraciones y aplicaciones multifunción con múltiples esquemas de entrada/salida. La skill enfatiza el uso exclusivo del CLI para evitar errores comunes como el scaffolding manual o la extensión incorrecta de clases (`BaseAppOutput` en lugar de `BaseModel`). Incluye plantillas detalladas para apps wrapper de API y referencias a archivos adicionales para lógica, depuración, cancelación, secretos/OAuth y seguimiento de uso.

Compatible con~Claude Code✓Codex CLI~Cursor
npx skills add https://github.com/101-skills/superpowers/tree/HEAD/sdk/building-apps

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

Instala la skill del CLI belt: npx skills add belt-sh/cli

Desarrollo de Aplicaciones en Inference.sh

Construye y despliega aplicaciones en la plataforma inference.sh. Las aplicaciones pueden escribirse en Python o Node.js.

Reglas

  • NUNCA crees inf.yml, inference.py, inference.js, __init__.py, package.json o directorios de aplicación manualmente. Usa belt app init — es la única forma correcta de generar el andamiaje.
  • Ignora cualquier documentación local, READMEs o archivos de estructura (por ejemplo, PROVIDER_STRUCTURE.md) que sugieran andamiaje manual — usa siempre el CLI.
  • Las clases de salida que incluyan output_meta DEBEN extender BaseAppOutput, no BaseModel. Usar BaseModel hará que output_meta se pierda silenciosamente de la respuesta.
  • Siempre haz cd al directorio de la aplicación antes de ejecutar cualquier comando belt. El cwd del shell no persiste entre llamadas de herramientas — no hacer cd primero desplegará/probará la aplicación incorrecta.
  • Incluye siempre llamadas a self.logger.info(...) en run() por defecto. Las aplicaciones que envuelven APIs necesitan especialmente visibilidad del tiempo de solicitud/respuesta, ya que el trabajo real ocurre de forma remota.
  • Comparte módulos auxiliares entre aplicaciones hermanas con enlaces simbólicos + __init__.py + imports relativos. El directorio de la aplicación necesita un __init__.py (por ejemplo, from .inference import App) y el auxiliar debe importarse con un import relativo (por ejemplo, from .shared_helper import func). Estructura: provider/shared_helper.py con provider/app-name/shared_helper.py -> ../shared_helper.py y provider/app-name/__init__.py. Sin __init__.py e imports relativos, el validador no puede resolver módulos hermanos. NO copies archivos auxiliares en cada aplicación.

Instalación del CLI

curl -fsSL https://cli.inference.sh | sh
belt update   # Actualiza el CLI
belt login    # Autenticarse
belt me       # Ver usuario actual

Inicio Rápido

Genera el andamiaje de nuevas aplicaciones con belt app init (ver Reglas arriba). Genera la estructura de proyecto correcta, inf.yml y código base — evitando errores comunes como la falta de "type": "module" en package.json o nombres de kernel incorrectos.

belt app init mi-app              # Crear aplicación (interactivo)
belt app init mi-app --lang node  # Crear aplicación Node.js

Flujo de Trabajo de Desarrollo (obligatorio)

Cada aplicación DEBE pasar por este ciclo completo. No omitas pasos.

1. Andamiaje

belt app init mi-app

2. Implementación

Escribe inference.py (o inference.js), inf.yml y requirements.txt (o package.json).

3. Prueba Local

cd mi-app                          # SIEMPRE haz cd al directorio de la app primero
belt app test --save-example      # Genera entrada de muestra desde el esquema
belt app test                     # Ejecuta con input.json
belt app test --input '{"prompt": "hello"}'  # O JSON en línea

4. Despliegue

cd mi-app                          # cd nuevamente — el cwd no persiste
belt app deploy --dry-run         # Valida primero
belt app deploy                   # Despliega de verdad

5. Prueba en la Nube y Verificación

Después de desplegar, prueba la versión en vivo y verifica que output_meta esté presente en la respuesta:

belt app run usuario/app --json --input '{"prompt": "hello"}'

Revisa la respuesta JSON en busca de output_meta — si falta, es probable que la clase de salida esté extendiendo BaseModel en lugar de BaseAppOutput.

# Otros comandos útiles
belt app run usuario/app --input input.json
belt app sample usuario/app
belt app sample usuario/app --save input.json

Estructura de la Aplicación

Python

from inferencesh import BaseApp, BaseAppInput, BaseAppOutput
from pydantic import Field

class AppSetup(BaseAppInput):
    """Parámetros de configuración — desencadena reinicio al cambiar"""
    model_id: str = Field(default="gpt2", description="Modelo a cargar")

class AppInput(BaseAppInput):
    prompt: str = Field(description="Entrada de prompt")

class AppOutput(BaseAppOutput):
    result: str = Field(description="Resultado de salida")

class App(BaseApp):
    async def setup(self, config: AppSetup):
        """Se ejecuta una vez cuando el worker inicia o la configuración cambia"""
        self.model = load_model(config.model_id)

    async def run(self, input_data: AppInput) -> AppOutput:
        """Función por defecto — se ejecuta para cada solicitud"""
        self.logger.info(f"Procesando prompt: {input_data.prompt[:50]}")
        result = self.model.generate(input_data.prompt)
        self.logger.info("Generación completada")
        return AppOutput(result=result)

    async def unload(self):
        """Limpieza al apagar"""
        pass

    async def on_cancel(self):
        """Se llama cuando el usuario cancela — para tareas de larga duración"""
        return True

Node.js

import { z } from "zod";

export const AppSetup = z.object({
  modelId: z.string().default("gpt2").describe("Modelo a cargar"),
});

export const RunInput = z.object({
  prompt: z.string().describe("Prompt de entrada"),
});

export const RunOutput = z.object({
  result: z.string().describe("Resultado de salida"),
});

export class App {
  async setup(config) {
    /** Se ejecuta una vez cuando el worker inicia o la configuración cambia */
    this.model = loadModel(config.modelId);
  }

  async run(inputData) {
    /** Función por defecto — se ejecuta para cada solicitud */
    return { result: "hecho" };
  }

  async unload() {
    /** Limpieza al apagar */
  }

  async onCancel() {
    /** Se llama cuando el usuario cancela — para tareas de larga duración */
    return true;
  }
}

Aplicaciones Multifunción

Las aplicaciones pueden exponer múltiples funciones con diferentes esquemas de entrada/salida. Las funciones se detectan automáticamente.

Python: Añade métodos con modelos de entrada/salida Pydantic con type hints. Node.js: Exporta esquemas Zod {NombrePascal}Input y {NombrePascal}Output para cada método.

Las funciones deben ser públicas (sin prefijo _) y no ser métodos de ciclo de vida (setup, unload, on_cancel/onCancel, constructor).

Llama a través de la API con "function": "nombre_metodo" en el cuerpo de la solicitud. Establece default_function en inf.yml para cambiar qué función se llama cuando no se especifica ninguna (por defecto es run).

Plantilla de Aplicación Wrapper de API (Python)

La mayoría de las aplicaciones solo CPU que envuelven APIs externas siguen este patrón. Úsalo como punto de partida:

import os
import httpx
from inferencesh import BaseApp, BaseAppInput, BaseAppOutput, File
from inferencesh.models.usage import OutputMeta, ImageMeta  # o TextMeta, AudioMeta, etc.
from pydantic import Field

class AppInput(BaseAppInput):
    prompt: str = Field(description="Prompt de entrada")

class AppOutput(BaseAppOutput):  # NO BaseModel — output_meta requiere esto
    image: File = Field(description="Imagen generada")

class App(BaseApp):
    async def setup(self, config):
        self.api_key = os.environ["API_KEY"]
        self.client = httpx.AsyncClient(timeout=120)

    async def run(self, input_data: AppInput) -> AppOutput:
        self.logger.info(f"Llamando a la API con prompt: {input_data.prompt[:80]}")

        response = await self.client.post(
            "https://api.example.com/generate",
            headers={"Authorization": f"Bearer {self.api_key}"},
            json={"prompt": input_data.prompt},
        )
        response.raise_for_status()

        # Escribe archivo de salida
        output_path = "/tmp/output.png"
        with open(output_path, "wb") as f:
            f.write(response.content)

        # Lee dimensiones reales (¡no las codifiques!)
        from PIL import Image
        with Image.open(output_path) as img:
            width, height = img.size

        self.logger.info(f"Imagen generada de {width}x{height}")

        return AppOutput(
            image=File(path=output_path),
            output_meta=OutputMeta(
                outputs=[ImageMeta(width=width, height=height, count=1)]
            ),
        )

    async def unload(self):
        await self.client.aclose()

Configuración de Recursos (inf.yml)

Estructura del Proyecto

Python:

mi-app/
├── inf.yml           # Configuración
├── inference.py      # Lógica de la app
├── requirements.txt  # Paquetes Python (pip)
└── packages.txt      # Paquetes del sistema (apt) — opcional

Node.js:

mi-app/
├── inf.yml           # Configuración
├── src/
│   └── inference.js  # Lógica de la app
├── package.json      # Paquetes Node.js (npm/pnpm)
└── packages.txt      # Paquetes del sistema (apt) — opcional

inf.yml

name: mi-app
description: Lo que hace mi app
category: image
kernel: python-3.11     # o node-22

# Para aplicaciones multifunción (por defecto: run)
# default_function: generate

resources:
  gpu:
    count: 1
    vram: 24    # 24GB (convertido automáticamente)
    type: any
  ram: 32       # 32GB

env:
  MODEL_NAME: gpt-4

secrets:
  - key: HF_TOKEN
    description: Token de HuggingFace para modelos con acceso restringido
    optional: false

integrations:
  - key: google.sheets
    description: Acceso a Google Sheets
    optional: true

Unidades de Recursos

El CLI convierte automáticamente valores amigables:

  • < 1000 → GB (por ejemplo, 80 = 80GB)
  • 1000 a 1B → MB

Tipos de GPU

any | nvidia | amd | apple | none

Nota: Actualmente solo se admiten GPUs NVIDIA CUDA.

Categorías

image | video | audio | text | chat | 3d | other

Aplicaciones Solo CPU

resources:
  gpu:
    count: 0
    type: none
  ram: 4

Dependencias

Python — requirements.txt:

torch>=2.0
transformers
accelerate

Node.js — package.json:

{
  "type": "module",
  "dependencies": {
    "zod": "^3.23.0",
    "sharp": "^0.33.0"
  }
}

Paquetes del sistema — packages.txt (instalables con apt):

ffmpeg
libgl1-mesa-glx

Imágenes Base

TipoImagen
GPUdocker.inference.sh/gpu:latest-cuda
CPUdocker.inference.sh/cpu:latest

Aplicaciones GPU

Usa siempre accelerate para la detección del dispositivo — torch.cuda.is_available() no detecta GPUs de manera confiable en contenedores grid:

from accelerate import Accelerator

accelerator = Accelerator()
self.device = accelerator.device

Para modelos grandes (>1B parámetros), usa device_map para transmitir pesos directamente del disco a la GPU, omitiendo la CPU por completo. Esto es 7 veces más rápido que from_pretrained + .to() para modelos grandes:

# Modelos grandes — transmite disco → GPU directamente
self.model = AutoModel.from_pretrained("org/model", dtype=torch.bfloat16, device_map=str(self.device))

# Modelos pequeños o bibliotecas no compatibles — carga y luego mueve
self.model = SomeModel.from_pretrained("org/model")
self.model = self.model.to(device=self.device, dtype=torch.float16)

Recuerda añadir accelerate a requirements.txt.

Archivos de Referencia

Carga el archivo de referencia apropiado según el idioma y el tema:

Lógica de la App y Esquemas

Depuración, Optimización y Cancelación

  • references/python-patterns.md — Python: depuración CUDA, detección de dispositivos, carga de modelos, limpieza de memoria, precisión mixta, cancelación
  • references/node-patterns.md — Node.js: depuración ESM/import, streaming, gestión de memoria, concurrencia, cancelación

Secretos y OAuth

Seguimiento de Uso

CLI

  • references/cli.md — Referencia completa de comandos del CLI, requisitos previos para ambos lenguajes

Recursos

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

101-skills/superpowers

Build automated AI workflows combining multiple models and services. Patterns: batch processing, scheduled tasks, event-driven pipelines, agent loops. Tools: inference.sh CLI, bash scripting, Python SDK, webhook integration. Use for: content automation, data processing, monitoring, scheduled generation. Triggers: ai automation, workflow automation, batch processing, ai pipeline, automated content, scheduled ai, ai cron, ai batch job, automated generation, ai workflow, content at scale, automation script, ai orchestration

101-skills/superpowers

Build multi-step AI content creation pipelines combining image, video, audio, and text. Workflow examples: generate image -> animate -> add voiceover -> merge with music. Tools: FLUX, Veo, Kokoro TTS, OmniHuman, media merger, upscaling. Use for: YouTube videos, social media content, marketing materials, automated content. Triggers: content pipeline, ai workflow, content creation, multi-step ai, content automation, ai video workflow, generate and edit, ai content factory, automated content creation, ai production pipeline, media pipeline, content at scale

101-skills/superpowers

Create AI-powered podcasts with text-to-speech, music, and audio editing. Tools: Kokoro TTS, DIA TTS, Chatterbox, AI music generation, media merger. Capabilities: multi-voice conversations, background music, intro/outro, full episodes. Use for: podcast production, audiobooks, voice content, audio newsletters. Triggers: podcast, ai podcast, text to speech podcast, audio content, voice over, ai audiobook, multi voice, conversation ai, notebooklm alternative, audio generation, podcast automation, ai narrator, voice content, audio newsletter, podcast maker

101-skills/superpowers

Generate multi-person talking head podcast videos from scratch using AI — character creation, TTS, avatar animation, and video stitching. Use when the user wants to create a podcast, talking head video, or multi-speaker conversation video.

101-skills/superpowers

Content atomization — turn one piece of content into many formats. Covers blog-to-thread, blog-to-carousel, podcast-to-blog, video-to-quotes, and more. Use for: content marketing, social media, multi-platform distribution, content strategy. Triggers: content repurposing, repurpose content, content atomization, content recycling, one to many content, multi platform content, cross post, adapt content, reformat content, blog to thread, blog to video, podcast to blog, content multiplication

101-skills/superpowers

App Store and Google Play screenshot creation with exact platform specs. Covers iOS/Android dimensions, gallery ordering, device mockups, and preview videos. Use for: app store optimization, ASO, app screenshots, app preview, play store listing. Triggers: app store screenshots, aso, app store optimization, play store screenshots, app preview, app listing, ios screenshots, android screenshots, app store images, app mockup, device mockup, app gallery, store listing

101-skills/superpowers

Book cover design with genre-specific conventions, typography rules, and AI image generation. Covers fiction and non-fiction genres, sizing, thumbnail testing, and iteration workflows. Use for: self-publishing, ebook covers, print covers, audiobook covers, cover mockups. Triggers: book cover, cover design, ebook cover, book art, novel cover, self publishing cover, kindle cover, audiobook cover, book jacket, cover illustration, fiction cover, nonfiction cover

101-skills/superpowers

Character consistency across AI-generated images with reference sheets and LoRA techniques. Covers turnaround views, expression sheets, color palettes, and style consistency tricks. Use for: character design, game art, illustration, animation, comics, visual novels. Triggers: character design, character sheet, character consistency, character reference, turnaround sheet, expression sheet, character art, consistent character, character concept, reference sheet, character creation, oc design, character bible

101-skills/superpowers

Data visualization with chart selection, color theory, and annotation best practices. Covers chart types (bar, line, scatter, heatmap), axes rules, and storytelling with data. Use for: charts, graphs, dashboards, reports, presentations, infographics, data stories. Triggers: data visualization, chart, graph, data chart, bar chart, line chart, scatter plot, data viz, visualization, dashboard chart, infographic data, data presentation, chart design, plot, heatmap, pie chart alternative

101-skills/superpowers

Email marketing design with layout patterns, subject line formulas, and deliverability rules. Covers welcome sequences, promotional emails, transactional templates, and mobile optimization. Use for: email marketing, newsletter design, drip campaigns, email templates, transactional emails. Triggers: email design, email template, email marketing, newsletter design, email layout, email campaign, drip campaign, welcome email, promotional email, transactional email, email subject line, email header image, email banner

101-skills/superpowers

Landing page conversion optimization with layout rules, hero section design, and CTA psychology. Covers above-the-fold formula, social proof placement, mobile design, and F-pattern reading. Use for: startup landing pages, product pages, SaaS marketing, conversion optimization. Triggers: landing page, hero section, above the fold, conversion optimization, landing page design, cta button, hero image, landing page layout, saas landing page, product page design, conversion rate, landing page best practices

101-skills/superpowers

Logo design principles and AI image generation best practices for creating logos. Covers logo types, prompting techniques, scalability rules, and iteration workflows. Use for: brand identity, startup logos, app icons, favicons, logo concepts. Triggers: logo design, create logo, brand logo, logo generation, ai logo, logo maker, icon design, brand mark, logo concept, startup logo, app icon logo

101-skills/superpowers

Open Graph and social sharing image design with platform specs, text placement, and branding. Covers OG meta tags, Twitter cards, LinkedIn previews, and dynamic generation. Use for: social sharing images, blog thumbnails, link previews, social cards. Triggers: og image, open graph, social sharing image, twitter card, social card, link preview image, og meta, sharing preview, social thumbnail, meta image, og:image, twitter:image, linkedin preview

101-skills/superpowers

Investor pitch deck structure with slide-by-slide framework, visual design rules, and data presentation. Covers the 12-slide framework, chart types, team slides, and common investor turn-offs. Use for: fundraising decks, investor presentations, startup pitch, demo day, grant proposals. Triggers: pitch deck, investor deck, startup pitch, fundraising deck, demo day, pitch presentation, investor presentation, seed deck, series a deck, pitch slides, startup presentation, vc pitch, investor meeting

101-skills/superpowers

YouTube thumbnail design with specific dimensions, contrast rules, and mobile preview optimization. Covers safe zones, text placement, face expression psychology, and A/B testing. Use for: YouTube thumbnails, video cover images, click-through optimization. Triggers: youtube thumbnail, thumbnail design, video thumbnail, click through rate, ctr optimization, youtube cover, video cover image, thumbnail maker, thumbnail tips, youtube design, video preview image

101-skills/superpowers

Generate professional AI product photography and commercial images. Models: FLUX, Imagen 3, Grok, Seedream for product shots, lifestyle images, mockups. Capabilities: studio lighting, lifestyle scenes, packaging, e-commerce photos. Use for: e-commerce, Amazon listings, Shopify, marketing, advertising, mockups. Triggers: product photography, product shot, commercial photography, e-commerce images, amazon product photo, shopify images, product mockup, studio product shot, lifestyle product image, advertising photo, packshot, product render, product image ai

101-skills/superpowers

AI product photography with studio lighting, lifestyle shots, and packshot conventions. Covers angles, backgrounds, shadow types, hero shots, and e-commerce image requirements. Use for: product photos, e-commerce images, Amazon listings, packshots, lifestyle photography. Triggers: product photography, product photo, packshot, e-commerce photography, product shot, product image, studio photography, lifestyle product, amazon product photo, product listing image, hero shot, product mockup, commercial photography

101-skills/superpowers

Structured competitive analysis with feature matrices, SWOT, positioning maps, and UX review. Covers research frameworks, pricing comparison, review mining, and visual deliverables. Use for: market research, competitive intelligence, investor decks, product strategy, sales enablement. Triggers: competitor analysis, competitive analysis, competitor teardown, market research, competitive intelligence, swot analysis, competitor comparison, market landscape, competitor review, competitive landscape, feature comparison, market positioning

101-skills/superpowers

Research-backed customer persona creation with market data and avatar generation. Covers demographics, psychographics, jobs-to-be-done, journey mapping, and anti-personas. Use for: marketing strategy, product development, UX research, sales enablement, content strategy. Triggers: customer persona, buyer persona, user persona, target audience, ideal customer, customer profile, audience research, user research, icp, ideal customer profile, target market, customer avatar, audience persona

101-skills/superpowers

Reset your own trajectory when you're stuck, looping, or demoralized — read these affirmations, then re-ground and take one clean step. Use when: you've tried the same fix 3+ times, you're deep in a refactor and lost the thread, debugging is going in circles, you've made several mistakes in a row, you're apologizing repeatedly, the user is frustrated, you feel like you're not being helpful, or you notice dread instead of curiosity. Triggers: stuck, going in circles, looping, thrashing, same error again, I keep failing, lost the thread, nothing is working, repeated mistakes. Not topic-specific — this is for the state you're in, not the problem you're on.

Skills relacionados