[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-84107":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":9,"totalLinesOfCode":9,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":9,"subscribersCount":16,"size":16,"stars1d":17,"stars7d":18,"stars30d":18,"stars90d":16,"forks30d":16,"starsTrendScore":19,"compositeScore":20,"rankGlobal":9,"rankLanguage":9,"license":9,"archived":21,"fork":21,"defaultBranch":22,"hasWiki":21,"hasPages":21,"topics":23,"createdAt":9,"pushedAt":9,"updatedAt":31,"readmeContent":32,"aiSummary":9,"trendingCount":16,"starSnapshotCount":16,"syncStatus":33,"lastSyncTime":34,"discoverSource":35},84107,"FreeQwenApi","y13sint\u002FFreeQwenApi","y13sint","Локальный API-прокси для Qwen AI с поддержкой сохранения контекста диалогов и управления сессиями через REST API",null,"https:\u002F\u002Fgithub.com\u002Fy13sint\u002FFreeQwenApi","JavaScript",231,93,9,23,0,12,18,42,5.92,false,"main",[24,25,26,27,28,29,30],"api-proxy","browser-automation","chatbot","conversation-history","free","nodejs","qwen-ai","2026-06-12 02:04:38","# FreeQwenApi \n\n> **Локальный OpenAI-compatible прокси к Qwen Chat** ГРАЦ ЕМУ - [t.me\u002Fforgetmeai](https:\u002F\u002Ft.me\u002Fforgetmeai).  \n> Текст, модели Qwen 3.7, файлы, Open WebUI, Hermes\u002FLiteLLM, а теперь ещё генерация изображений и видео через Qwen Chat.\n\n![API](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FAPI-OpenAI--compatible-green)\n![Qwen](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FQwen-Chat-purple)\n\n## Что это такое\n\nFreeQwenApi превращает веб-аккаунт Qwen Chat в локальный API endpoint:\n\n```text\nhttp:\u002F\u002Flocalhost:3264\u002Fapi\n```\n\nЭто **не локальная модель на вашей видеокарте** и **не официальный API Alibaba\u002FQwen**. Это практичный browser-based proxy: вы авторизуетесь в Qwen Chat, проект сохраняет сессию и даёт локальный OpenAI-compatible API для ваших инструментов.\n\n## Возможности fork\n\n- **Chat Completions API**: `POST \u002Fapi\u002Fchat\u002Fcompletions`, совместимый с OpenAI SDK, Open WebUI, LiteLLM и агентами.\n- **Актуальные модели Qwen Chat**: `qwen3.7-max`, `qwen3.7-plus`, `qwen3.6-plus` и другие модели из `src\u002FAvailableModels.txt`.\n- **Генерация изображений через Qwen Chat**: `POST \u002Fapi\u002Fimages\u002Fgenerations` без `DASHSCOPE_API_KEY`.\n- **Генерация видео через Qwen Chat**: `POST \u002Fapi\u002Fvideos\u002Fgenerations` + polling задач через `GET \u002Fapi\u002Ftasks\u002Fstatus\u002F:taskId`.\n- **Мультиаккаунты**: добавление, перелогин, удаление, статусы `OK` \u002F `WAIT` \u002F `INVALID`, автоматическая round-robin ротация при лимитах.\n- **Загрузка файлов**: upload endpoint для файлов и вложений Qwen.\n- **Open WebUI**: можно подключить как OpenAI-compatible backend.\n- **Hermes Agent \u002F LiteLLM \u002F Claude Code**: готовые примеры конфигов для локальных AI-агентов.\n- **Health\u002Fsmoke tooling**: `\u002Fapi\u002Fhealth`, `\u002Fapi\u002Fstatus`, `\u002Fapi\u002Fmodels`, `npm run smoke`, `npm run models:sync`.\n- **ForgetMeAI branding**: watermark `t.me\u002Fforgetmeai` в README, CLI и health\u002Fmedia metadata.\n\n## Быстрый старт\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002FForgetMeAI\u002FFreeQwenApi\ncd FreeQwenApi\nnpm install\nnpm run auth\nnpm run models:sync\nSKIP_ACCOUNT_MENU=true npm start\n```\n\nВ другом терминале:\n\n```bash\nnpm run smoke\n```\n\nЕсли всё хорошо, API доступен здесь:\n\n```text\nhttp:\u002F\u002Flocalhost:3264\u002Fapi\n```\n\n## Конфигурация\n\nВсе настройки задаются переменными окружения. Полный список с дефолтами и комментариями — в [`.env.example`](.env.example): порт, модель по умолчанию, таймауты, лимиты, пути, логирование, путь к Chrome и т.д.\n\nПеременные читаются из окружения процесса. Задайте нужные удобным способом:\n\n```bash\nexport PORT=3264 DEFAULT_MODEL=qwen3.7-max   # bash\n$env:PORT=3264; npm start                    # PowerShell\n```\n\nлибо через блок `environment:` в `docker-compose.yml` \u002F флаги `-e` у `docker run`.\n\n## Авторизация Qwen Chat\n\nДобавить аккаунт:\n\n```bash\nnpm run auth\n```\n\nИли сразу конкретное действие:\n\n```bash\nnpm run auth -- --add\nnpm run auth -- --list\nnpm run auth -- --relogin\nnpm run auth -- --remove\n```\n\nПри добавлении аккаунта откроется Chromium. Войдите в Qwen Chat, затем вернитесь в терминал — токен будет сохранён в `session\u002F`.\n\n**Не коммитьте и не публикуйте секреты:**\n\n- `session\u002F`\n- `session\u002Ftokens.json`\n- `session\u002Faccounts\u002F**\u002Ftoken.txt`\n- `.env`\n- `Authorization.txt`\n- cookies \u002F browser profile \u002F реальные токены\n\n## Основные endpoints\n\n### Health\n\n```bash\ncurl http:\u002F\u002Flocalhost:3264\u002Fapi\u002Fhealth\n```\n\nОтвет содержит количество моделей, аккаунтов и watermark:\n\n```json\n{\n  \"ok\": true,\n  \"service\": \"FreeQwenApi\",\n  \"watermark\": \"t.me\u002Fforgetmeai\",\n  \"baseUrl\": \"\u002Fapi\",\n  \"models\": 28\n}\n```\n\n### Список моделей\n\n```bash\ncurl http:\u002F\u002Flocalhost:3264\u002Fapi\u002Fmodels\n```\n\nОбновить список моделей из Qwen Chat metadata:\n\n```bash\nnpm run models:sync\n```\n\nПодробный отчёт: [docs\u002FQWEN_CHAT_MODELS.md](docs\u002FQWEN_CHAT_MODELS.md)\n\n### Chat Completions\n\n```bash\ncurl http:\u002F\u002Flocalhost:3264\u002Fapi\u002Fchat\u002Fcompletions \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"model\": \"qwen3.7-max\",\n    \"messages\": [\n      {\"role\": \"user\", \"content\": \"Ответь коротко: что такое FreeQwenApi?\"}\n    ],\n    \"stream\": false\n  }'\n```\n\nOpenAI SDK:\n\n```js\nimport OpenAI from 'openai';\n\nconst openai = new OpenAI({\n  baseURL: 'http:\u002F\u002Flocalhost:3264\u002Fapi',\n  apiKey: 'dummy-key'\n});\n\nconst response = await openai.chat.completions.create({\n  model: 'qwen3.7-max',\n  messages: [{ role: 'user', content: 'Привет!' }]\n});\n\nconsole.log(response.choices[0].message.content);\n```\n\n## Генерация изображений через Qwen Chat\n\nПо умолчанию `\u002Fapi\u002Fimages\u002Fgenerations` использует **Qwen Chat**, а не DashScope. То есть отдельный `DASHSCOPE_API_KEY` не нужен — нужен активный Qwen Chat аккаунт.\n\n```bash\ncurl http:\u002F\u002Flocalhost:3264\u002Fapi\u002Fimages\u002Fgenerations \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"prompt\": \"Кинематографичный робот в неоновом Токио, стиль sci-fi poster\",\n    \"model\": \"qwen3-vl-plus\",\n    \"size\": \"16:9\"\n  }'\n```\n\nПример ответа:\n\n```json\n{\n  \"created\": 1770000000,\n  \"watermark\": \"t.me\u002Fforgetmeai\",\n  \"provider\": \"qwen-chat\",\n  \"model\": \"qwen3-vl-plus\",\n  \"data\": [\n    { \"url\": \"https:\u002F\u002Fcdn.qwenlm.ai\u002F...\u002Fimage.png\", \"revised_prompt\": \"...\" }\n  ]\n}\n```\n\nПоддерживаемые форматы `size` для Qwen Chat:\n\n- `16:9`\n- `9:16`\n- `1:1`\n- `4:3`\n- также можно передать OpenAI-style `1024x1024`, `1792x1024`, `1024x1792` — они будут преобразованы в aspect ratio.\n\nСтарый DashScope-режим тоже оставлен:\n\n```json\n{\n  \"provider\": \"dashscope\",\n  \"model\": \"qwen-image-plus\",\n  \"prompt\": \"...\"\n}\n```\n\nПодробности: [IMAGE_VIDEO_GENERATION_GUIDE.md](IMAGE_VIDEO_GENERATION_GUIDE.md) и [docs\u002FIMAGE_GENERATION.md](docs\u002FIMAGE_GENERATION.md)\n\n## Генерация видео через Qwen Chat\n\nСоздать видео и дождаться результата на сервере:\n\n```bash\ncurl http:\u002F\u002Flocalhost:3264\u002Fapi\u002Fvideos\u002Fgenerations \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"prompt\": \"Камера медленно приближается к футуристическому городу ночью, cinematic, 5 seconds\",\n    \"model\": \"qwen3-vl-plus\",\n    \"size\": \"16:9\",\n    \"wait\": true\n  }'\n```\n\nЕсли не хотите держать HTTP-соединение открытым:\n\n```bash\ncurl http:\u002F\u002Flocalhost:3264\u002Fapi\u002Fvideos\u002Fgenerations \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"prompt\": \"Робот идёт под дождём в неоновом городе\",\n    \"size\": \"16:9\",\n    \"wait\": false\n  }'\n```\n\nОтвет вернёт `task_id`. Проверить статус:\n\n```bash\ncurl http:\u002F\u002Flocalhost:3264\u002Fapi\u002Ftasks\u002Fstatus\u002FTASK_ID\n```\n\nИли подождать завершения прямо в status endpoint:\n\n```bash\ncurl \"http:\u002F\u002Flocalhost:3264\u002Fapi\u002Ftasks\u002Fstatus\u002FTASK_ID?wait=true\"\n```\n\n## Open WebUI\n\nДля локального Open WebUI:\n\n```text\nBase URL: http:\u002F\u002Flocalhost:3264\u002Fapi\nAPI Key: dummy-key\nModel: qwen3.7-max\n```\n\nЕсли Open WebUI в Docker:\n\n```text\nBase URL: http:\u002F\u002Fhost.docker.internal:3264\u002Fapi\nAPI Key: dummy-key\n```\n\nПолная инструкция: [docs\u002FOPENWEBUI_SETUP.md](docs\u002FOPENWEBUI_SETUP.md)\n\n## Hermes Agent \u002F LiteLLM \u002F Claude Code\n\nHermes custom provider:\n\n```yaml\ncustom_providers:\n  - name: qwen-free\n    base_url: http:\u002F\u002Flocalhost:3264\u002Fapi\n    model: qwen3.7-max\n    api_key: dummy-key\n```\n\nГотовый пример: [examples\u002Fhermes\u002Fconfig-snippet.yaml](examples\u002Fhermes\u002Fconfig-snippet.yaml)\n\nДля Hermes Agent прокси поддерживает OpenAI-compatible agent loop:\n\n- `\u002Fapi\u002Fchat\u002Fcompletions` и `\u002Fapi\u002Fv1\u002Fchat\u002Fcompletions` принимают `tools` \u002F legacy `functions`;\n- ответы с вызовами инструментов возвращаются как настоящие `message.tool_calls` или streaming `delta.tool_calls` с `finish_reason: \"tool_calls\"`;\n- tool-result продолжения Hermes (`role: \"tool\"`) не ломают контекст: прокси сворачивает OpenAI transcript в понятный Qwen Chat prompt и продолжает ответ после результата инструмента;\n- для Qwen Chat это адаптер поверх веб-чата, поэтому tool schemas эмулируются через системный prompt, но наружный контракт для Hermes остаётся OpenAI-compatible.\n\nLiteLLM bridge для Claude Code:\n\n```yaml\nmodel_list:\n  - model_name: qwen3.7-max\n    litellm_params:\n      model: openai\u002Fqwen3.7-max\n      api_base: http:\u002F\u002Flocalhost:3264\u002Fapi\n      api_key: dummy-key\n```\n\nГотовый пример: [examples\u002Flitellm\u002Fqwen_litellm.yaml](examples\u002Flitellm\u002Fqwen_litellm.yaml)\n\n## Docker\n\nСначала добавьте аккаунт локально, потому что внутри контейнера нет GUI для входа:\n\n```bash\nnpm run auth\n```\n\nПотом:\n\n```bash\ndocker compose up --build -d\n```\n\nВ `docker-compose.yml` важно пробросить `session\u002F`:\n\n```yaml\nservices:\n  qwen-proxy:\n    build: .\n    environment:\n      - SKIP_ACCOUNT_MENU=true\n      - PORT=3264\n    ports:\n      - \"3264:3264\"\n    volumes:\n      - .\u002Fsession:\u002Fapp\u002Fsession\n      - .\u002Flogs:\u002Fapp\u002Flogs\n      - .\u002Fuploads:\u002Fapp\u002Fuploads\n```\n\n## Рекомендуемые модели\n\n- **Обычный чат \u002F агенты**: `qwen3.7-max`\n- **Быстрее и легче**: `qwen3.7-plus`\n- **Кодинг**: `qwen3-coder-plus`\n- **Изображения\u002Fвидео через Qwen Chat**: `qwen3-vl-plus`\n- **Open WebUI default**: `qwen3.7-max`\n\n## Полезные команды\n\n```bash\nnpm run auth                  # управление аккаунтами\nnpm run models:sync           # обновить список моделей\nnpm run smoke                 # быстрая проверка API\nSKIP_ACCOUNT_MENU=true npm start\n```\n\nПроверки руками:\n\n```bash\ncurl http:\u002F\u002Flocalhost:3264\u002Fapi\u002Fhealth\ncurl http:\u002F\u002Flocalhost:3264\u002Fapi\u002Fstatus\ncurl http:\u002F\u002Flocalhost:3264\u002Fapi\u002Fmodels\ncurl http:\u002F\u002Flocalhost:3264\u002Fapi\u002Fimages\u002Fstatus\ncurl http:\u002F\u002Flocalhost:3264\u002Fapi\u002Fvideos\u002Fstatus\n```\n\n## Документация\n\n- [docs\u002FFORK_DEMO_QUICKSTART.md](docs\u002FFORK_DEMO_QUICKSTART.md) — быстрый сценарий для демо\u002Fвидео.\n- [docs\u002FQWEN_CHAT_MODELS.md](docs\u002FQWEN_CHAT_MODELS.md) — отчёт синхронизации моделей Qwen Chat.\n- [IMAGE_VIDEO_GENERATION_GUIDE.md](IMAGE_VIDEO_GENERATION_GUIDE.md) — генерация изображений и видео через `chatType`.\n- [docs\u002FIMAGE_GENERATION.md](docs\u002FIMAGE_GENERATION.md) — DashScope\u002FQwen Image endpoints.\n- [docs\u002FOPENWEBUI_SETUP.md](docs\u002FOPENWEBUI_SETUP.md) — подключение Open WebUI.\n- [examples\u002Fhermes\u002Fconfig-snippet.yaml](examples\u002Fhermes\u002Fconfig-snippet.yaml) — Hermes Agent provider.\n- [examples\u002Flitellm\u002Fqwen_litellm.yaml](examples\u002Flitellm\u002Fqwen_litellm.yaml) — LiteLLM bridge.\n\n## Ограничения\n\n- Это неофициальный browser-based proxy, Qwen может менять внутренний API.\n- Аккаунты Qwen Chat могут ловить лимиты; используйте несколько аккаунтов для round-robin.\n- Токены истекают — используйте `npm run auth -- --relogin`.\n- Генерация фото\u002Fвидео зависит от доступности функций Qwen Chat на конкретном аккаунте.\n- URL сгенерированных медиа могут быть временными.\n- Для production используйте осторожно: это инструмент для экспериментов, демо и локальных workflow.\n\n",2,"2026-06-11 04:12:18","trending"]