Game Images API

Grabbr — tutorial de uso

Host público: https://grabbr.jailbroken.tech Qué es: API que, dado un nombre de juego y un proveedor, devuelve arte de lobby oficial en WebP (tamaños configurables) y, en modo extendido, una ficha de métricas (RTP, varianza, max win, betways, fecha).

Las imágenes siempre salen de Stake (thumbnailUrl / imgix). SlotCatalog se usa solo para texto de la ficha (RTP, varianza, etc.).

Auth: ninguna. CORS: *.


1. Probar que está arriba

curl -sS https://grabbr.jailbroken.tech/health
# {"ok": true, "service": "game-images-api", "images": "stake", "stakeCdp": true, ...}

Tester en el navegador: https://grabbr.jailbroken.tech/ Docs HTML: https://grabbr.jailbroken.tech/docs/es Docs EN: https://grabbr.jailbroken.tech/docs/en OpenAPI: https://grabbr.jailbroken.tech/openapi.yaml


2. Tres imágenes (caso típico)

Azure Roulette / Pragmatic Play Live → 400×400, 400×300, 300×400 WebP.

curl -sS 'https://grabbr.jailbroken.tech/v1/images?name=azure%20roulette&provider=pragmatic%20play%20live'

Respuesta (campos clave):

{
  "game": "Roulette Azure",
  "provider": "pragmatic-play-live",
  "source": {
    "url": "https://mediumrare.imgix.net/....",
    "kind": "stake-thumbnail"
  },
  "images": [
    {
      "size": "400x400",
      "format": "webp",
      "url": "https://grabbr.jailbroken.tech/media/<key>/400x400.webp",
      "path": "/media/<key>/400x400.webp",
      "bytes": 28968
    }
  ]
}

Solo el array:

curl -sS 'https://grabbr.jailbroken.tech/v1/images?name=azure%20roulette&provider=pragmatic%20play%20live&format=array'

POST:

curl -sS -X POST https://grabbr.jailbroken.tech/v1/images \
  -H 'content-type: application/json' \
  -d '{"name":"azure roulette","provider":"Pragmatic Play Live"}'

3. Tamaños extra (mañana 900×1200)

Por request:

curl -sS 'https://grabbr.jailbroken.tech/v1/images?name=azure%20roulette&provider=pragmatic%20play%20live&sizes=400x400,400x300,300x400,900x1200'

Body JSON también acepta lista de objetos { "id", "width", "height" }.


3b. Crop opcional del original grabado

Sin crop → cover centrado (igual que siempre).

Con crop en píxeles sobre el original:

curl -sS -X POST https://grabbr.jailbroken.tech/v1/images \
  -H 'content-type: application/json' \
  -d '{
    "name":"Sweet Bonanza",
    "provider":"Pragmatic Play",
    "crop":{"x":40,"y":20,"width":280,"height":280,"unit":"px"}
  }'

O en query: crop=0.1,0.1,0.8,0.8&cropUnit=ratio.

En el tester (/): Fetch → aparece el original → arrastrá un recuadro sobre el overlay (la imagen no se arrastra como archivo) → Apply crop. Chips de tamaños de salida y de aspecto (1:1, 4:3, 16:9, …). Reset auto vuelve al cover centrado. Las URLs recortadas son /media/{key}/c-px-…/{WxH}.webp; el original sigue en /media/{key}/original.


3c. Capture (REA v2) — bundle del slot

El grab ahora incluye slot.url (página directa del juego en Stake). Capture abre esa URL en el Chrome Chile, mapea red + iframes (assets, configs, sprites, sonidos, HTML/JS) y arma el árbol original host/path/....

# 1) grab (trae slot.url)
curl -sS -X POST https://grabbr.jailbroken.tech/v1/images \
  -H 'content-type: application/json' \
  -d '{"name":"Sweet Bonanza","provider":"Pragmatic Play"}'

# 2) capture
JOB=$(curl -sS -X POST https://grabbr.jailbroken.tech/v1/capture \
  -H 'content-type: application/json' \
  -d '{"name":"Sweet Bonanza","provider":"Pragmatic Play"}')
# poll GET /v1/capture/{id}
# zip entero:
# GET /v1/capture/{id}/bundle.zip
# zip seleccionado:
# POST /v1/capture/{id}/bundle  {"paths":["cdn.host/game/asset.png"]}

En el tester: modo Capture → Capture slot → tildá archivos → Download selected, o Download entire bundle (zip con la estructura original + MANIFEST.json).

Lista default del servidor:

curl -sS https://grabbr.jailbroken.tech/v1/sizes

4. Modo extendido (ficha tipo SlotCatalog)

Mismos campos que una página tipo Blood Suckers: Provider, RTP, Variance, Max Win, Betways, Release Date. Las imágenes siguen siendo oficiales.

curl -sS 'https://grabbr.jailbroken.tech/v1/images?name=Blood%20Suckers&provider=NetEnt&mode=extended'

Solo ficha (sin imágenes):

curl -sS 'https://grabbr.jailbroken.tech/v1/info?name=Blood%20Suckers&provider=NetEnt'

info medido para Blood Suckers:

CampoValor
ProviderNetEnt
RTP98% (rtpRanges: true)
VarianceLow
Max Winx1014.00
Betways25
Release Date2013-11-10

También: type, layout, min/max bet, features, themes, rating.

extended=1 o POST "mode": "extended" hacen lo mismo. format=array no incluye info.

Si hay ficha y no hay arte oficial, HTTP 200 con images: [] e imagesError.


5. Integrar en un front

const base = 'https://grabbr.jailbroken.tech';
const q = new URLSearchParams({
  name: 'Gates of Olympus',
  provider: 'Pragmatic Play',
  mode: 'extended',
});
const r = await fetch(`${base}/v1/images?${q}`);
const data = await r.json();
for (const im of data.images) {
  const img = document.createElement('img');
  img.src = im.url;       // WebP absoluto en grabbr.jailbroken.tech
  img.width = im.width;
  img.height = im.height;
  document.body.appendChild(img);
}
console.log(data.info?.rtp, data.info?.maxWin);

Guardá im.path o im.url. No inventes la key de /media/.


6. Proveedores

curl -sS https://grabbr.jailbroken.tech/v1/providers

Ids: pragmatic-play, pragmatic-play-live, kagaming, ruby-play, evolution-gaming, booming-games, 100hp, ezugi, live-vegas, netent.

El provider del request es label o alias (pp live, NetEnt, evolution).


7. Errores

HTTPCuándo
400Falta name/provider, JSON inválido, tamaño fuera de 16–4000, proveedor desconocido (salvo modo extendido)
404No hay arte (y, en /v1/info, no hay ficha)
502Fallo al bajar el original

8. Docs completas

Este tutorial cubre el camino de producto. El markdown de API es la referencia de cada campo.