{"slug": "i-built-a-100-free-ai-toolbox-with-no-sign-up-here-s-how", "title": "I Built a 100% Free AI Toolbox with No Sign-Up (Here's How)", "summary": "A developer built MagicKit, a free open-source AI toolbox combining image generation, AI writing, and video creation in a single page with no sign-up, API key, or paywall required. The Node.js/Express backend uses the Pollinations free API for images and FFmpeg for video, running in roughly 60 MB of RAM on a 1.6 GB VPS. The developer worked around the image API's one-request-per-IP queue limit with a retry gate and replaced Node's https module with a curl child process to avoid dropped connections.", "body_md": "**TL;DR**: I built [MagicKit](http://47.80.8.174) — a free AI toolbox for image generation, AI writing, and video making. No sign-up, no API key, no paywall. The whole thing is [open source on GitHub](https://github.com/kaketiti/magickit).\n\nEvery AI tool these days wants you to sign up, hand over an API key, or subscribe before you can even try it. I wanted the opposite: **open the page and just create.**\n\nSo I spent a few evenings building MagicKit — three tools in one page:\n\n| Layer | Choice | Why | \n|---|---|---|\n| Backend | Node.js + Express | One file, easy to deploy | \n| Frontend | Pure HTML/CSS/JS | No build step, no framework bloat | \n| AI | Pollinations free API | No key required | \n| Video | FFmpeg | Battle-tested, runs on a tiny VPS | \n\nThe entire backend sits at around **60 MB RAM**, because my server only has 1.6 GB to work with.\n\nThe free image API only allows **one queued request per IP**. Concurrent requests instantly return `429 Queue full`. My first naive implementation fell over immediately.\n\nThe fix:\n\n``` js\nasync function generateImageWithRetry(prompt, width, height) {\n  for (let attempt = 0; attempt < 5; attempt++) {\n    await globalRateLimitGate();        // 3s minimum spacing\n    const file = await downloadWithCurl(buildUrl(prompt, width, height));\n    if (!isRateLimitError(file)) return file;\n    await sleep(3000 * (attempt + 1)); // 3s, 6s, 9s...\n  }\n  throw new Error('Image service busy, please try again');\n}\n```\n\n`socket hang up` from the HTTP client\nNode's `https` module kept dropping connections to the image endpoint under slow responses. I replaced it with a **`curl` child process**:\n\n```\ncurl -L --max-redirs 5 --max-time 120 --connect-timeout 10 -o output.jpg \"$URL\"\n```\n\nBoring, predictable, and it never hangs half-open.\n\nMy first video pipeline used `zoompan` + `xfade` filters together. On a 2-core box with 1.6 GB RAM, long runs produced truncated, unplayable MP4s.\n\nThe reliable version uses the **concat demuxer** and a single simple filter for scaling/padding:\n\n```\nffmpeg -f concat -safe 0 -i list.txt \\\n  -vf \"scale=1080:1920:force_original_aspect_ratio=decrease,\\\npad=1080:1920:(ow-iw)/2:(oh-ih)/2,format=yuv420p\" \\\n  -c:v libx264 out.mp4\n```\n\nNo fancy transitions, but the file always plays. Lesson: on constrained hardware, **finish reliably beats fancy**.\n\n1.6 GB RAM means nothing can be buffered in memory. Generated images go **straight to disk**, videos stream through FFmpeg, and the queue keeps at most one job in flight.\n\n🔗 **Live demo**: [http://47.80.8.174](http://47.80.8.174)\n\n💻 **Source**: [https://github.com/kaketiti/magickit](https://github.com/kaketiti/magickit)\n\nSelf-hosting takes about a minute:\n\n```\ngit clone https://github.com/kaketiti/magickit.git\ncd magickit\nnpm install\nnpm start\n```\n\nIt's MIT licensed — fork it, remix it, deploy your own.\n\nFeedback is genuinely welcome — what would you add first? Drop a comment or open an issue on GitHub.", "url": "https://wpnews.pro/news/i-built-a-100-free-ai-toolbox-with-no-sign-up-here-s-how", "canonical_source": "https://dev.to/magickit/i-built-a-100-free-ai-toolbox-with-no-sign-up-heres-how-1m2b", "published_at": "2026-09-21 00:02:33+00:00", "updated_at": "2026-09-21 00:22:44.819517+00:00", "lang": "en", "topics": ["ai-tools", "generative-ai", "ai-products", "developer-tools"], "entities": ["MagicKit", "Pollinations", "Node.js", "Express", "FFmpeg", "GitHub"], "alternates": {"html": "https://wpnews.pro/news/i-built-a-100-free-ai-toolbox-with-no-sign-up-here-s-how", "markdown": "https://wpnews.pro/news/i-built-a-100-free-ai-toolbox-with-no-sign-up-here-s-how.md", "text": "https://wpnews.pro/news/i-built-a-100-free-ai-toolbox-with-no-sign-up-here-s-how.txt", "jsonld": "https://wpnews.pro/news/i-built-a-100-free-ai-toolbox-with-no-sign-up-here-s-how.jsonld"}}