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"}'
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:
| Campo | Valor |
|---|
| Provider | NetEnt |
| RTP | 98% (rtpRanges: true) |
| Variance | Low |
| Max Win | x1014.00 |
| Betways | 25 |
| Release Date | 2013-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
| HTTP | Cuándo |
|---|
| 400 | Falta name/provider, JSON inválido, tamaño fuera de 16–4000, proveedor desconocido (salvo modo extendido) |
| 404 | No hay arte (y, en /v1/info, no hay ficha) |
| 502 | Fallo al bajar el original |
8. Docs completas
- Español: https://grabbr.jailbroken.tech/docs/es
- English: https://grabbr.jailbroken.tech/docs/en
- Markdown:
/docs/API.es.md /docs/API.en.md - OpenAPI 3.1:
/openapi.yaml /openapi.json
Este tutorial cubre el camino de producto. El markdown de API es la referencia de cada campo.