Language versions:
The repository already includes .github/workflows/epic-gamer.yml. Using it directly is the recommended way to run scheduled claims.
The default schedule is now once per week: Thursday 23:20 China Standard Time (UTC 15:20 in GitHub cron). That puts the run after the weekly Epic refresh, which is a better default for most users.
The workflow runs the following steps on a GitHub-hosted runner:
uv and Python 3.12.uv sync to install Python dependencies.uv run app/deploy.py inside xvfb.The workflow is triggered by GitHub schedule and workflow_dispatch. APScheduler inside the repository is disabled in this mode to avoid duplicate scheduling.
20 15 * * 4Thursday 15:20 UTC / Thursday 23:20 China Standard TimeIf you want a different time, edit the schedule section inside .github/workflows/epic-gamer.yml. The easiest way is to open that file on GitHub, click the pencil icon, update the cron line, and commit the change.
Required in all cases:
| Secret | Description |
|---|---|
EPIC_EMAIL | Epic account email, with 2FA disabled |
EPIC_PASSWORD | Epic account password, with 2FA disabled |
If you use the official Gemini API:
| Secret | Description |
|---|---|
LLM_PROVIDER | Recommended value: gemini |
GEMINI_API_KEY | Gemini API key |
GEMINI_BASE_URL | Leave empty to use the official default endpoint |
GEMINI_MODEL | Optional, defaults to gemini-2.5-pro |
If you use a Gemini-compatible relay such as AiHubMix:
| Secret | Description |
|---|---|
LLM_PROVIDER | Recommended value: gemini |
GEMINI_API_KEY | AiHubMix key |
GEMINI_BASE_URL | For example https://aihubmix.com |
GEMINI_MODEL | Optional, defaults to gemini-2.5-pro |
If you use GLM:
| Secret | Description |
|---|---|
LLM_PROVIDER | Recommended value: glm |
GLM_API_KEY | Zhipu API key |
GLM_BASE_URL | Optional, defaults to https://open.bigmodel.cn/api/paas/v4 |
GLM_MODEL | Optional, recommended: glm-4.6v |
The GLM path does not require a separate GEMINI_API_KEY. The project now bridges that lower-level compatibility requirement automatically.
The program also checks these per-task overrides first. If they are not set, they fall back automatically to GLM_MODEL or GEMINI_MODEL:
CHALLENGE_CLASSIFIER_MODELIMAGE_CLASSIFIER_MODELSPATIAL_POINT_REASONER_MODELSPATIAL_PATH_REASONER_MODELThese values can also be configured directly as GitHub Secrets. The workflow already passes them through.
To reproduce the same entrypoint locally, use the same runtime path as the workflow:
.env.example to .envuv sync --group devENABLE_APSCHEDULER=false uv run app/deploy.py.env, .venv, and app/volumes/ are already ignored by .gitignore, so local sensitive/runtime files stay out of commits.
The lower-level dependency is hcaptcha-challenger, and internally it uses google-genai-style multimodal upload plus generate_content.
This repository now includes an adapter layer:
chat/completions requests.That is why GLM here should use a vision-capable model such as glm-4.6v, not a plain text coding model.
If glm-4.6v-flash starts returning overload messages such as "the current model is too busy", switching to GLM_MODEL=glm-4.6v is usually more stable.
After forking, open the Actions page in your fork, enter Epic Awesome Gamer (Scheduled), and click Enable workflow once, or GitHub will not activate the scheduled run for that fork.
Actions page.IMPORTANT
Do not cancel the workflow just because it is still retrying after around 5 minutes. Login captcha and checkout verification can fail repeatedly, retry many times, and even hit timeouts before finally passing. Some successful runs still take 15 to 20 minutes.
If Camoufox fails to download or bootstrap on a specific runner, the workflow now continues with an installed Playwright Firefox fallback instead of failing immediately during browser setup.
To avoid running outdated code in your fork, sync regularly with the upstream repository (Ronchy2000/epic-freebies-helper), especially before retrying after an unexpected failure.
On the GitHub web UI, open your fork's default branch, click Sync fork -> Update branch, and rerun the workflow afterward. If GitHub reports a conflict, click Compare changes, follow the prompt to create and merge the pull request, and then return to Actions to run the workflow again.
Epic may rate-limit or risk-control GitHub's shared outbound IPs. In many cases, rerunning at a different time resolves it.
If the logs are still retrying captcha challenges, do not click Cancel workflow too early. A run that ends in a manual cancel like the example below does not prove the automation had already failed after only a few minutes:
The workflow now attempts to upload an extra epic-screenshots-<run_id> artifact. This artifact only appears at the bottom of the run page when the login, risk-control, or auth flow actually saved screenshots. If the logs only show messages like Timeout waiting for #email, Just a moment..., or One more step, and the Artifacts section contains a screenshot package, inspect that artifact first.
If you need to report a failed or suspicious run, keep this distinction in mind:
This is usually not a GLM, Gemini, or AiHubMix API issue. It means the Epic account was redirected after login to a page like /id/login/correction/privacy-policy.
Fix it by signing in to Epic once in a normal browser, completing the privacy-policy confirmation page manually, and then rerunning the workflow.
Check these items first:
message=该模型当前访问量过大,请您稍后再试 or HTTP 429, switch GLM_MODEL to glm-4.6v first and avoid glm-4.6v-flash.LLM_PROVIDER=glm.GLM_BASE_URL=https://open.bigmodel.cn/api/paas/v4.GLM_MODEL=glm-4.6v.Example log for a 429 rate-limit case:

Epic weekly freebies usually refresh on Thursday. For most regular users, running once after the refresh is a better default: it uses fewer GitHub Actions minutes and matches the real claim cycle more closely.
If you prefer more redundancy, you can still edit the workflow and run it multiple times per week, or keep using manual Run workflow as a fallback.