KakaMeme Submission Guide
How static stickers, dynamic GIFs, submission assets, and downloads work.
Flow
- Upload a photo or write a sticker set idea.
- A new character pauses for approval. You can describe changes and generate another version; a failed revision keeps the previous one.
- After approval, the system generates a static 3x4 sheet and crops 12 240x240 PNG stickers.
- Continue from the same project page to generate dynamic GIFs or WeChat submission assets.
- Download individual assets, the manifest, or a ZIP package.
Credits
- Generate or revise one character: 2 credits.
- Static sticker set (12 stickers): 18 credits.
- Adding dynamic GIFs to a finished set: 40 credits.
- Dynamic GIFs ordered together with the static set (bundle): 40 credits.
- WeChat submission package: 10 credits, or 8 credits when bundled with a static order.
- Signing up grants 22 credits, and each daily login grants 1 more.
- Jobs are rejected before creation when the balance is insufficient.
- Static credits are not reserved while a character waits for approval; the balance is checked again on confirmation.
- Provider or worker failures release the failed stage's reservation; completed stages settle normally.
Dynamic GIFs
Dynamic GIFs use Grok video generation and an external worker:
- Model:
grok-imagine-video-1-5-preview - Parameters:
duration=3,aspect_ratio=3:4,resolution=720p - Outputs: 12 sticker GIFs, sheet GIF, preview MP4, and manifest
The browser API only creates and queries jobs. Vercel route handlers do not run ffmpeg.
Submission Assets
Submission assets belong to the same sticker set project:
- Title and description.
- Copyright copy.
- Banner, cover, icon.
- Reward guide and reward thanks images.
The commercial app now has the job, status, asset, download manifest, and ZIP export structure. Live mode uses sharp to compose WeChat-sized PNG assets from the static stickers; KIE-generated submission art can be added later for stronger visual polish.
Public Gallery
Sticker sets are private by default. When a user submits a set to Gallery, it enters the review queue. Admins approve, reject, archive, feature, and sort submissions through /api/admin/kakameme/gallery. Only approved public works appear in discovery listings, categories, recommendations, and promotion; unauthorized source images are not exposed.
When the owner removes an approved work from Gallery, it becomes unlisted. That removes it from KakaMeme discovery, but does not make it private: the stable detail page, public assets, search-engine results, and links already held by other people may remain accessible. Project deletion or an administrative or legal takedown is a separate action, and downloaded or cached copies cannot be recalled. The detail lookup and detail sitemap include approved public or unlisted works.
A moderator rejection or archive always overrides owner visibility. A pending cancellation returns the submission to private state; pending cancellation is not an indexable unlisted page.
API Access
Users can create API keys from /settings/apikeys. New characters created in a signed-in browser session pause for approval. API-key requests auto-confirm for compatibility and continue to static generation. API keys use Authorization: Bearer <key> or x-api-key.
Create a static sticker job:
curl -X POST "$NEXT_PUBLIC_BASE_URL/api/generation-jobs" \
-H "Authorization: Bearer $KAKAMEME_API_KEY" \
-H "Content-Type: application/json" \
-d '{"userIdea":"a cheerful corgi developer","visibility":"private"}'You can also generate from a photo (sourceImageUrl must be a publicly
reachable image URL), and request animated GIFs plus submission assets in the
same job via requestedOutputs (queued automatically after the static set
completes, billed at bundle pricing):
curl -X POST "$NEXT_PUBLIC_BASE_URL/api/generation-jobs" \
-H "Authorization: Bearer $KAKAMEME_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"sourceImageUrl": "https://example.com/photo.jpeg",
"userIdea": "adorably clumsy theme",
"visibility": "private",
"requestedOutputs": ["static", "dynamic", "submission"]
}'Query job status and generated assets:
curl "$NEXT_PUBLIC_BASE_URL/api/generation-jobs/job_123" \
-H "Authorization: Bearer $KAKAMEME_API_KEY"Notes:
- Each API key is rate limited to 6 requests per minute by default. Requests over the limit return 429; retry after the window resets.
- Animated GIFs can only be requested at job creation via
requestedOutputs. Generating or regenerating GIFs for an existing project is currently web-only, from the result page.
Signed-in users can also query a project asset list through
GET /api/sticker-sets/[id]/assets.
Character And Protection
From the result workspace, users can save the current character into saved_characters for later reuse. They can also enable copy protection for a sticker set. Copy protection does not make a legal guarantee; it marks the project as protected and keeps public Gallery pages from exposing source images or full prompts.
Issue Reports
The result workspace includes a report-problem action. Reports are stored in issue_reports with category, status, message, sticker set id, optional job id, and lightweight context metadata. Content dissatisfaction is routed to review through this table instead of automatic refunds.
FAQ
Why did my job fail?
The result page shows the failure summary. The backend records failed step, provider, model, provider task id, and error details.
Are credits charged when a job fails?
No. Successful jobs confirm the deduction; failed jobs automatically release the reserved credits.
Which download formats are available?
The default download API returns stable filenames and URLs. The result page ZIP action calls /api/sticker-sets/[id]/download?format=zip and packages current static, dynamic, and submission assets.

