{"slug": "show-hn-ip-fal-an-ip-checker-that-reimagines-your-location-with-ai", "title": "Show HN: IP/fal – An IP checker that reimagines your location with AI", "summary": "Developer kiliczsh released IP/fal, an open-source IP checker that uses Cloudflare Workers and fal.ai to generate location- and time-aware AI images for each visitor, with a production example at ip.adsparty.com. The tool defaults to the fal-ai/flux-2/turbo model, supports edge caching in 15-minute location/time buckets, and includes per-IP rate limiting and privacy mode, requiring Node.js 20+, a Cloudflare account, and a fal.ai API key for real generation.", "body_md": "An open-source, geo-aware IP page powered by Cloudflare Workers and fal.ai. Each visitor sees the public IP used for the current connection, Cloudflare's approximate location metadata, and an AI-generated view informed by local place, season, and time.\n\nProduction example: [https://ip.adsparty.com](https://ip.adsparty.com)\n\n- Cloudflare edge geolocation with no separate geolocation database\n- Location- and time-aware fal.ai image generation\n- Responsive 16:9 desktop and 9:16 mobile images\n- Edge caching in 15-minute location/time buckets\n- Per-IP generation rate limiting and short-lived signed requests\n- Client-side visit history stored only in the visitor's browser\n- Privacy mode for screenshots\n- Credit-free local previews with five location fixtures\n\n```\n.\n├── .github/                 GitHub Actions and contribution templates\n├── docs/assets/             Documentation images\n├── fixtures/locations/      Simulated Cloudflare request profiles\n├── scripts/                 Local developer tools\n├── src/\n│   ├── assets/              Generated static assets\n│   ├── page.ts              Server-rendered HTML, CSS, and browser behavior\n│   └── worker.ts            Worker routes, security, cache, and fal.ai calls\n├── tests/                   Unit tests\n├── wrangler.jsonc           Safe default configuration for forks\n└── wrangler.production.example.jsonc\n```\n\n- Node.js 20 or newer\n- A Cloudflare account\n- A fal.ai API key for real image generation\n\n```\nnpm install\ncp .dev.vars.example .dev.vars\nnpm run preview -- istanbul\n```\n\nOpen [http://127.0.0.1:8787](http://127.0.0.1:8787). Mock preview mode never calls fal.ai and does not\nconsume credits.\n\nAvailable fixtures: `istanbul`\n\n, `tokyo`\n\n, `new-york`\n\n, `sydney`\n\n, and `reykjavik`\n\n.\n\nRun a fixture with real fal.ai generation:\n\n```\nnpm run preview -- tokyo --live\n```\n\nThis requires `FAL_KEY`\n\nin `.dev.vars`\n\n.\n\nPublic configuration lives in `wrangler.jsonc`\n\n:\n\n| Variable | Required | Purpose |\n|---|---|---|\n`FAL_MODEL_ID` |\nNo | fal.ai model; defaults to `fal-ai/flux-2/turbo` |\n`APP_HOST` |\nProduction | Restricts generation to the configured hostname |\n`WEB_ANALYTICS_TOKEN` |\nNo | Enables Cloudflare Web Analytics |\n\nSecrets must never be committed:\n\n| Secret | Purpose |\n|---|---|\n`FAL_KEY` |\nServer-side fal.ai credentials |\n`GENERATION_SIGNING_KEY` |\nSigns short-lived, IP-bound generation tokens |\n\n```\nnpm run typecheck\nnpm test\nnpm run check\n```\n\n`npm run check`\n\nruns TypeScript, unit tests, and a Wrangler dry run. The same\ncommand runs in GitHub Actions for pushes and pull requests.\n\nThe default configuration deploys to a personal `workers.dev`\n\nhostname:\n\n```\nnpx wrangler secret put FAL_KEY\nnpx wrangler secret put GENERATION_SIGNING_KEY\nnpm run deploy\n```\n\nFor a custom domain, create an ignored maintainer configuration:\n\n```\ncp wrangler.production.example.jsonc wrangler.production.jsonc\n```\n\nUpdate its account ID, Worker name, custom domain, `APP_HOST`\n\n, and rate-limit\nnamespace, then add secrets and deploy:\n\n```\nnpx wrangler secret put FAL_KEY --config wrangler.production.jsonc\nnpx wrangler secret put GENERATION_SIGNING_KEY --config wrangler.production.jsonc\nnpm run deploy:production\n```\n\n`GET /geo-image-data`\n\naccepts only requests carrying a short-lived HMAC token\nissued by the page and bound to the connecting IP. Same-origin checks, hostname\nrestriction, edge caching, and a Cloudflare rate-limit binding reduce blind\nhotlinking and unexpected fal.ai spend. This is cost control, not authentication.\n\nVisit history stays in `localStorage`\n\n; IP addresses are deliberately excluded.\nCloudflare provides only the IP family used for the current HTTP connection, so\nthe other family may display as not detected.\n\nSee [SECURITY.md](/kiliczsh/ip-fal/blob/main/SECURITY.md) for responsible disclosure.\n\nContributions are welcome. Read [CONTRIBUTING.md](/kiliczsh/ip-fal/blob/main/CONTRIBUTING.md) before opening\na pull request.", "url": "https://wpnews.pro/news/show-hn-ip-fal-an-ip-checker-that-reimagines-your-location-with-ai", "canonical_source": "https://github.com/kiliczsh/ip-fal", "published_at": "2026-09-02 07:49:25+00:00", "updated_at": "2026-09-02 08:22:48.491479+00:00", "lang": "en", "topics": ["ai-products", "generative-ai", "developer-tools"], "entities": ["kiliczsh", "IP/fal", "Cloudflare", "fal.ai", "ip.adsparty.com", "fal-ai/flux-2/turbo"], "alternates": {"html": "https://wpnews.pro/news/show-hn-ip-fal-an-ip-checker-that-reimagines-your-location-with-ai", "markdown": "https://wpnews.pro/news/show-hn-ip-fal-an-ip-checker-that-reimagines-your-location-with-ai.md", "text": "https://wpnews.pro/news/show-hn-ip-fal-an-ip-checker-that-reimagines-your-location-with-ai.txt", "jsonld": "https://wpnews.pro/news/show-hn-ip-fal-an-ip-checker-that-reimagines-your-location-with-ai.jsonld"}}