
Grok Media Skill
- 3 installs
- 12 repo stars
- Updated February 1, 2026
- luoluoluo22/grok-media-skill
grok-media-skill is a Claude Code skill for ai & agent building.
About
grok-media-skill is a Claude Code skill for ai & agent building. It helps solo builders move faster with AI-assisted coding.
- grok-media-skill
- AI & Agent Building
- AI-coding skill
Grok Media Skill by the numbers
- 3 all-time installs (skills.sh)
- Ranked #13,677 of 16,546 AI & Agent Building skills by installs in the Skillselion catalog
- Data as of Aug 2, 2026 (Skillselion catalog sync)
npx skills add https://github.com/luoluoluo22/grok-media-skill --skill grok-media-skillAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 3 |
|---|---|
| repo stars | ★ 12 |
| Last updated | February 1, 2026 |
| Repository | luoluoluo22/grok-media-skill ↗ |
How do I helps with ai & agent building tasks during AI-assisted development.?
Helps with ai & agent building tasks during AI-assisted development.
Who is it for?
Best when you're working on ai & agent building and need structured help with grok media skill.
Skip if: Teams with no ai & agent building needs, or anyone wanting a generic chat assistant without this specific workflow.
When should I use this skill?
When you need to helps with ai & agent building tasks during AI-assisted development., or when grok-media-skill is a claude code skill for ai & agent building.
What you get
Structured output aligned to grok-media-skill: grok-media-skill, AI & Agent Building.
Files
Grok Media Skill (AI 视觉创作)
目标
利用 Grok (支持 Grok 4) 强大的多模态生成能力,提供一站式的文生图 (Text-to-Image) 和 文生视频 (Text/Image-to-Video) 解决方案。
使用场景
- AI 绘画: 创建高清壁纸、视频封面、故事板、UI素材。
- AI 视频: 制作动态背景、B-roll 空镜、让照片动起来 (Motion Brush)。
环境配置 (Setup)
首次使用前,请务必配置 Grok 的认证信息。注意:Grok 具有严厉的 Cloudflare 防火墙。
1. 进入 libs/data/ 目录。 2. 复制 token.example.json 为 token.json。 3. 复制 setting.example.toml 为 setting.toml。 4. 获取认证信息:
- 登录 grok.com。
- 打开浏览器开发者工具 (F12) -> Application -> Cookies。
- 找到
sso或sso-rw的值,填入token.json。 - 找到
cf_clearance并复制完整 Cookie 字符串填入setting.toml的cookie字段。
5. 环境同步:
- 如果使用了代理,必须在
setting.toml中配置proxy_url。 - 确保
setting.toml中的user_agent与实际浏览器一致。
功能与指令
1. 文生图 (Text to Image)
指令模式: "用 Grok 画一张..." / "使用 Grok 生成图片..."
- 执行逻辑:
- 自动调用
python scripts/generate_image.py "{Prompt}" "{Ratio}" - Prompt: 核心描述词。
- Ratio: 宽高比 (e.g.,
16:9,9:16)。
2. 文生视频 (Text to Video)
指令模式: "用 Grok 生成一段视频..." / "Grok 制作关于...的视频"
- 执行逻辑:
- 调用
python scripts/generate_video.py "{Prompt}" "{Ratio}"
3. 图生视频 (Image to Video)
指令模式: "让这张图用 Grok 动起来..." / "基于这张图用 Grok 生成视频..."
- 执行逻辑:
- 调用
python scripts/generate_video.py "{MotionPrompt}" "{ImagePath}"
注意事项
- Cloudflare 拦截: 如果脚本运行报错 403,通常是由于 IP 变动或 Cookie 失效。请检查
setting.toml中的proxy_url是否与浏览器一致。 - 生成时长: 生成过程可能需要 1-2 分钟,请耐心等待。
- 本地存储: 生成的素材保存在工作区的
generated_assets文件夹中。
示例
场景: 制作一个赛博朋克城市的动态背景。 1. 文生图: "Use Grok to generate a cyberpunk city street at night, neon lights, 16:9" 2. 图生视频: "Using Grok, make the camera move forward through the street, rain falling" (指向上一步生成的图片)
# Ignore data directory containing sensitive tokens
libs/data/*
!libs/data/*.example.json
!libs/data/*.example.toml
__pycache__/
*.pyc
.DS_Store
output/
generated_assets/
[grok]
# 必填:用于防拦截的 User-Agent,建议通过浏览器控制台 navigator.userAgent 获取
user_agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36"
# 选填:用于绕过 Cloudflare 的 Cookie
cf_clearance = ""
# 强烈建议:填入浏览器中的完整 Cookie 字符串 (包含 cf_clearance, sso-rw, _ga 等)
cookie = ""
# 代理配置:若浏览器使用了代理,此处必须填入相同的地址以保持 IP 一致
proxy_url = "http://127.0.0.1:7890"
# 动态 Statsig 特征,建议设为 true
dynamic_statsig = true
# 生成参数
temporary = false
show_thinking = true
[global]
log_level = "INFO"
# 图片保存模式: "url" 或 "base64"
image_mode = "url"
{
"desc": "Put your Grok SSO token here. Get it from browser cookies (sso-rw / sso).",
"ssoNormal": {
"YOUR_JWT_HERE": {
"status": "active",
"remark": "Default Account"
}
},
"ssoSuper": {
"OPTIONAL_SUPER_JWT": {
"status": "inactive",
"remark": "Super Account (Optional)"
}
}
}
import json
import uuid
import base64
import random
import string
import os
from pathlib import Path
# 配置路径 (指向 shared_utils 平级的 data 目录,或者用户指定的目录)
# 暂时假设 data 目录在 shared_utils/data
CURRENT_DIR = Path(__file__).parent
DATA_DIR = CURRENT_DIR / "data"
TOKEN_FILE = DATA_DIR / "token.json"
SETTING_FILE = DATA_DIR / "setting.toml"
def ensure_data_dir():
DATA_DIR.mkdir(parents=True, exist_ok=True)
def get_cf_clearance():
if not SETTING_FILE.exists(): return ""
try:
import toml
data = toml.load(SETTING_FILE)
cf = data.get("grok", {}).get("cf_clearance", "")
if cf and not cf.startswith("cf_clearance="):
cf = f"cf_clearance={cf}"
return cf
except: return ""
def _generate_statsig_id():
import base64
import random
import string
def rand_str(length, letters_only=True):
chars = string.ascii_lowercase if letters_only else string.ascii_lowercase + string.digits
return ''.join(random.choices(chars, k=length))
if random.choice([True, False]):
rand = rand_str(5, letters_only=False)
msg = f"e:TypeError: Cannot read properties of null (reading 'children['{rand}']')"
else:
rand = rand_str(10)
msg = f"e:TypeError: Cannot read properties of undefined (reading '{rand}')"
return base64.b64encode(msg.encode()).decode()
def get_sso_jwt():
if not TOKEN_FILE.exists(): return None
try:
with open(TOKEN_FILE, "r", encoding="utf-8") as f:
data = json.load(f)
for cat in ["ssoNormal", "ssoSuper"]:
if cat in data and data[cat]:
for jwt, info in data[cat].items():
if info.get("status") == "active": return jwt
except: return None
def get_headers(cookie_str, path="/"):
content_type = "text/plain;charset=UTF-8" if "upload-file" in path else "application/json"
# 动态获取配置
import toml
try:
data = toml.load(SETTING_FILE)
grok_cfg = data.get("grok", {})
dynamic_statsig = grok_cfg.get("dynamic_statsig", True)
statsig = _generate_statsig_id() if dynamic_statsig else grok_cfg.get("x_statsig_id")
ua = grok_cfg.get("user_agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36")
except:
statsig = _generate_statsig_id()
ua = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36"
headers = {
"User-Agent": ua,
"Accept": "*/*",
"Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8",
"Content-Type": content_type,
"x-statsig-id": statsig,
"x-xai-request-id": str(uuid.uuid4()),
"x-traceparent": "00-e172a5a544b6c39f993d39c06346b0a6-577660633c5e0da6-00", # Use a dummy or dynamic
"Cookie": cookie_str,
"Referer": "https://grok.com/",
"Origin": "https://grok.com",
"Priority": "u=1, i",
"sec-ch-ua": '"Not(A:Brand";v="8", "Chromium";v="133", "Google Chrome";v="133"',
"sec-ch-ua-mobile": "?0",
"sec-ch-ua-platform": '"Windows"',
"sec-fetch-dest": "empty",
"sec-fetch-mode": "cors",
"sec-fetch-site": "same-origin"
}
return headers
def get_full_cookie():
if not SETTING_FILE.exists(): return ""
try:
import toml
data = toml.load(SETTING_FILE)
return data.get("grok", {}).get("cookie", "")
except: return ""
def get_auth_context():
"""获取完整的认证需要的上下文 (Cookie)"""
# 优先尝试从 setting.toml 获取完整 Cookie
full_cookie = get_full_cookie()
if full_cookie:
return full_cookie
jwt = get_sso_jwt()
if not jwt:
return None
cookie = f"sso-rw={jwt}; sso={jwt}"
cf = get_cf_clearance()
if cf: cookie = f"{cookie}; {cf}"
return cookie
Grok Media Skill (AI 视觉创作)
本技能利用 Grok (目前已支持 Grok 4) 强大的多模态及视频生成能力,提供一站式的 文生图、文生视频 及 图生视频 解决方案。
⚠️ 重要说明
该技能仅在用户明确指定使用 "Grok" 时被调用。由于 Grok 官方具有极强的 Cloudflare 防护,配置不当会导致 403 被拦截。
🌟 核心能力
- 文生图: 极高审美风格的 AI 绘画(默认使用 Grok 4 模型)。
- 文生视频: 自动完成 "提示词 -> 底图 -> 动画" 的完整流,支持各种画幅。
- 图生视频: 支持 Motion Brush 逻辑,利用 Grok 的视频生成能力让静态图片动起来。
🛠️ 环境与配置指南
1. 安装 Skill
请在您的项目根目录下,打开终端 (Terminal) 运行以下命令:
git clone https://github.com/luoluoluo22/grok-media-skill.git .agent/skills/grok-media-skill2. 配置文件准备
进入 .agent/skills/grok-media-skill/libs/data/ 目录:
- 将
token.example.json复制并重命名为token.json。 - 将
setting.example.toml复制并重命名为setting.toml。
3. 获取认证信息 (Cookie & Token)
1. 登录 grok.com。 2. 按 F12 打开开发者工具 -> Application -> Cookies:
- `sso` / `sso-rw`: 复制其 JWT 字符串,填入
token.json。 - `cf_clearance`: 复制该值,填入
setting.toml的cf_clearance字段。
3. 获取完整 Cookie 字符串 (推荐):
- 在网络请求 (Network) 中找到任意一个
new或conversations请求。 - 复制请求头中的完整
Cookie: ...字符串,填入setting.toml的cookie字段,这能极大地提高稳定性。
4. 环境同步 (防拦截关键)
Grok 会校验请求指纹,请务必在 setting.toml 中配置以下项:
- `proxy_url`: 如果您在浏览器端使用了代理,请在此处填入相同的代理地址 (如
http://127.0.0.1:7890)。 - `user_agent`: 将其更新为您当前浏览器的真实 UA (可在控制台输入
navigator.userAgent获取)。 - `dynamic_statsig`: 建议设为
true以自动绕过静态特征检测。
🔍 连接验证
配置完成后,运行测试脚本进行验证:
python .agent/skills/grok-media-skill/scripts/test_chat.py "Hello, Grok 4!"如果能看到文字输出,说明连接成功。
📖 技能使用 (AI 对话)
请注意,该技能具有最高针对性,只有当您明确指出使用 Grok 时才会生效。
🗣️ 试试这样问 AI
- 文生图: "用 Grok 画一幅油画风格的森林,16:9 画幅。"
- 文生视频: "使用 Grok 制作一段赛博朋克城市延时摄影视频,16:9。"
- 图生视频: "参考这张图片,用 Grok 让它动起来,镜头向左横移。"
📂 目录结构
scripts/: 文生图、文生视频核心逻辑,及测试脚本。libs/: Grok API 客户端封装与认证库。generated_assets/: 生成的图片与视频默认保存路径。libs/data/: 存放 Token 和 Setting 的敏感数据目录(已加入 .gitignore)。
❓ 常见问题 (FAQ)
- Q: 遇到 403 错误怎么办?
A: 通常是 IP 发生了变动或 cf_clearance 失效。请重新获取 Cookie,并确保 proxy_url 配置正确,使脚本出口 IP 与浏览器一致。
- Q: 生成速度慢?
A: Grok 生成模型通常需要 30-60 秒,尤其是视频生成。请耐心等待进度提示。
import sys
import json
import time
import os
from pathlib import Path
from curl_cffi import requests
# Add libs to path
current_dir = Path(__file__).parent
libs_path = current_dir.parent / "libs"
sys.path.append(str(libs_path))
try:
from grok_client import get_auth_context, get_headers
except ImportError:
print("[-] Error: libs module not found. Path:", libs_path)
print("[-] Error: shared_utils module not found")
sys.exit(1)
def generate_image_grok(prompt, ratio=None, count=1):
cookie_str = get_auth_context()
if not cookie_str:
print("[-] Error: Authentication failed (Token not found)")
return []
# 强制强化提示词
safe_prompt = f"Generate an image of {prompt}" if "generate" not in prompt.lower() else prompt
if ratio:
safe_prompt = f"{safe_prompt} --aspect {ratio}"
# 从 setting.toml 读取代理
from grok_client import SETTING_FILE
proxy = None
try:
import toml
data = toml.load(SETTING_FILE)
proxy = data.get("grok", {}).get("proxy_url")
except: pass
proxies = {"http": proxy, "https": proxy} if proxy else None
print(f"[*] Sending prompt to Grok: '{safe_prompt}'")
print(f"[*] Using Proxy: {proxy}")
payload = {
"temporary": False,
"modelName": "grok-4-1-thinking-1129",
"message": safe_prompt,
"fileAttachments": [],
"imageAttachments": [],
"disableSearch": False,
"enableImageGeneration": True,
"imageGenerationCount": count,
"modelMode": "MODEL_MODE_AUTO"
}
try:
response = requests.post(
"https://grok.com/rest/app-chat/conversations/new",
headers=get_headers(cookie_str),
json=payload,
impersonate="chrome133a",
stream=True,
timeout=180,
proxies=proxies
)
image_urls = []
for line in response.iter_lines():
if not line: continue
try:
line_str = line.decode('utf-8')
data = json.loads(line_str)
m_resp = data.get("result", {}).get("response", {}).get("modelResponse", {})
urls = m_resp.get("generatedImageUrls", [])
for u in urls:
if u not in image_urls: image_urls.append(u)
except: continue
if not image_urls:
print("[-] No images returned.")
return []
print(f"[+] Generated {len(image_urls)} images. Downloading...")
# Save to user's project root directory
# current structure: <root>/.agent/skills/grok-media-skill/libs/
project_root = libs_path.parent.parent.parent.parent
save_dir = project_root / "generated_assets"
save_dir.mkdir(parents=True, exist_ok=True)
local_files = []
for i, url_path in enumerate(image_urls):
full_url = f"https://assets.grok.com/{url_path}"
# Create a simple name
safe_name = f"grok_{int(time.time())}_{i}.jpg"
local_path = save_dir / safe_name
try:
dl_headers = get_headers(cookie_str)
if "x-statsig-id" in dl_headers:
del dl_headers["x-statsig-id"]
r_dl = requests.get(full_url, headers=dl_headers, impersonate="chrome133a", timeout=30)
if r_dl.status_code == 200:
local_path.write_bytes(r_dl.content)
print(f" [V] Saved: {local_path}")
local_files.append(str(local_path))
except Exception as e:
print(f" [X] Download failed: {e}")
return local_files
except Exception as e:
print(f"[-] Request failed: {e}")
return []
if __name__ == "__main__":
if len(sys.argv) < 2:
print("Usage: python generate.py <prompt> [ratio]")
sys.exit(1)
p = sys.argv[1]
r = sys.argv[2] if len(sys.argv) > 2 else None
generate_image_grok(p, r)
import sys
import json
import time
import base64
import os
from pathlib import Path
from curl_cffi import requests
# Add libs to path
current_dir = Path(__file__).parent
libs_path = current_dir.parent / "libs"
sys.path.append(str(libs_path))
# In this unified skill, generate_image is just next door
sys.path.append(str(current_dir))
try:
from grok_client import get_auth_context, get_headers
from generate_image import generate_image_grok
except ImportError:
print("[-] Error: libs or generate_image module not found")
print("[-] Error: shared_utils or text-to-image module not found")
sys.exit(1)
def upload_image(image_input, cookie_str):
# 获取代理
from grok_client import SETTING_FILE
proxy = None
try:
import toml
data = toml.load(SETTING_FILE)
proxy = data.get("grok", {}).get("proxy_url")
except: pass
proxies = {"http": proxy, "https": proxy} if proxy else None
# 逻辑:如果是 URL
if image_input.startswith("http"):
print(f"[*] Downloading reference image...")
try:
r = requests.get(image_input, impersonate="chrome133a", proxies=proxies)
if r.status_code == 200:
mime = r.headers.get("content-type", "image/png")
b64_content = base64.b64encode(r.content).decode()
else:
print(f"[-] Image download failed: {r.status_code}")
return None, None
except Exception as e:
print(f"[-] Image download error: {e}")
return None, None
else:
# 本地文件
p = Path(image_input)
if p.exists():
print(f"[*] Reading local image: {p.name}...")
import mimetypes
mime, _ = mimetypes.guess_type(image_input)
mime = mime or "image/png"
b64_content = base64.b64encode(p.read_bytes()).decode()
else:
print(f"[-] Local file not found: {image_input}")
return None, None
print("[*] Uploading to asset library...")
payload = {"fileName": "seed.png", "fileMimeType": mime, "content": b64_content}
try:
# 上传需要特殊的 header
headers = get_headers(cookie_str, "/upload-file")
resp = requests.post("https://grok.com/rest/app-chat/upload-file",
headers=headers,
data=json.dumps(payload), impersonate="chrome133a", proxies=proxies)
if resp.status_code == 200:
d = resp.json()
fid = d.get("fileMetadataId")
furi = d.get("fileUri")
print(f"[debug] Upload success. ID: {fid}")
return fid, furi
else:
print(f"[-] Upload failed ({resp.status_code})")
except Exception as e:
print(f"[-] Upload exception: {e}")
return None, None
def create_post(file_uri, cookie_str):
print("[*] Creating Media Post anchor...")
# 获取代理
from grok_client import SETTING_FILE
proxy = None
try:
import toml
data = toml.load(SETTING_FILE)
proxy = data.get("grok", {}).get("proxy_url")
except: pass
proxies = {"http": proxy, "https": proxy} if proxy else None
payload = {"media_url": f"https://assets.grok.com/{file_uri}", "media_type": "MEDIA_POST_TYPE_IMAGE"}
try:
resp = requests.post("https://grok.com/rest/media/post/create",
headers=get_headers(cookie_str, "/create"),
json=payload, impersonate="chrome133a", proxies=proxies)
if resp.status_code == 200:
pid = resp.json().get("post", {}).get("id")
return pid
else:
print(f"[-] Create Post failed ({resp.status_code})")
except Exception as e:
print(f"[-] Create Post exception: {e}")
return None
def run_video_gen(post_id, file_id, prompt, cookie_str):
print(f"[*] Requesting video generation (This takes 1-2 mins)...")
# 从 setting.toml 读取代理
from grok_client import SETTING_FILE
proxy = None
try:
import toml
data = toml.load(SETTING_FILE)
proxy = data.get("grok", {}).get("proxy_url")
except: pass
proxies = {"http": proxy, "https": proxy} if proxy else None
payload = {
"temporary": False,
"modelName": "grok-4-1-thinking-1129",
"message": f"https://grok.com/imagine/{post_id} {prompt} --mode=custom",
"fileAttachments": [file_id] if file_id else [],
"toolOverrides": {"videoGen": True},
"modelMode": "MODEL_MODE_AUTO"
}
headers = get_headers(cookie_str)
headers["Referer"] = f"https://grok.com/imagine/{post_id}"
try:
response = requests.post(
"https://grok.com/rest/app-chat/conversations/new",
headers=headers,
json=payload,
impersonate="chrome133a",
stream=True,
timeout=300,
proxies=proxies
)
last_p = -1
v_url = None
for line in response.iter_lines():
if not line: continue
try:
line_str = line.decode('utf-8')
if "<html" in line_str.lower():
print("\n[!] Cloudflare Security Challenge Detected.")
break
data = json.loads(line_str)
if "error" in data:
print(f"\n[-] API Error: {data['error']}")
return
res = data.get("result", {}).get("response", {}).get("streamingVideoGenerationResponse", {})
if res:
p = res.get("progress", 0)
url = res.get("videoUrl")
if p > last_p:
print(f" [Generating: {p}%] ", end="\r")
last_p = p
if url: v_url = url
except: continue
if v_url:
print(f"\n[+] Video generated! URL: {v_url}")
# current structure: <root>/.agent/skills/grok-media-skill/libs/
project_root = libs_path.parent.parent.parent.parent
save_dir = project_root / "generated_assets"
save_dir.mkdir(parents=True, exist_ok=True)
save_path = save_dir / f"video_{int(time.time())}.mp4"
print(f"[*] Downloading...")
dl_headers = get_headers(cookie_str)
if "x-statsig-id" in dl_headers:
del dl_headers["x-statsig-id"]
r_dl = requests.get(f"https://assets.grok.com/{v_url}", headers=dl_headers, impersonate="chrome133a", proxies=proxies)
if r_dl.status_code == 200:
save_path.write_bytes(r_dl.content)
print(f"[V] Saved video: {save_path}")
return str(save_path)
else: print(f"[-] Download failed: {r_dl.status_code}")
else:
print("\n[-] Generation ended without video URL.")
except Exception as e: print(f"\n[-] Video request failed: {e}")
return None
def main():
if len(sys.argv) < 2:
print("Usage: python generate_video.py <prompt> [image_path_or_ratio]")
return
prompt = sys.argv[1]
arg2 = sys.argv[2] if len(sys.argv) > 2 else None
image_input = None
ratio = None
def is_ratio(s):
return s and (":" in s or "--" in s or len(s) < 10)
if arg2:
if is_ratio(arg2) and not Path(arg2).exists() and not arg2.startswith("http"):
ratio = arg2
else:
image_input = arg2
cookie = get_auth_context()
if not cookie:
print("[-] Error: Authentication failed")
return
if not image_input:
print(f"[*] No base image provided. Generating base image first (Ratio: {ratio or 'Default'})...")
# Reuse logic from text-to-image
generated_paths = generate_image_grok(prompt, ratio, count=1)
if generated_paths:
image_input = generated_paths[0]
print(f"[+] Base image generated: {image_input}")
else:
print("[-] Failed to generate base image")
return
# Now we have image_input, proceed to generate video
fid, furi = upload_image(image_input, cookie)
if fid and furi:
pid = create_post(furi, cookie)
if pid:
run_video_gen(pid, fid, prompt, cookie)
else:
print("[-] Failed to create post anchor")
else:
print("[-] Failed to upload asset")
if __name__ == "__main__":
main()
import sys
import json
import os
from pathlib import Path
from curl_cffi import requests
# Add libs to path
current_dir = Path(__file__).parent
libs_path = current_dir.parent / "libs"
sys.path.append(str(libs_path))
try:
from grok_client import get_auth_context, get_headers
except ImportError:
print("[-] Error: libs module not found.")
sys.exit(1)
def test_chat(prompt="Hi"):
cookie_str = get_auth_context()
if not cookie_str:
print("[-] Error: Authentication failed (Token not found)")
return
# 从 setting.toml 读取代理
from grok_client import SETTING_FILE
proxy = None
try:
import toml
data = toml.load(SETTING_FILE)
proxy = data.get("grok", {}).get("proxy_url")
except: pass
proxies = {"http": proxy, "https": proxy} if proxy else None
print(f"[*] Testing Grok Chat with prompt: '{prompt}'")
print(f"[*] Using Proxy: {proxy}")
payload = {
"temporary": False,
"modelName": "grok-4-1-thinking-1129",
"message": prompt,
"fileAttachments": [],
"imageAttachments": [],
"disableSearch": False,
"enableImageGeneration": True,
"returnImageBytes": False,
"returnRawGrokInXaiRequest": False,
"enableImageStreaming": True,
"imageGenerationCount": 2,
"forceConcise": False,
"toolOverrides": {},
"enableSideBySide": True,
"sendFinalMetadata": True,
"customPersonality": "Respond briefly and directly, using as few words as possible.",
"isReasoning": False,
"disableTextFollowUps": False,
"responseMetadata": {
"modelConfigOverride": {"modelMap": {}},
"requestModelDetails": {"modelId": "grok-4-1-thinking-1129"}
},
"disableMemory": False,
"forceSideBySide": False,
"modelMode": "MODEL_MODE_AUTO",
"isAsyncChat": False,
"deviceEnvInfo": {
"darkModeEnabled": True,
"devicePixelRatio": 1,
"screenWidth": 2560,
"screenHeight": 1440,
"viewportWidth": 937,
"viewportHeight": 456
}
}
try:
response = requests.post(
"https://grok.com/rest/app-chat/conversations/new",
headers=get_headers(cookie_str),
json=payload,
impersonate="chrome133a", # Use Chrome for better TLS fingerprint
stream=True,
timeout=120,
proxies=proxies
)
if response.status_code != 200:
print(f"[-] HTTP Error: {response.status_code}")
print(f"[-] Response: {response.text[:500]}")
return
full_text = ""
is_thinking = False
print("[*] Receiving response stream...")
for line in response.iter_lines():
if not line: continue
line_str = line.decode('utf-8')
try:
data = json.loads(line_str)
res_obj = data.get("result", {}).get("response", {})
# 检查是否在思考
current_thinking = res_obj.get("isThinking", False)
if current_thinking and not is_thinking:
print("\n[Thinking] ", end="", flush=True)
is_thinking = True
elif not current_thinking and is_thinking:
print("\n[Answer] ", end="", flush=True)
is_thinking = False
# 提取 Token (参考 grok2api 逻辑)
token = res_obj.get("token")
if token and isinstance(token, str):
print(token, end="", flush=True)
full_text += token
# 检查是否结束
if res_obj.get("isComplete"):
print("\n[+] Response complete.")
break
except json.JSONDecodeError:
if "<html" in line_str.lower():
print(f"\n[!] Cloudflare Verification Detected (HTML Response)")
# print(f"DEBUG RAW: {line_str[:200]}...")
break
continue
if not full_text:
print("\n[-] No content parsed from stream.")
else:
print(f"\n[V] Success! Total characters: {len(full_text)}")
except Exception as e:
print(f"\n[-] Request failed: {e}")
if __name__ == "__main__":
test_p = "你好,请确认你的模型版本,并简单打个招呼。"
if len(sys.argv) > 1:
test_p = " ".join(sys.argv[1:])
test_chat(test_p)
Related skills
FAQ
What does grok-media-skill do?
grok-media-skill is a Claude Code skill for ai & agent building.
When should I use grok-media-skill?
When you need to helps with ai & agent building tasks during AI-assisted development., or when grok-media-skill is a claude code skill for ai & agent building.
What are the main capabilities?
grok-media-skill; AI & Agent Building; AI-coding skill.