Sombra de producto
Un recorte limpio flotando sobre blanco se ve inacabado en cuanto queda junto a una fotografía con luz real: nada lo ancla a una superficie. Este endpoint estudia la forma del recorte y proyecta una sombra suave y coherente con una dirección de luz, del tipo que un fotógrafo habría captado en una mesa de luz en vez de en una foto de producto plana.
Ejecútela online
Ejecute esto en nuestros servidores con su cuenta. Las herramientas gratuitas corren en su navegador; esta cobra de su saldo del KIT según el precio de arriba.
La señal que delata a un recorte
Quitar el fondo deja algo técnicamente correcto pero visualmente falso: un objeto sin punto de contacto, sin peso, flotando en el vacío. La vista humana lee las sombras antes que casi cualquier otra cosa en una escena para juzgar profundidad y sujeción al suelo, así que una foto de producto sin sombra se percibe como falsa incluso para quien no sabría explicar por qué. Añadirla de vuelta no es un adorno decorativo, sino reparar esa pista de profundidad que falta.
Qué hace exactamente el endpoint
Envía por POST una imagen recortada a /image/shadow —idealmente con fondo transparente o ya eliminado— y la tarea analiza la silueta para construir una sombra que sigue los contornos del objeto, no un óvalo difuminado genérico debajo. El resultado regresa como una imagen con la sombra ya compuesta, lista para colocarse directamente sobre un fondo blanco, una escena de estilo de vida o una plantilla de marketplace.
Por qué las sombras en fotografía no son arbitrarias
Los fotógrafos de estudio invierten presupuesto real en mesas de luz, reflectores y difusores precisamente para lograr una sombra que se lea natural y no dura o falsa; una sombra demasiado oscura, de borde demasiado duro o apuntando en la dirección equivocada resulta tan sospechosa al ojo de un comprador como la ausencia total de sombra. Esta tarea busca ese mismo degradado suave y creíble, el que sugiere que el objeto realmente descansa sobre una superficie bajo luz real y no sobre una capa dentro de un editor.
Cómo encaja en un flujo de catálogo
La mayoría de los equipos llega a este endpoint justo después de eliminar el fondo: quitan el fondo, proyectan la sombra y luego componen sobre el fondo que necesite la ficha del producto. Como es asíncrono, un lote de pocas imágenes y un lote de diez mil SKU se envían de la misma forma: cada imagen genera un task_id y los resultados llegan por webhook conforme terminan, o se obtienen desde un enlace firmado si un script prefiere consultarlos por su cuenta.
Precio y qué pasa si algo falla
El costo es una tarifa fija pequeña por solicitud más una tarifa por imagen, publicada y predecible ya sea que termine una sola foto destacada o renueve un catálogo completo. Si una sombra no puede generarse, la tarea reintenta automáticamente hasta tres veces antes de devolver un error claro, y una solicitud que nunca se completa nunca se cobra, así que un lote grande solo cuesta lo que realmente se terminó.
Qué puede hacer con ella
Fotos de fichas en marketplaces
Un vendedor sube recortes de producto y proyecta una sombra consistente en todos para que el catálogo se vea como una sola sesión de estudio en vez de piezas sueltas de distintas fuentes.
Renovación de catálogo de comercio electrónico
Una tienda que migra a una nueva plantilla pasa sus recortes existentes por el endpoint para añadir profundidad antes de colocarlos sobre los nuevos fondos de página.
Producción de creatividades publicitarias
Un equipo de marketing de rendimiento coloca un producto con sombra sobre fondos de temporada para decenas de variantes de anuncio sin volver a fotografiar nada.
Mockups de impresión y empaques
Un equipo de diseño que arma mockups de empaque añade una sombra creíble para que el producto renderizado se apoye de forma convincente sobre la superficie del mockup.
Preguntas frecuentes
¿Cómo añado una sombra a una foto de producto con esta API?
Envía por POST una imagen recortada, idealmente con fondo transparente, a /image/shadow y la tarea devuelve la misma imagen con una sombra natural compuesta bajo el objeto.
¿La imagen de entrada necesita fondo transparente primero?
Un recorte con el fondo ya eliminado da el mejor resultado porque el endpoint trabaja a partir de la silueta del objeto; combínelo con un endpoint de eliminación de fondo si sus imágenes aún tienen fondo.
¿La sombra es genérica o se adapta al objeto?
La sombra sigue los contornos reales del objeto en lugar de colocar un óvalo difuminado genérico debajo, que es justo lo que mantiene un aspecto físicamente creíble.
¿La API de sombra es gratuita?
No hay capa gratuita: las capas gratis se abusan y ralentizan a todos. El acceso funciona con un saldo prepago de ForHosting KIT: se recarga desde $10.00 (no caduca) y cada solicitud se cobra a su precio publicado, así que una llamada sin saldo devuelve HTTP 402. Sin suscripción, sin tokens ni créditos inventados, y una tarea fallida no se cobra.
¿Cómo recibo el resultado?
La tarea devuelve un task_id de inmediato y procesa de forma asíncrona; recoge la imagen con sombra por webhook firmado, o desde un enlace firmado válido por 24 horas.
¿Puedo procesar todo un catálogo en lote?
Sí, cada imagen se envía como una solicitud propia y el endpoint es totalmente asíncrono, así que un script puede encolar miles de recortes y recoger resultados conforme cada uno termina.
¿Este endpoint ya está disponible?
Está en las últimas fases de despliegue y pronto comenzará a aceptar tareas; el endpoint y el precio de esta página son los que entrarán en operación.
¿Qué pasa si falla la generación de la sombra?
La tarea reintenta automáticamente hasta tres veces antes de devolver un error claro, y una solicitud fallida nunca se cobra.
Para desarrolladores — acceso por API
Todo lo de esta página está disponible por programación. Esta sección es para equipos que quieren integrarlo en sus sistemas; el resto puede usar la herramienta de arriba sin más.
Endpoint de API
¿Prefiere automatizarlo? Un POST autenticado crea la tarea; el resultado llega por webhook o enlace firmado. La misma capacidad también se ejecuta aquí en la web, y pronto desde nuestra app, el email y Telegram.
Llámela desde su stack
curl -X POST https://api.kit.forhosting.com/image/shadow \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"image":"https://ejemplo.com/imagen.jpg"}'const res = await fetch("https://api.kit.forhosting.com/image/shadow", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"image": "https://ejemplo.com/imagen.jpg"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/image/shadow",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"image": "https://ejemplo.com/imagen.jpg"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/image/shadow", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"image":"https://ejemplo.com/imagen.jpg"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"image":"https://ejemplo.com/imagen.jpg"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/image/shadow", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Ejemplo de solicitud
{
"image": "https://ejemplo.com/imagen.jpg"
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "image.shadow",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}La API es asíncrona: la llamada devuelve un task_id al instante y el resultado llega por webhook. El polling está limitado a 1 req/s por tarea.
Precio
Precio publicado — sin tokens ni créditos inventados. Una tarea fallida no se cobra.
Límites
max_mb | 15 |
max_megapixels | 12 |
Errores
| HTTP | Código | Significado |
|---|---|---|
401 | unauthorized | API key ausente o inválida. |
402 | insufficient_balance | El saldo no cubre el precio de la tarea. |
404 | unknown_type | El tipo de tarea no existe. |
429 | rate_limited | Demasiadas peticiones. Use el webhook en vez de sondear. |