#580 by GitHub stars

achimala/dream-loop

Build a game or app from a description so that a live screenshot matches a generated rendering. Use when the user says "dream loop" or asks for something built to a very high level of graphical fidelity.

History

Review weekly changes to SKILL.md before updating. Dates mark the weeks in which we observed each version; checks apply to the recorded commits.

View weekly changes

SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Network or broad shell → After Network or broad shell

9bddb901f7d0 → 9bddb901f7d0

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → 9bddb901f7d0

No earlier version was observed for comparison.

Compare on GitHub

View on GitHubAdd to my skills

Verified commit 9bddb901f7d071cfefdd21e264267c757177a9df

1.8kGitHub stars
44stars in 7 days
1skill in this repository
0commits in 30 days

Heat

6.2
  • Star growth, last 7 daysAhead of 93% of tracked repositories
  • Star growth, last 24 hoursAhead of 93% of tracked repositories
  • Rank movement, last 7 daysAhead of 55% of tracked repositories
  • Commits, last 30 daysAhead of 0% of tracked repositories
  • Accounts asking about it through MCP, last 7 daysNot available
  • Hot votes this weekAhead of 0% of tracked repositories

Heat never changes the order by stars, and sponsorship never touches it. How heat works

Stars over time

Sep 6, 2026Nov 6, 20261,810

Individual skills in this repository

How it works

dream-loop

When your agent uses it

Build a game or app from a description so that a live screenshot matches a generated rendering. Use when the user says "dream loop" or asks for something built to a very high level of graphical fidelity.

What it loads into context

Frontmatter

51 tokens

Always available to the agent

SKILL.md

621 tokens

When the skill is activated

Reference documents

4,689 tokens

Loaded on request

Token counts are estimates. Scripts run separately; they are not counted as reference context.

The playbook

  1. General
  2. The target image
  3. Time budget

Scripts executed separately

  • scripts/fal-batch.mjs
  • scripts/fal-batch.test.mjs
  • scripts/preview-server.py

Files

  • .gitignoreasset13 bytes
  • LICENSEasset1,070 bytes
  • README.mddoc2,182 bytes
  • SKILL.mdcore2,903 bytes
  • assets/vesper-preview.gifasset6,976,947 bytes
  • references/fal.mddoc5,318 bytes
  • references/plus-mode/assets-3d.mddoc3,315 bytes
  • references/plus-mode/workflow.mddoc2,282 bytes
  • references/pro-mode/assets-3d.mddoc3,151 bytes
  • references/pro-mode/workflow.mddoc4,462 bytes
  • scripts/fal-batch.mjsruns11,733 bytes
  • scripts/fal-batch.test.mjsruns9,124 bytes
  • scripts/preview-server.pyruns2,101 bytes
Read SKILL.md

# dream-loop

This is a process for you to autonomously build extremely impressive visuals, especially for 3D scenes (e.g. in a game or app).

Your first step is to determine which workflow to use:
- If the user told you to use the Plus or Pro workflow explicitly, that's your answer
- If not, check if the user is on a low or high tier coding subscription. "Low tier" means ChatGPT Plus or equivalent. "High tier" means ChatGPT Pro. For low-tier subscriptions, use the Plus workflow. For high-tier, use the Pro workflow.

Plus workflow: read [references/plus-mode/workflow.md](references/plus-mode/workflow.md)

Pro workflow: read [references/pro-mode/workflow.md](references/pro-mode/workflow.md)

Do not read both documents. They are not inter-compatible.
View the complete source on GitHub

Skills included

  • dream-loop

Repository facts

License
MIT
Created
Sep 7, 2026
Last pushed
Sep 9, 2026
Forks
180
Open issues
3
Project activity
Active

Rank over the last 12 weeks

Now #580 · best #485 · down 71 in 30 days

  1. #575 from Oct 29 to Oct 30
  2. #574 on Oct 31
  3. #576 on Nov 1
  4. #577 on Nov 2
  5. #579 from Nov 3 to Nov 4
  6. #580 since Nov 5
49 earlier periods
  1. #918 on Sep 6
  2. #926 on Sep 7
  3. #928 on Sep 8
  4. #883 on Sep 9
  5. #760 on Sep 10
  6. #685 on Sep 11
  7. #660 on Sep 12
  8. #640 on Sep 13
  9. #649 on Sep 14
  10. #536 on Sep 15
  11. #529 on Sep 16
  12. #521 from Sep 17 to Sep 18
  13. #505 on Sep 19
  14. #512 on Sep 20
  15. #508 on Sep 21
  16. #516 on Sep 22
  17. #508 on Sep 23
  18. #494 on Sep 24
  19. #493 on Sep 25
  20. #489 on Sep 26
  21. #508 from Sep 27 to Sep 28
  22. #521 on Sep 29
  23. #510 on Sep 30
  24. #504 on Oct 1
  25. #502 on Oct 2
  26. #491 on Oct 3
  27. #485 on Oct 4
  28. #492 on Oct 5
  29. #510 on Oct 6
  30. #509 on Oct 7
  31. #525 on Oct 8
  32. #522 on Oct 9
  33. #514 on Oct 10
  34. #512 on Oct 11
  35. #524 on Oct 12
  36. #521 on Oct 13
  37. #522 on Oct 14
  38. #519 on Oct 15
  39. #522 on Oct 16
  40. #512 on Oct 17
  41. #518 on Oct 18
  42. #531 on Oct 19
  43. #533 on Oct 20
  44. #541 on Oct 21
  45. #529 on Oct 22
  46. #524 on Oct 23
  47. #514 on Oct 24
  48. #565 on Oct 25
  49. #573 on Oct 28

Before you install

Network or broad shell

Automated signals, not a guarantee

Checked Nov 3, 2026

Show all 37 signals by file

README.md

  • Network accessline 3
    By [@anshuc](https://x.com/anshuc).
  • Network accessline 38
    [Try the live demo](https://dream-loop-demo.anshu.dev)

references/fal.md

  • Access to secretsline 3
    [Credential-related source omitted]
  • Network accessline 68
    Model inputs and outputs: [Tripo H3.1](https://fal.ai/models/tripo3d/h3.1/image-to-3d/api), [Trellis](https://fal.ai/models/fal-ai/trellis/api). Queue behavior: [Fal asynchronous inference](https://fal.ai/docs/documentation/model-apis/infer

scripts/fal-batch.mjs

  • Executable scriptline 1
    #!/usr/bin/env node
  • Access to secretsline 55
    [Credential-related source omitted]
  • Access to secretsline 71
    [Credential-related source omitted]
  • Network accessline 106
    const mime = imageMime(bytes);           job.state = 'submitting'; job.submitted_at = new Date().toISOString(); delete job.error; delete job.error_detail; delete job.error_stage; delete job.connection_error; save();           const result =
  • Network accessline 107
    job.state = 'submitting'; job.submitted_at = new Date().toISOString(); delete job.error; delete job.error_detail; delete job.error_stage; delete job.connection_error; save();           const result = await request(`https://queue.fal.run/${j
  • Network accessline 108
    const result = await request(`https://queue.fal.run/${job.endpoint}`, {

scripts/fal-batch.test.mjs

  • Executable scriptline 1
    Executable file
  • Network accessline 32
    assert.match(JSON.parse(options.body).image_url, /^data:image\/png;base64,.+/);       await new Promise(resolve => setTimeout(resolve, 10)); active--;       return json({ request_id: `r${i}`, status: 'IN_QUEUE', status_url: `https://queue.f
  • Network accessline 33
    await new Promise(resolve => setTimeout(resolve, 10)); active--;       return json({ request_id: `r${i}`, status: 'IN_QUEUE', status_url: `https://queue.fal.run/returned/r${i}/status`, response_url: `https://queue.fal.run/returned/r${i}/res
  • Network accessline 34
    return json({ request_id: `r${i}`, status: 'IN_QUEUE', status_url: `https://queue.fal.run/returned/r${i}/status`, response_url: `https://queue.fal.run/returned/r${i}/result` });
  • Network accessline 35
    }     if (url.endsWith('/status')) return json({ status: 'COMPLETED' });     if (url.endsWith('/result')) return json({ model_mesh: { url: 'https://files.example/model.glb' } });
  • Network accessline 36
    if (url.endsWith('/status')) return json({ status: 'COMPLETED' });     if (url.endsWith('/result')) return json({ model_mesh: { url: 'https://files.example/model.glb' } });     assert.equal(url, 'https://files.example/model.glb');
  • Network accessline 37
    if (url.endsWith('/result')) return json({ model_mesh: { url: 'https://files.example/model.glb' } });     assert.equal(url, 'https://files.example/model.glb');     assert.equal(options.headers, undefined, 'download must not receive Fal cred
  • Network accessline 38
    assert.equal(url, 'https://files.example/model.glb');     assert.equal(options.headers, undefined, 'download must not receive Fal credentials');     return new Response(glb());
  • Network accessline 75
    await runBatch('submit', f.filename, { key: 'test-only-key', fetchFn: async () => {     called = true;     return json({ request_id: 'retried', status_url: 'https://queue.fal.run/status', response_url: 'https://queue.fal.run/result' });
  • Network accessline 76
    called = true;     return json({ request_id: 'retried', status_url: 'https://queue.fal.run/status', response_url: 'https://queue.fal.run/result' });   } });
  • Network accessline 77
    return json({ request_id: 'retried', status_url: 'https://queue.fal.run/status', response_url: 'https://queue.fal.run/result' });
  • Network accessline 82
    test('404 results remain unresolved without overwriting an output with an error page', async t => {   const f = fixture(t, 1), data = f.read();   Object.assign(data.jobs[0], { request_id: 'r1', status_url: 'https://queue.fal.run/status', re
  • Network accessline 83
    const f = fixture(t, 1), data = f.read();   Object.assign(data.jobs[0], { request_id: 'r1', status_url: 'https://queue.fal.run/status', response_url: 'https://queue.fal.run/result' });   fs.writeFileSync(f.filename, JSON.stringify(data));
  • Network accessline 84
    Object.assign(data.jobs[0], { request_id: 'r1', status_url: 'https://queue.fal.run/status', response_url: 'https://queue.fal.run/result' });
  • Network accessline 116
    for (const value of [key, 'DO NOT SAVE THIS IMAGE', 'base64,AAAA']) assert.equal(saved.includes(value), false);   let calls = 0;   await runBatch('submit', f.filename, { key, fetchFn: async () => { calls++; return json({request_id:'fixed',s
  • Network accessline 117
    let calls = 0;   await runBatch('submit', f.filename, { key, fetchFn: async () => { calls++; return json({request_id:'fixed',status_url:'https://queue.fal.run/status',response_url:'https://queue.fal.run/result'}); } });   assert.equal(calls
  • Network accessline 118
    await runBatch('submit', f.filename, { key, fetchFn: async () => { calls++; return json({request_id:'fixed',status_url:'https://queue.fal.run/status',response_url:'https://queue.fal.run/result'}); } });
  • Network accessline 122
    test('failed completed results retain their request identity and explain the failure without resubmitting', async t => {   const f = fixture(t, 1), data = f.read();   Object.assign(data.jobs[0], { endpoint:'fal-ai/trellis/image-to-3d', requ
  • Network accessline 123
    const f = fixture(t, 1), data = f.read();   Object.assign(data.jobs[0], { endpoint:'fal-ai/trellis/image-to-3d', request_id:'accepted', status_url:'https://queue.fal.run/status',response_url:'https://queue.fal.run/result' });   fs.writeFile
  • Network accessline 124
    Object.assign(data.jobs[0], { endpoint:'fal-ai/trellis/image-to-3d', request_id:'accepted', status_url:'https://queue.fal.run/status',response_url:'https://queue.fal.run/result' });
  • Network accessline 140
    assert.equal(rows[0].request_id, 'partial-accepted'); assert.equal(rows[0].state, 'submission-uncertain');   const data=f.read();delete data.jobs[0].request_id;   Object.assign(data.jobs[0], {state:'IN_QUEUE',response_url:'https://queue.fal
  • Network accessline 141
    const data=f.read();delete data.jobs[0].request_id;   Object.assign(data.jobs[0], {state:'IN_QUEUE',response_url:'https://queue.fal.run/result'});   fs.writeFileSync(f.filename, JSON.stringify(data));
  • Network accessline 142
    Object.assign(data.jobs[0], {state:'IN_QUEUE',response_url:'https://queue.fal.run/result'});

scripts/preview-server.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Network accessline 43
    args = parser.parse_args()     handler = partial(Handler, directory=str(Path(args.directory).resolve()))     print(f"Preview http://127.0.0.1:{args.port}; POST PNG to /__capture", flush=True)
  • Network accessline 44
    handler = partial(Handler, directory=str(Path(args.directory).resolve()))     print(f"Preview http://127.0.0.1:{args.port}; POST PNG to /__capture", flush=True)     ThreadingHTTPServer(("127.0.0.1", args.port), handler).serve_forever()
  • Network accessline 45
    print(f"Preview http://127.0.0.1:{args.port}; POST PNG to /__capture", flush=True)

How the signals fit together

Facts from a static read of the files at the pinned commit. They describe what the code does, not why.

Some files could not be read; the facts below still hold.

No combined signals at this commit.

Works with

Agent compatibility, from the files in this repository
AgentStatusEvidenceInstall to
Claude CodeCompatibleStandard SKILL.md SKILL.md.claude/skills/<skill-name>/
CodexCompatibleStandard SKILL.md SKILL.md.agents/skills/<skill-name>/
CursorCompatibleStandard SKILL.md SKILL.md.cursor/skills/<skill-name>/
Gemini CLICompatibleStandard SKILL.md SKILL.md.gemini/skills/<skill-name>/
GitHub CopilotCompatibleStandard SKILL.md SKILL.md.github/skills/<skill-name>/
OpenCodeCompatibleStandard SKILL.md SKILL.md.opencode/skills/<skill-name>/
  • Native The repository ships a manifest, folder or frontmatter field for this agent.
  • Compatible A standard SKILL.md that this agent can read.
  • Unknown No evidence either way.

Derived automatically from paths, manifests and frontmatter. Not tested on each agent.

Explore alternatives and comparisons

Add this badge to your README

It updates every night and links to this page.

achimala/dream-loop: #580 on hotskills, 1.8k stars

[![achimala/dream-loop on hotskills](https://hotskills.dev/badge/achimala-dream-loop.svg)](https://hotskills.dev/skill/achimala-dream-loop/)