codex-lb 0.3.0__tar.gz → 0.3.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (151) hide show
  1. codex_lb-0.3.1/.all-contributorsrc +52 -0
  2. codex_lb-0.3.1/.github/release-please-manifest.json +3 -0
  3. {codex_lb-0.3.0 → codex_lb-0.3.1}/CHANGELOG.md +9 -0
  4. {codex_lb-0.3.0 → codex_lb-0.3.1}/PKG-INFO +32 -6
  5. codex_lb-0.3.1/README.md +81 -0
  6. codex_lb-0.3.1/app/static/index.css +1248 -0
  7. codex_lb-0.3.1/app/static/index.html +541 -0
  8. {codex_lb-0.3.0 → codex_lb-0.3.1}/app/static/index.js +101 -29
  9. codex_lb-0.3.1/docs/screenshots/accounts.jpg +0 -0
  10. codex_lb-0.3.1/docs/screenshots/dashboard.jpg +0 -0
  11. {codex_lb-0.3.0 → codex_lb-0.3.1}/pyproject.toml +1 -1
  12. codex_lb-0.3.0/.github/release-please-manifest.json +0 -3
  13. codex_lb-0.3.0/README.md +0 -55
  14. codex_lb-0.3.0/app/static/7.css +0 -1409
  15. codex_lb-0.3.0/app/static/index.css +0 -572
  16. codex_lb-0.3.0/app/static/index.html +0 -504
  17. codex_lb-0.3.0/docs/screenshots/accounts.jpeg +0 -0
  18. codex_lb-0.3.0/docs/screenshots/dashboard.jpeg +0 -0
  19. {codex_lb-0.3.0 → codex_lb-0.3.1}/.dockerignore +0 -0
  20. {codex_lb-0.3.0 → codex_lb-0.3.1}/.env.example +0 -0
  21. {codex_lb-0.3.0 → codex_lb-0.3.1}/.github/release-please-config.json +0 -0
  22. {codex_lb-0.3.0 → codex_lb-0.3.1}/.github/workflows/ci.yml +0 -0
  23. {codex_lb-0.3.0 → codex_lb-0.3.1}/.github/workflows/release-please.yml +0 -0
  24. {codex_lb-0.3.0 → codex_lb-0.3.1}/.github/workflows/release.yml +0 -0
  25. {codex_lb-0.3.0 → codex_lb-0.3.1}/.gitignore +0 -0
  26. {codex_lb-0.3.0 → codex_lb-0.3.1}/.pre-commit-config.yaml +0 -0
  27. {codex_lb-0.3.0 → codex_lb-0.3.1}/AGENTS.md +0 -0
  28. {codex_lb-0.3.0 → codex_lb-0.3.1}/Dockerfile +0 -0
  29. {codex_lb-0.3.0 → codex_lb-0.3.1}/LICENSE +0 -0
  30. {codex_lb-0.3.0 → codex_lb-0.3.1}/app/__init__.py +0 -0
  31. {codex_lb-0.3.0 → codex_lb-0.3.1}/app/cli.py +0 -0
  32. {codex_lb-0.3.0 → codex_lb-0.3.1}/app/core/__init__.py +0 -0
  33. {codex_lb-0.3.0 → codex_lb-0.3.1}/app/core/auth/__init__.py +0 -0
  34. {codex_lb-0.3.0 → codex_lb-0.3.1}/app/core/auth/models.py +0 -0
  35. {codex_lb-0.3.0 → codex_lb-0.3.1}/app/core/auth/refresh.py +0 -0
  36. {codex_lb-0.3.0 → codex_lb-0.3.1}/app/core/balancer/__init__.py +0 -0
  37. {codex_lb-0.3.0 → codex_lb-0.3.1}/app/core/balancer/logic.py +0 -0
  38. {codex_lb-0.3.0 → codex_lb-0.3.1}/app/core/balancer/types.py +0 -0
  39. {codex_lb-0.3.0 → codex_lb-0.3.1}/app/core/clients/__init__.py +0 -0
  40. {codex_lb-0.3.0 → codex_lb-0.3.1}/app/core/clients/http.py +0 -0
  41. {codex_lb-0.3.0 → codex_lb-0.3.1}/app/core/clients/oauth.py +0 -0
  42. {codex_lb-0.3.0 → codex_lb-0.3.1}/app/core/clients/proxy.py +0 -0
  43. {codex_lb-0.3.0 → codex_lb-0.3.1}/app/core/clients/usage.py +0 -0
  44. {codex_lb-0.3.0 → codex_lb-0.3.1}/app/core/config/__init__.py +0 -0
  45. {codex_lb-0.3.0 → codex_lb-0.3.1}/app/core/config/settings.py +0 -0
  46. {codex_lb-0.3.0 → codex_lb-0.3.1}/app/core/crypto.py +0 -0
  47. {codex_lb-0.3.0 → codex_lb-0.3.1}/app/core/errors.py +0 -0
  48. {codex_lb-0.3.0 → codex_lb-0.3.1}/app/core/openai/__init__.py +0 -0
  49. {codex_lb-0.3.0 → codex_lb-0.3.1}/app/core/openai/models.py +0 -0
  50. {codex_lb-0.3.0 → codex_lb-0.3.1}/app/core/openai/parsing.py +0 -0
  51. {codex_lb-0.3.0 → codex_lb-0.3.1}/app/core/openai/requests.py +0 -0
  52. {codex_lb-0.3.0 → codex_lb-0.3.1}/app/core/plan_types.py +0 -0
  53. {codex_lb-0.3.0 → codex_lb-0.3.1}/app/core/types.py +0 -0
  54. {codex_lb-0.3.0 → codex_lb-0.3.1}/app/core/usage/__init__.py +0 -0
  55. {codex_lb-0.3.0 → codex_lb-0.3.1}/app/core/usage/logs.py +0 -0
  56. {codex_lb-0.3.0 → codex_lb-0.3.1}/app/core/usage/models.py +0 -0
  57. {codex_lb-0.3.0 → codex_lb-0.3.1}/app/core/usage/pricing.py +0 -0
  58. {codex_lb-0.3.0 → codex_lb-0.3.1}/app/core/usage/quota.py +0 -0
  59. {codex_lb-0.3.0 → codex_lb-0.3.1}/app/core/usage/types.py +0 -0
  60. {codex_lb-0.3.0 → codex_lb-0.3.1}/app/core/utils/__init__.py +0 -0
  61. {codex_lb-0.3.0 → codex_lb-0.3.1}/app/core/utils/request_id.py +0 -0
  62. {codex_lb-0.3.0 → codex_lb-0.3.1}/app/core/utils/retry.py +0 -0
  63. {codex_lb-0.3.0 → codex_lb-0.3.1}/app/core/utils/sse.py +0 -0
  64. {codex_lb-0.3.0 → codex_lb-0.3.1}/app/core/utils/time.py +0 -0
  65. {codex_lb-0.3.0 → codex_lb-0.3.1}/app/db/__init__.py +0 -0
  66. {codex_lb-0.3.0 → codex_lb-0.3.1}/app/db/migrations/__init__.py +0 -0
  67. {codex_lb-0.3.0 → codex_lb-0.3.1}/app/db/migrations/versions/__init__.py +0 -0
  68. {codex_lb-0.3.0 → codex_lb-0.3.1}/app/db/migrations/versions/add_accounts_chatgpt_account_id.py +0 -0
  69. {codex_lb-0.3.0 → codex_lb-0.3.1}/app/db/migrations/versions/add_accounts_reset_at.py +0 -0
  70. {codex_lb-0.3.0 → codex_lb-0.3.1}/app/db/migrations/versions/add_dashboard_settings.py +0 -0
  71. {codex_lb-0.3.0 → codex_lb-0.3.1}/app/db/migrations/versions/add_request_logs_reasoning_effort.py +0 -0
  72. {codex_lb-0.3.0 → codex_lb-0.3.1}/app/db/migrations/versions/normalize_account_plan_types.py +0 -0
  73. {codex_lb-0.3.0 → codex_lb-0.3.1}/app/db/models.py +0 -0
  74. {codex_lb-0.3.0 → codex_lb-0.3.1}/app/db/session.py +0 -0
  75. {codex_lb-0.3.0 → codex_lb-0.3.1}/app/dependencies.py +0 -0
  76. {codex_lb-0.3.0 → codex_lb-0.3.1}/app/main.py +0 -0
  77. {codex_lb-0.3.0 → codex_lb-0.3.1}/app/modules/__init__.py +0 -0
  78. {codex_lb-0.3.0 → codex_lb-0.3.1}/app/modules/accounts/__init__.py +0 -0
  79. {codex_lb-0.3.0 → codex_lb-0.3.1}/app/modules/accounts/api.py +0 -0
  80. {codex_lb-0.3.0 → codex_lb-0.3.1}/app/modules/accounts/auth_manager.py +0 -0
  81. {codex_lb-0.3.0 → codex_lb-0.3.1}/app/modules/accounts/repository.py +0 -0
  82. {codex_lb-0.3.0 → codex_lb-0.3.1}/app/modules/accounts/schemas.py +0 -0
  83. {codex_lb-0.3.0 → codex_lb-0.3.1}/app/modules/accounts/service.py +0 -0
  84. {codex_lb-0.3.0 → codex_lb-0.3.1}/app/modules/health/__init__.py +0 -0
  85. {codex_lb-0.3.0 → codex_lb-0.3.1}/app/modules/health/api.py +0 -0
  86. {codex_lb-0.3.0 → codex_lb-0.3.1}/app/modules/health/schemas.py +0 -0
  87. {codex_lb-0.3.0 → codex_lb-0.3.1}/app/modules/oauth/__init__.py +0 -0
  88. {codex_lb-0.3.0 → codex_lb-0.3.1}/app/modules/oauth/api.py +0 -0
  89. {codex_lb-0.3.0 → codex_lb-0.3.1}/app/modules/oauth/schemas.py +0 -0
  90. {codex_lb-0.3.0 → codex_lb-0.3.1}/app/modules/oauth/service.py +0 -0
  91. {codex_lb-0.3.0 → codex_lb-0.3.1}/app/modules/oauth/templates/oauth_success.html +0 -0
  92. {codex_lb-0.3.0 → codex_lb-0.3.1}/app/modules/proxy/__init__.py +0 -0
  93. {codex_lb-0.3.0 → codex_lb-0.3.1}/app/modules/proxy/api.py +0 -0
  94. {codex_lb-0.3.0 → codex_lb-0.3.1}/app/modules/proxy/helpers.py +0 -0
  95. {codex_lb-0.3.0 → codex_lb-0.3.1}/app/modules/proxy/load_balancer.py +0 -0
  96. {codex_lb-0.3.0 → codex_lb-0.3.1}/app/modules/proxy/schemas.py +0 -0
  97. {codex_lb-0.3.0 → codex_lb-0.3.1}/app/modules/proxy/service.py +0 -0
  98. {codex_lb-0.3.0 → codex_lb-0.3.1}/app/modules/proxy/sticky_repository.py +0 -0
  99. {codex_lb-0.3.0 → codex_lb-0.3.1}/app/modules/proxy/types.py +0 -0
  100. {codex_lb-0.3.0 → codex_lb-0.3.1}/app/modules/request_logs/__init__.py +0 -0
  101. {codex_lb-0.3.0 → codex_lb-0.3.1}/app/modules/request_logs/api.py +0 -0
  102. {codex_lb-0.3.0 → codex_lb-0.3.1}/app/modules/request_logs/repository.py +0 -0
  103. {codex_lb-0.3.0 → codex_lb-0.3.1}/app/modules/request_logs/schemas.py +0 -0
  104. {codex_lb-0.3.0 → codex_lb-0.3.1}/app/modules/request_logs/service.py +0 -0
  105. {codex_lb-0.3.0 → codex_lb-0.3.1}/app/modules/settings/__init__.py +0 -0
  106. {codex_lb-0.3.0 → codex_lb-0.3.1}/app/modules/settings/api.py +0 -0
  107. {codex_lb-0.3.0 → codex_lb-0.3.1}/app/modules/settings/repository.py +0 -0
  108. {codex_lb-0.3.0 → codex_lb-0.3.1}/app/modules/settings/schemas.py +0 -0
  109. {codex_lb-0.3.0 → codex_lb-0.3.1}/app/modules/settings/service.py +0 -0
  110. {codex_lb-0.3.0 → codex_lb-0.3.1}/app/modules/shared/__init__.py +0 -0
  111. {codex_lb-0.3.0 → codex_lb-0.3.1}/app/modules/shared/schemas.py +0 -0
  112. {codex_lb-0.3.0 → codex_lb-0.3.1}/app/modules/usage/__init__.py +0 -0
  113. {codex_lb-0.3.0 → codex_lb-0.3.1}/app/modules/usage/api.py +0 -0
  114. {codex_lb-0.3.0 → codex_lb-0.3.1}/app/modules/usage/repository.py +0 -0
  115. {codex_lb-0.3.0 → codex_lb-0.3.1}/app/modules/usage/schemas.py +0 -0
  116. {codex_lb-0.3.0 → codex_lb-0.3.1}/app/modules/usage/service.py +0 -0
  117. {codex_lb-0.3.0 → codex_lb-0.3.1}/app/modules/usage/updater.py +0 -0
  118. {codex_lb-0.3.0 → codex_lb-0.3.1}/docker-compose.yml +0 -0
  119. {codex_lb-0.3.0 → codex_lb-0.3.1}/tests/__init__.py +0 -0
  120. {codex_lb-0.3.0 → codex_lb-0.3.1}/tests/conftest.py +0 -0
  121. {codex_lb-0.3.0 → codex_lb-0.3.1}/tests/integration/test_accounts_api.py +0 -0
  122. {codex_lb-0.3.0 → codex_lb-0.3.1}/tests/integration/test_accounts_api_extended.py +0 -0
  123. {codex_lb-0.3.0 → codex_lb-0.3.1}/tests/integration/test_codex_usage_api.py +0 -0
  124. {codex_lb-0.3.0 → codex_lb-0.3.1}/tests/integration/test_db_models.py +0 -0
  125. {codex_lb-0.3.0 → codex_lb-0.3.1}/tests/integration/test_health_and_errors.py +0 -0
  126. {codex_lb-0.3.0 → codex_lb-0.3.1}/tests/integration/test_load_balancer_integration.py +0 -0
  127. {codex_lb-0.3.0 → codex_lb-0.3.1}/tests/integration/test_migrations.py +0 -0
  128. {codex_lb-0.3.0 → codex_lb-0.3.1}/tests/integration/test_oauth_flow.py +0 -0
  129. {codex_lb-0.3.0 → codex_lb-0.3.1}/tests/integration/test_proxy_api_extended.py +0 -0
  130. {codex_lb-0.3.0 → codex_lb-0.3.1}/tests/integration/test_proxy_compact.py +0 -0
  131. {codex_lb-0.3.0 → codex_lb-0.3.1}/tests/integration/test_proxy_responses.py +0 -0
  132. {codex_lb-0.3.0 → codex_lb-0.3.1}/tests/integration/test_proxy_sticky_sessions.py +0 -0
  133. {codex_lb-0.3.0 → codex_lb-0.3.1}/tests/integration/test_repositories.py +0 -0
  134. {codex_lb-0.3.0 → codex_lb-0.3.1}/tests/integration/test_request_logs_api.py +0 -0
  135. {codex_lb-0.3.0 → codex_lb-0.3.1}/tests/integration/test_request_logs_filters.py +0 -0
  136. {codex_lb-0.3.0 → codex_lb-0.3.1}/tests/integration/test_settings_api.py +0 -0
  137. {codex_lb-0.3.0 → codex_lb-0.3.1}/tests/integration/test_usage_api.py +0 -0
  138. {codex_lb-0.3.0 → codex_lb-0.3.1}/tests/integration/test_usage_summary.py +0 -0
  139. {codex_lb-0.3.0 → codex_lb-0.3.1}/tests/unit/test_auth.py +0 -0
  140. {codex_lb-0.3.0 → codex_lb-0.3.1}/tests/unit/test_auth_manager.py +0 -0
  141. {codex_lb-0.3.0 → codex_lb-0.3.1}/tests/unit/test_auth_refresh.py +0 -0
  142. {codex_lb-0.3.0 → codex_lb-0.3.1}/tests/unit/test_load_balancer.py +0 -0
  143. {codex_lb-0.3.0 → codex_lb-0.3.1}/tests/unit/test_oauth_client.py +0 -0
  144. {codex_lb-0.3.0 → codex_lb-0.3.1}/tests/unit/test_pricing.py +0 -0
  145. {codex_lb-0.3.0 → codex_lb-0.3.1}/tests/unit/test_proxy_utils.py +0 -0
  146. {codex_lb-0.3.0 → codex_lb-0.3.1}/tests/unit/test_retry.py +0 -0
  147. {codex_lb-0.3.0 → codex_lb-0.3.1}/tests/unit/test_sse.py +0 -0
  148. {codex_lb-0.3.0 → codex_lb-0.3.1}/tests/unit/test_usage.py +0 -0
  149. {codex_lb-0.3.0 → codex_lb-0.3.1}/tests/unit/test_usage_client.py +0 -0
  150. {codex_lb-0.3.0 → codex_lb-0.3.1}/tests/unit/test_usage_updater.py +0 -0
  151. {codex_lb-0.3.0 → codex_lb-0.3.1}/uv.lock +0 -0
@@ -0,0 +1,52 @@
1
+ {
2
+ "projectName": "codex-lb",
3
+ "projectOwner": "Soju06",
4
+ "repoType": "github",
5
+ "repoHost": "https://github.com",
6
+ "files": [
7
+ "README.md"
8
+ ],
9
+ "imageSize": 100,
10
+ "commit": true,
11
+ "commitConvention": "angular",
12
+ "contributors": [
13
+ {
14
+ "login": "Soju06",
15
+ "name": "Soju06",
16
+ "avatar_url": "https://avatars.githubusercontent.com/u/34199905?v=4",
17
+ "profile": "https://github.com/Soju06",
18
+ "contributions": [
19
+ "code",
20
+ "test",
21
+ "maintenance",
22
+ "infra"
23
+ ]
24
+ },
25
+ {
26
+ "login": "JKamsker",
27
+ "name": "Jonas Kamsker",
28
+ "avatar_url": "https://avatars.githubusercontent.com/u/11245306?v=4",
29
+ "profile": "http://jonas.kamsker.at/",
30
+ "contributions": [
31
+ "code",
32
+ "bug",
33
+ "maintenance"
34
+ ]
35
+ },
36
+ {
37
+ "login": "Quack6765",
38
+ "name": "Quack",
39
+ "avatar_url": "https://avatars.githubusercontent.com/u/5446230?v=4",
40
+ "profile": "https://github.com/Quack6765",
41
+ "contributions": [
42
+ "code",
43
+ "bug",
44
+ "maintenance",
45
+ "design"
46
+ ]
47
+ }
48
+ ],
49
+ "contributorsPerLine": 7,
50
+ "linkToUsage": false,
51
+ "commitType": "docs"
52
+ }
@@ -0,0 +1,3 @@
1
+ {
2
+ ".": "0.3.1"
3
+ }
@@ -1,5 +1,14 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.3.1](https://github.com/Soju06/codex-lb/compare/v0.3.0...v0.3.1) (2026-01-22)
4
+
5
+
6
+ ### Documentation
7
+
8
+ * add Quack6765 as a contributor for design ([7a5ec08](https://github.com/Soju06/codex-lb/commit/7a5ec084b9a8d32c844127739f826a5f83bf1440))
9
+ * update .all-contributorsrc ([14ea9da](https://github.com/Soju06/codex-lb/commit/14ea9da361a978a56c4d1f7facefe789193c7b91))
10
+ * update README.md ([f283d60](https://github.com/Soju06/codex-lb/commit/f283d60ae359585cd128a965ca6fba2a14249a11))
11
+
3
12
  ## [0.3.0](https://github.com/Soju06/codex-lb/compare/v0.2.0...v0.3.0) (2026-01-21)
4
13
 
5
14
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: codex-lb
3
- Version: 0.3.0
3
+ Version: 0.3.1
4
4
  Summary: Codex load balancer and proxy for ChatGPT accounts with usage dashboard
5
5
  Author-email: Soju06 <qlskssk@gmail.com>
6
6
  Maintainer-email: Soju06 <qlskssk@gmail.com>
@@ -55,9 +55,13 @@ Description-Content-Type: text/markdown
55
55
 
56
56
  Load balancer for ChatGPT accounts. Pool multiple accounts, track usage, view everything in a dashboard.
57
57
 
58
- <p align="center">
59
- <img src="https://raw.githubusercontent.com/Soju06/codex-lb/main/docs/screenshots/dashboard.jpeg" alt="Codex Load Balancer dashboard" width="100%">
60
- </p>
58
+ ### Main Dashboard View
59
+
60
+ ![main dashboard view](docs/screenshots/dashboard.jpg)
61
+
62
+ ### Accounts View
63
+
64
+ ![Accounts list and details](docs/screenshots/accounts.jpg)
61
65
 
62
66
  ## Quick Start
63
67
 
@@ -78,9 +82,7 @@ uvx codex-lb
78
82
 
79
83
  Open [localhost:2455](http://localhost:2455) → Add account → Done.
80
84
 
81
- ## Accounts view
82
85
 
83
- ![Accounts list and details](https://raw.githubusercontent.com/Soju06/codex-lb/main/docs/screenshots/accounts.jpeg)
84
86
 
85
87
  ## Codex CLI & Extension Setup
86
88
 
@@ -102,7 +104,31 @@ requires_openai_auth = true # Required: enables model selection in Codex IDE ex
102
104
  ## Data
103
105
 
104
106
  All data stored in `~/.codex-lb/`:
107
+
105
108
  - `store.db` – accounts, usage logs
106
109
  - `encryption.key` – encrypts tokens (auto-generated)
107
110
 
108
111
  Backup this directory to preserve your accounts.
112
+
113
+ ## Contributors ✨
114
+
115
+ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):
116
+ <!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
117
+ <!-- prettier-ignore-start -->
118
+ <!-- markdownlint-disable -->
119
+ <table>
120
+ <tbody>
121
+ <tr>
122
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/Soju06"><img src="https://avatars.githubusercontent.com/u/34199905?v=4?s=100" width="100px;" alt="Soju06"/><br /><sub><b>Soju06</b></sub></a><br /><a href="https://github.com/Soju06/codex-lb/commits?author=Soju06" title="Code">💻</a> <a href="https://github.com/Soju06/codex-lb/commits?author=Soju06" title="Tests">⚠️</a> <a href="#maintenance-Soju06" title="Maintenance">🚧</a> <a href="#infra-Soju06" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a></td>
123
+ <td align="center" valign="top" width="14.28%"><a href="http://jonas.kamsker.at/"><img src="https://avatars.githubusercontent.com/u/11245306?v=4?s=100" width="100px;" alt="Jonas Kamsker"/><br /><sub><b>Jonas Kamsker</b></sub></a><br /><a href="https://github.com/Soju06/codex-lb/commits?author=JKamsker" title="Code">💻</a> <a href="https://github.com/Soju06/codex-lb/issues?q=author%3AJKamsker" title="Bug reports">🐛</a> <a href="#maintenance-JKamsker" title="Maintenance">🚧</a></td>
124
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/Quack6765"><img src="https://avatars.githubusercontent.com/u/5446230?v=4?s=100" width="100px;" alt="Quack"/><br /><sub><b>Quack</b></sub></a><br /><a href="https://github.com/Soju06/codex-lb/commits?author=Quack6765" title="Code">💻</a> <a href="https://github.com/Soju06/codex-lb/issues?q=author%3AQuack6765" title="Bug reports">🐛</a> <a href="#maintenance-Quack6765" title="Maintenance">🚧</a> <a href="#design-Quack6765" title="Design">🎨</a></td>
125
+ </tr>
126
+ </tbody>
127
+ </table>
128
+
129
+ <!-- markdownlint-restore -->
130
+ <!-- prettier-ignore-end -->
131
+
132
+ <!-- ALL-CONTRIBUTORS-LIST:END -->
133
+
134
+ This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!
@@ -0,0 +1,81 @@
1
+ # codex-lb
2
+
3
+ Load balancer for ChatGPT accounts. Pool multiple accounts, track usage, view everything in a dashboard.
4
+
5
+ ### Main Dashboard View
6
+
7
+ ![main dashboard view](docs/screenshots/dashboard.jpg)
8
+
9
+ ### Accounts View
10
+
11
+ ![Accounts list and details](docs/screenshots/accounts.jpg)
12
+
13
+ ## Quick Start
14
+
15
+ ### Docker
16
+
17
+ ```bash
18
+ docker run -d --name codex-lb \
19
+ -p 2455:2455 -p 1455:1455 \
20
+ -v ~/.codex-lb:/var/lib/codex-lb \
21
+ ghcr.io/soju06/codex-lb:latest
22
+ ```
23
+
24
+ ### uvx
25
+
26
+ ```bash
27
+ uvx codex-lb
28
+ ```
29
+
30
+ Open [localhost:2455](http://localhost:2455) → Add account → Done.
31
+
32
+
33
+
34
+ ## Codex CLI & Extension Setup
35
+
36
+ Add to `~/.codex/config.toml`:
37
+
38
+ ```toml
39
+ model = "gpt-5.2-codex"
40
+ model_reasoning_effort = "xhigh"
41
+ model_provider = "codex-lb"
42
+
43
+ [model_providers.codex-lb]
44
+ name = "OpenAI" # MUST be "OpenAI" - enables /compact endpoint
45
+ base_url = "http://127.0.0.1:2455/backend-api/codex"
46
+ wire_api = "responses"
47
+ chatgpt_base_url = "http://127.0.0.1:2455"
48
+ requires_openai_auth = true # Required: enables model selection in Codex IDE extension
49
+ ```
50
+
51
+ ## Data
52
+
53
+ All data stored in `~/.codex-lb/`:
54
+
55
+ - `store.db` – accounts, usage logs
56
+ - `encryption.key` – encrypts tokens (auto-generated)
57
+
58
+ Backup this directory to preserve your accounts.
59
+
60
+ ## Contributors ✨
61
+
62
+ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):
63
+ <!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
64
+ <!-- prettier-ignore-start -->
65
+ <!-- markdownlint-disable -->
66
+ <table>
67
+ <tbody>
68
+ <tr>
69
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/Soju06"><img src="https://avatars.githubusercontent.com/u/34199905?v=4?s=100" width="100px;" alt="Soju06"/><br /><sub><b>Soju06</b></sub></a><br /><a href="https://github.com/Soju06/codex-lb/commits?author=Soju06" title="Code">💻</a> <a href="https://github.com/Soju06/codex-lb/commits?author=Soju06" title="Tests">⚠️</a> <a href="#maintenance-Soju06" title="Maintenance">🚧</a> <a href="#infra-Soju06" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a></td>
70
+ <td align="center" valign="top" width="14.28%"><a href="http://jonas.kamsker.at/"><img src="https://avatars.githubusercontent.com/u/11245306?v=4?s=100" width="100px;" alt="Jonas Kamsker"/><br /><sub><b>Jonas Kamsker</b></sub></a><br /><a href="https://github.com/Soju06/codex-lb/commits?author=JKamsker" title="Code">💻</a> <a href="https://github.com/Soju06/codex-lb/issues?q=author%3AJKamsker" title="Bug reports">🐛</a> <a href="#maintenance-JKamsker" title="Maintenance">🚧</a></td>
71
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/Quack6765"><img src="https://avatars.githubusercontent.com/u/5446230?v=4?s=100" width="100px;" alt="Quack"/><br /><sub><b>Quack</b></sub></a><br /><a href="https://github.com/Soju06/codex-lb/commits?author=Quack6765" title="Code">💻</a> <a href="https://github.com/Soju06/codex-lb/issues?q=author%3AQuack6765" title="Bug reports">🐛</a> <a href="#maintenance-Quack6765" title="Maintenance">🚧</a> <a href="#design-Quack6765" title="Design">🎨</a></td>
72
+ </tr>
73
+ </tbody>
74
+ </table>
75
+
76
+ <!-- markdownlint-restore -->
77
+ <!-- prettier-ignore-end -->
78
+
79
+ <!-- ALL-CONTRIBUTORS-LIST:END -->
80
+
81
+ This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!