File size: 36,440 Bytes
eafbe80
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1" />
  <title>Echo-Memory | Echo Team</title>
  <meta
    name="description"
    content="Echo-Memory: A controlled study of memory mechanisms in action-conditioned world models."
  />
  <link rel="preconnect" href="https://fonts.googleapis.com" />
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
  <link
    href="https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@400;500;600;700&family=IBM+Plex+Sans:wght@400;500;600;700&family=JetBrains+Mono:wght@400;600&display=swap"
    rel="stylesheet"
  />
  <link rel="stylesheet" href="style.css?v=dev-i18n-v1" />
</head>
<body>
  <div class="scroll-progress" aria-hidden="true"><span class="scroll-progress__bar"></span></div>
  <!-- arXiv: https://arxiv.org/abs/2606.09803 -->
  <div class="page-shell">
    <div class="ambient-bg" aria-hidden="true">
      <div class="ambient-orb ambient-orb--rose"></div>
      <div class="ambient-orb ambient-orb--blush"></div>
      <div class="ambient-orb ambient-orb--pearl"></div>
      <div class="ambient-shimmer"></div>
    </div>
    <header class="top-nav" role="banner">
      <div class="container top-nav__inner">
        <a class="brand" href="#hero">
          <span class="brand-name">Echo-Memory</span>
          <span class="brand-team">Echo Team</span>
        </a>
        <nav class="nav-links" aria-label="Sections">
          <a class="nav-link" href="#hero" data-nav="hero">Home</a>
          <a class="nav-link" href="#overview" data-nav="overview">Overview</a>
          <a class="nav-link" href="#design" data-nav="design">Design</a>
          <a class="nav-link" href="#checkpoints" data-nav="checkpoints">Checkpoints</a>
          <a class="nav-link" href="#evaluation" data-nav="evaluation">Eval</a>
          <a class="nav-link" href="#evidence" data-nav="evidence">Evidence</a>
          <a class="nav-link" href="#findings" data-nav="findings">Results</a>
          <a class="nav-link" href="#updates" data-nav="updates">Updates</a>
          <a class="nav-link" href="#bibtex" data-nav="bibtex">BibTeX</a>
        </nav>
        <div class="nav-actions">
          <a class="action-btn action-btn--ghost" href="developer.html" data-i18n="nav.developer">Developer Guide</a>
          <button type="button" class="lang-toggle" id="lang-toggle" data-i18n-attr="aria-label:lang.switch" aria-label="Switch language">
            <span data-lang-current>EN</span> / <span data-lang-alt>中文</span>
          </button>
          <a
            class="action-btn"
            href="https://github.com/Echo-Team-Joy-Future-Academy-JD/Echo-Memory"
            target="_blank"
            rel="noopener noreferrer"
            data-i18n="nav.github"
          >GitHub</a>
          <button
            type="button"
            class="nav-toggle"
            aria-expanded="false"
            aria-controls="nav-menu-mobile"
            id="nav-toggle"
          >
            <span class="sr-only">Menu</span>
            <span></span><span></span><span></span>
          </button>
        </div>
      </div>
      <div class="nav-mobile container" id="nav-menu-mobile" hidden>
        <a class="nav-link" href="#hero" data-nav="hero">Home</a>
        <a class="nav-link" href="#overview" data-nav="overview">Overview</a>
        <a class="nav-link" href="#design" data-nav="design">Design</a>
        <a class="nav-link" href="#checkpoints" data-nav="checkpoints">Checkpoints</a>
        <a class="nav-link" href="#evaluation" data-nav="evaluation">Eval</a>
        <a class="nav-link" href="#evidence" data-nav="evidence">Evidence</a>
        <a class="nav-link" href="#findings" data-nav="findings">Results</a>
        <a class="nav-link" href="#updates" data-nav="updates">Updates</a>
        <a class="nav-link" href="developer.html" data-i18n="nav.developer">Developer Guide</a>
        <a class="nav-link" href="#bibtex" data-nav="bibtex">BibTeX</a>
      </div>
    </header>

    <aside class="slide-dots" aria-label="Section navigation">
      <button type="button" class="is-active" data-slide="hero" data-label="Home" aria-label="Home"></button>
      <button type="button" data-slide="overview" data-label="Overview" aria-label="Overview"></button>
      <button type="button" data-slide="design" data-label="Design" aria-label="Design"></button>
      <button type="button" data-slide="checkpoints" data-label="Checkpoints" aria-label="Checkpoints"></button>
      <button type="button" data-slide="evaluation" data-label="Eval" aria-label="Evaluation"></button>
      <button type="button" data-slide="evidence" data-label="Evidence" aria-label="Evidence"></button>
      <button type="button" data-slide="findings" data-label="Results" aria-label="Results"></button>
      <button type="button" data-slide="updates" data-label="Updates" aria-label="Updates"></button>
      <button type="button" data-slide="bibtex" data-label="BibTeX" aria-label="BibTeX"></button>
    </aside>

    <button type="button" class="back-top" id="back-top" data-i18n-attr="aria-label:backtop" aria-label="Back to top" hidden>
      <svg width="18" height="18" viewBox="0 0 24 24" fill="none" aria-hidden="true">
        <path d="M12 19V5M12 5l-6 6M12 5l6 6" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
      </svg>
    </button>

    <div class="lightbox" id="lightbox" hidden role="dialog" aria-modal="true" data-i18n-attr="aria-label:lightbox.label" aria-label="Expanded figure">
      <button type="button" class="lightbox__close" data-i18n-attr="aria-label:lightbox.close" aria-label="Close">&times;</button>
      <figure class="lightbox__inner">
        <img src="" alt="" id="lightbox-img" />
        <figcaption id="lightbox-caption"></figcaption>
      </figure>
    </div>

    <main id="main-content">
      <section id="hero" class="section section--compact reveal" data-section="hero">
        <div class="container hero hero--single">
          <div>
            <div class="hero-badge" data-i18n="hero.badge">Echo Team · Joy Future Academy, JD · June 2026 · CC BY 4.0</div>
            <h1 class="hero-title">
              <span class="hero-highlight">Echo-Memory</span>
              <br />
              <span data-i18n="hero.title.line2">A Controlled Study of Memory in Action World Models</span>
            </h1>
            <p class="hero-subtitle" data-i18n-html="hero.subtitle">
              When the camera leaves and returns, which memory keeps the <strong>same world</strong>
              instead of a plausible but different scene?
            </p>
            <div class="hero-cta-group">
              <a
                class="cta cta--primary"
                href="https://arxiv.org/abs/2606.09803"
                target="_blank"
                rel="noopener noreferrer"
                data-i18n="hero.cta.paper"
              >Paper</a>
              <a
                class="cta cta--secondary"
                href="https://arxiv.org/pdf/2606.09803"
                target="_blank"
                rel="noopener noreferrer"
                data-i18n="hero.cta.pdf"
              >PDF</a>
              <a
                class="cta cta--secondary"
                href="https://huggingface.co/Echo-Team/Echo-Memory"
                target="_blank"
                rel="noopener noreferrer"
                data-i18n="hero.cta.ckpt"
              >Checkpoints</a>
              <a
                class="cta cta--secondary"
                href="https://github.com/Echo-Team-Joy-Future-Academy-JD/Echo-Memory"
                target="_blank"
                rel="noopener noreferrer"
                data-i18n="hero.cta.code"
              >Code</a>
            </div>

            <div class="metrics-grid metrics-grid--duo">
              <a
                class="metric-card"
                href="https://github.com/Echo-Team-Joy-Future-Academy-JD/Echo-Memory/stargazers"
                target="_blank"
                rel="noopener noreferrer"
                data-badge-url="https://img.shields.io/github/stars/Echo-Team-Joy-Future-Academy-JD/Echo-Memory.json"
              >
                <span class="metric-label" data-i18n="hero.metric.stars">GitHub Stars</span>
                <strong class="metric-value" data-metric-value data-fallback="—"></strong>
              </a>
              <a
                class="metric-card"
                href="https://github.com/Echo-Team-Joy-Future-Academy-JD/Echo-Memory/network/members"
                target="_blank"
                rel="noopener noreferrer"
                data-badge-url="https://img.shields.io/github/forks/Echo-Team-Joy-Future-Academy-JD/Echo-Memory.json"
              >
                <span class="metric-label" data-i18n="hero.metric.forks">Forks</span>
                <strong class="metric-value" data-metric-value data-fallback="—"></strong>
              </a>
            </div>

            <p class="hero-note" data-i18n-html="hero.note">
              Controlled memory ablations on a shared <strong>Wan</strong> action-to-video stack —
              reproducible rows, evaluation scripts, and qualitative revisit panels.
            </p>

            <details class="authors-fold">
              <summary data-i18n="hero.authors.summary">Authors &amp; affiliations</summary>
              <p class="authors">
                Wayne King, Zeyue Xue, Yuxuan Bian, Jie Huang, Haoran Li, Yaowei Li,
                Yaofeng Su, Yuming Li, Haoyu Wang, Shiyi Zhang, Songchun Zhang,
                Yuwei Niu, Sihan Xu, Junhao Zhuang, Haoyang Huang, Nan Duan
              </p>
              <p class="affiliations" data-i18n="hero.affiliations">
                HKU · Joy Future Academy, JD · CUHK · PKU · Fudan · Tsinghua · HKUST · UMich
              </p>
            </details>
          </div>
        </div>
      </section>

      <section id="overview" class="section reveal" data-section="overview">
        <div class="container">
          <p class="section-kicker" data-i18n="overview.kicker">01 · Overview</p>
          <h2 class="section-title" data-i18n="overview.title">One backbone, one protocol — only memory changes.</h2>
          <p class="section-lead" data-i18n-html="overview.lead">
            Echo-Memory holds the video backbone, training recipe, and data protocol fixed, and
            swaps only the memory module. The goal is to separate <strong>replay fidelity</strong>
            from <strong>return memory</strong> when the camera leaves and comes back to the same place.
          </p>
          <ul class="bullet-list">
            <li data-i18n-html="overview.b1"><strong>Shared stack</strong> — chunk-wise action-conditioned world generation on Wan.</li>
            <li data-i18n-html="overview.b2"><strong>Controlled variable</strong> — Context, Compression, Spatial, or State-Space memory.</li>
            <li data-i18n-html="overview.b3"><strong>Three probes</strong> — replay metrics, in-domain 180° loop, open-domain edited return.</li>
            <li data-i18n-html="overview.b4"><strong>Release</strong> — ablation scripts, GT replay, revisit assets, and paper-aligned figures.</li>
          </ul>
          <figure class="section-figure" data-zoomable>
            <img src="assets/figure_1_abs_framework.png?v=fig1-crop" data-i18n-attr="alt:overview.fig.alt" alt="Echo-Memory framework overview" />
            <figcaption data-i18n-html="overview.fig.cap">Controlled memory study over chunk-wise action-world generation. <span class="zoom-hint">Click to expand</span></figcaption>
          </figure>
        </div>
      </section>

      <section id="design" class="section reveal" data-section="design">
        <div class="container">
          <p class="section-kicker" data-i18n="design.kicker">02 · Memory Design</p>
          <h2 class="section-title" data-i18n="design.title">Context · Compression · Spatial · State-Space</h2>
          <p class="section-lead" data-i18n="design.lead">
            All variants plug into the same write–read interface; we only change what is stored and how
            history is retrieved. A no-memory I2V floor re-generates from the first frame as a lower bound.
          </p>
          <div class="feature-grid">
            <article class="card card--accent" data-accent="context">
              <div class="card-icon" aria-hidden="true">
                <svg viewBox="0 0 24 24" fill="none"><rect x="3" y="5" width="18" height="14" rx="2" stroke="currentColor" stroke-width="1.6"/><path d="M7 9h10M7 13h6" stroke="currentColor" stroke-width="1.6" stroke-linecap="round"/></svg>
              </div>
              <h3 data-i18n="design.context.title">Context</h3>
              <p data-i18n="design.context.body">Raw recent frames at K = 1, 5, or 20 chunks — tests whether longer windows alone stop drift.</p>
            </article>
            <article class="card card--accent" data-accent="compression">
              <div class="card-icon" aria-hidden="true">
                <svg viewBox="0 0 24 24" fill="none"><path d="M12 3l8 4.5v9L12 21l-8-4.5v-9L12 3z" stroke="currentColor" stroke-width="1.6"/><path d="M12 12l8-4.5M12 12v9M12 12L4 7.5" stroke="currentColor" stroke-width="1.6"/></svg>
              </div>
              <h3 data-i18n="design.compression.title">Compression</h3>
              <p data-i18n="design.compression.body">Learned compact tokens at ratio r = 4 — history without growing raw-frame storage.</p>
            </article>
            <article class="card card--accent" data-accent="spatial">
              <div class="card-icon" aria-hidden="true">
                <svg viewBox="0 0 24 24" fill="none"><path d="M4 8l8-4 8 4v8l-8 4-8-4V8z" stroke="currentColor" stroke-width="1.6"/><path d="M12 4v16M4 8l8 4 8-4" stroke="currentColor" stroke-width="1.6"/></svg>
              </div>
              <h3 data-i18n="design.spatial.title">Spatial</h3>
              <p data-i18n="design.spatial.body">Explicit spatial read/write state — targets layout, object pose, and viewpoint carry.</p>
            </article>
            <article class="card card--accent" data-accent="ssm">
              <div class="card-icon" aria-hidden="true">
                <svg viewBox="0 0 24 24" fill="none"><path d="M5 12a7 7 0 0114 0" stroke="currentColor" stroke-width="1.6" stroke-linecap="round"/><path d="M8 12h8M16 9l2 3-2 3M8 9l-2 3 2 3" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"/></svg>
              </div>
              <h3 data-i18n="design.ssm.title">State-Space</h3>
              <p data-i18n="design.ssm.body">Block-wise SSM updates — recurrent carry beyond short context windows on revisit.</p>
            </article>
          </div>
          <figure class="section-figure" data-zoomable>
            <img src="assets/figure_2_mem_overview.png" data-i18n-attr="alt:design.fig.alt" alt="Memory design matrix" />
            <figcaption data-i18n-html="design.fig.cap">Four memory families under a shared write–read interface. <span class="zoom-hint">Click to expand</span></figcaption>
          </figure>
        </div>
      </section>

      <section id="checkpoints" class="section reveal" data-section="checkpoints">
        <div class="container">
          <p class="section-kicker" data-i18n="ckpt.kicker">03 · Checkpoints</p>
          <h2 class="section-title" data-i18n="ckpt.title">Paper baselines on Hugging Face</h2>
          <p class="section-lead" data-i18n-html="ckpt.lead">
            Wan 2.1 1.3B memory rows — <strong>epoch-0</strong>, <strong>30,000 steps</strong>, static in-domain pool.
            Released weights:
            <a href="https://huggingface.co/Echo-Team/Echo-Memory" target="_blank" rel="noopener noreferrer"><strong>Echo-Team/Echo-Memory</strong></a>
          </p>
          <div class="table-wrap">
            <table class="ckpt-table">
              <thead>
                <tr>
                  <th data-i18n="ckpt.th.family">Family</th>
                  <th data-i18n="ckpt.th.row">Paper row</th>
                  <th data-i18n="ckpt.th.path">HF path</th>
                  <th data-i18n="ckpt.th.steps">Steps</th>
                </tr>
              </thead>
              <tbody>
                <tr><td>Raw context</td><td>Context K=1</td><td><code>context_k1/epoch-0.safetensors</code></td><td>30,000</td></tr>
                <tr><td>Raw context</td><td>Context K=20</td><td>TODO</td><td>TODO</td></tr>
                <tr><td>Spatial</td><td>Spatial Memory</td><td>TODO</td><td>TODO</td></tr>
                <tr><td>State-space</td><td>Block-wise SSM</td><td>TODO</td><td>TODO</td></tr>
                <tr><td>State-space</td><td>Legacy Hybrid</td><td>TODO</td><td>TODO</td></tr>
                <tr><td>Spatial</td><td>concat text (abl.)</td><td>TODO</td><td>TODO</td></tr>
                <tr><td>Spatial</td><td>inject none (abl.)</td><td>TODO</td><td>TODO</td></tr>
                <tr><td>Spatial</td><td>cross-attn t32 (abl.)</td><td>TODO</td><td>TODO</td></tr>
                <tr><td>State-space</td><td>SSM ctx1/e4/h21</td><td>TODO</td><td>TODO</td></tr>
                <tr><td>State-space</td><td>SSM ctx5/e1/h21</td><td>TODO</td><td>TODO</td></tr>
                <tr><td>State-space</td><td>SSM ctx5/e4/h81</td><td>TODO</td><td>TODO</td></tr>
              </tbody>
            </table>
          </div>
          <div class="code-block-wrap">
            <p class="code-block-label" data-i18n="ckpt.label.download">Download</p>
            <pre class="code-block"><code>huggingface-cli download Echo-Team/Echo-Memory context_k1/epoch-0.safetensors --local-dir ./ckpts</code></pre>
          </div>
          <div class="code-block-wrap">
            <p class="code-block-label" data-i18n="ckpt.label.eval">In-domain eval (Echo-Memory repo)</p>
            <pre class="code-block"><code>export WAN_BASE_MODEL=/path/to/Wan2.1-T2V-1.3B
export DATASET_BASE_PATH=data/Context-as-Memory-Dataset
export CKPT=./ckpts/context_k1/epoch-0.safetensors
bash eval/v2/run_static_consistency_loop_and_revisit.sh</code></pre>
          </div>
          <p class="section-note" data-i18n-html="ckpt.note">
            Keep the row folder in <code>CKPT</code><code>env/memory_baseline_runtime.py</code> infers memory flags from the path.
            Full index:
            <a href="https://github.com/Echo-Team-Joy-Future-Academy-JD/Echo-Memory/blob/main/doc/checkpoints.md" target="_blank" rel="noopener noreferrer">doc/checkpoints.md</a>.
          </p>
        </div>
      </section>

      <section id="evaluation" class="section section--center reveal" data-section="evaluation">
        <div class="container">
          <p class="section-kicker" data-i18n="eval.kicker">04 · Evaluation</p>
          <h2 class="section-title" data-i18n="eval.title">Replay · In-domain revisit · Open-domain return</h2>
          <p class="section-lead" data-i18n-html="eval.lead">
            Each branch asks a different question: Can the model reconstruct the past? Can it close a loop
            in-domain? After an edited first frame, does it return to the <strong>same world</strong>?
          </p>
          <div class="feature-grid feature-grid--three">
            <article class="card">
              <h3 data-i18n="eval.replay.title">Replay</h3>
              <p data-i18n="eval.replay.body">PSNR, SSIM, LPIPS on chunk-wise reconstruction — measures short-horizon pixel fidelity.</p>
            </article>
            <article class="card">
              <h3 data-i18n="eval.indomain.title">In-domain</h3>
              <p data-i18n="eval.indomain.body">180° trajectory loop closure with VLM-assisted scoring on held layouts.</p>
            </article>
            <article class="card">
              <h3 data-i18n="eval.opendomain.title">Open-domain</h3>
              <p data-i18n="eval.opendomain.body">Edited first frames and 45° return probes — stresses object identity and scene persistence.</p>
            </article>
            <article class="card">
              <h3 data-i18n="eval.dynamic.title">Dynamic SpatialVID</h3>
              <p data-i18n="eval.dynamic.body">Training and inference wrappers are public; the dynamic eval protocol is TODO.</p>
            </article>
          </div>
          <figure class="section-figure" data-zoomable>
            <img src="assets/figure_3_mem_eval.png" data-i18n-attr="alt:eval.fig.alt" alt="Three-branch evaluation summary" />
            <figcaption data-i18n-html="eval.fig.cap">Replay health vs. return memory under the same stack. <span class="zoom-hint">Click to expand</span></figcaption>
          </figure>
        </div>
      </section>

      <section id="evidence" class="section section--center reveal" data-section="evidence">
        <div class="container">
          <p class="section-kicker" data-i18n="evidence.kicker">05 · Qualitative Evidence</p>
          <h2 class="section-title" data-i18n="evidence.title">Return probes expose identity drift.</h2>
          <p class="section-lead" data-i18n-html="evidence.lead">
            Qualitative panels follow a simple diagnostic: <strong>first frame → leave the view → revisit tail</strong>.
            We compare whether memory restores the same object, pose, background, and camera geometry —
            not merely a plausible new scene.
          </p>
          <div class="qual-viewer" data-qual-viewer>
            <figure class="qual-stage" data-zoomable>
              <div class="qual-stage__media">
                <img
                  data-qual-image
                  class="is-active"
                  src="assets/representative_memory_results.png"
                  alt="Representative memory comparisons"
                />
              </div>
              <figcaption data-qual-caption data-i18n-html="evidence.cap1">Representative memory comparisons across variants. <span class="zoom-hint">Click to expand</span></figcaption>
            </figure>
            <div class="qual-chips" role="tablist" aria-label="Evidence panels">
              <button
                class="qual-chip is-active"
                type="button"
                role="tab"
                aria-selected="true"
                data-src="assets/representative_memory_results.png"
                data-alt="Representative memory comparisons"
                data-caption-key="evidence.cap1"
                data-caption="Representative memory comparisons across variants."
              >Memory Results</button>
              <button
                class="qual-chip"
                type="button"
                role="tab"
                aria-selected="false"
                data-src="assets/representative_sweep_panel.png"
                data-alt="Open-domain return sweep"
                data-caption="Open-domain return sweep across the design matrix."
              >Open-Domain Sweep</button>
              <button
                class="qual-chip"
                type="button"
                role="tab"
                aria-selected="false"
                data-src="assets/open_domain_revisit_panel.png"
                data-alt="Edited first frames"
                data-caption="Edited first frames for open-domain return probes."
              >Identity Anchors</button>
            </div>
          </div>
          <div class="demo-grid" aria-label="Static and SpatialVID replay demos">
            <h3 class="demo-grid__label">Static Replay</h3>
            <figure>
              <img src="assets/readme_previews/context_k1_replay_gt.gif" alt="Static Context K=1 replay">
              <figcaption>Context K=1</figcaption>
            </figure>
            <figure>
              <img src="assets/readme_previews/context_k5_replay_gt.gif" alt="Static Context K=5 replay">
              <figcaption>Context K=5</figcaption>
            </figure>
            <figure>
              <img src="assets/readme_previews/framepack_len_r4_replay_gt.gif" alt="Static Compression r=4 replay">
              <figcaption>Compression r = 4</figcaption>
            </figure>
            <figure>
              <img src="assets/readme_previews/spatial_memory_replay_gt.gif" alt="Static Spatial Memory replay">
              <figcaption>Spatial Memory</figcaption>
            </figure>
            <figure>
              <img src="assets/readme_previews/ssm_legacy_replay_gt.gif" alt="Static legacy VideoSSM replay">
              <figcaption>Legacy Hybrid</figcaption>
            </figure>
            <figure>
              <img src="assets/readme_previews/ssm_blockwise_replay_gt.gif" alt="Static Block-wise SSM replay">
              <figcaption>Block-wise SSM</figcaption>
            </figure>
            <h3 class="demo-grid__label">SpatialVID Replay</h3>
            <figure>
              <img src="assets/readme_previews/dyn_context_k1_replay.gif" alt="Dynamic Context K=1 replay">
              <figcaption>Context K=1</figcaption>
            </figure>
            <figure>
              <img src="assets/readme_previews/dyn_context_k5_replay.gif" alt="Dynamic Context K=5 replay">
              <figcaption>Context K=5</figcaption>
            </figure>
            <figure>
              <img src="assets/readme_previews/dyn_context_k20_replay.gif" alt="Dynamic Context K=20 replay">
              <figcaption>Context K=20</figcaption>
            </figure>
            <figure>
              <img src="assets/readme_previews/dyn_spatial_memory_replay.gif" alt="Dynamic Spatial Memory replay">
              <figcaption>Spatial Memory</figcaption>
            </figure>
            <figure>
              <img src="assets/readme_previews/dyn_ssm_legacy_replay.gif" alt="Dynamic legacy VideoSSM replay">
              <figcaption>Legacy Hybrid</figcaption>
            </figure>
            <figure>
              <img src="assets/readme_previews/dyn_ssm_blockwise_replay.gif" alt="Dynamic Block-wise SSM replay">
              <figcaption>Block-wise SSM</figcaption>
            </figure>
          </div>
          <p class="section-note" data-i18n="evidence.dynamic.note">
            Dynamic previews use one randomly selected training scene replayed with the same first frame, prompt, and GT camera trajectory across all six rows.
          </p>
        </div>
      </section>

      <section id="findings" class="section section--center reveal" data-section="findings">
        <div class="container">
          <p class="section-kicker" data-i18n="findings.kicker">06 · Main Conclusions</p>
          <h2 class="section-title" data-i18n="findings.title">Replay quality ≠ memory quality.</h2>
          <p class="section-lead" data-i18n="findings.lead">
            Replay metrics and return probes do not always agree — a model can look sharp on reconstruction
            yet fail when the camera returns. Rankings reorder once identity under revisit is measured.
          </p>
          <ul class="bullet-list bullet-list--center">
            <li data-i18n-html="findings.b1"><strong>Raw context</strong> — more history helps open-domain return more than replay alone.</li>
            <li data-i18n-html="findings.b2"><strong>Compression</strong> — compact tokens can preserve replay while losing identity on return.</li>
            <li data-i18n-html="findings.b3"><strong>Spatial vs. SSM</strong> — explicit state and block-wise SSM trade off layout carry and long-horizon stability.</li>
            <li data-i18n-html="findings.b4"><strong>Takeaway</strong> — treat replay as a health check, not the final memory benchmark.</li>
          </ul>
          <figure class="section-figure" data-zoomable>
            <img src="assets/replay_revisit_metric_alignment.png" alt="Replay vs revisit metrics" />
            <figcaption data-i18n-html="findings.fig.cap">Rank shift from replay to return — replay is not the final memory score. <span class="zoom-hint">Click to expand</span></figcaption>
          </figure>
        </div>
      </section>

      <section id="updates" class="section reveal" data-section="updates">
        <div class="container">
          <p class="section-kicker" data-i18n="updates.kicker">07 · News &amp; Roadmap</p>
          <h2 class="section-title" data-i18n="updates.title">Release notes and next steps.</h2>

          <div class="updates-grid">
            <div class="updates-panel">
              <h3 class="updates-heading" data-i18n="updates.news">News</h3>
              <ul class="news-feed">
                <li class="news-item">
                  <time datetime="2026-06-13">2026/06/13</time>
                  <p data-i18n-html="updates.news0">
                    SpatialVID support added: dynamic training/inference recipes, 5-second first-chunk replay previews, and dynamic eval TODO.
                  </p>
                </li>
                <li class="news-item">
                  <time datetime="2026-06-06">2026/06/06</time>
                  <p data-i18n-html="updates.news1">
                    Echo-Memory released: paper, project page, public code, replay/revisit eval assets, and baseline checkpoints.
                  </p>
                </li>
              </ul>
            </div>

            <div class="updates-panel">
              <h3 class="updates-heading" data-i18n="updates.roadmap">Roadmap</h3>
              <div class="todo-groups">
                <article class="todo-group">
                  <h4 data-i18n="updates.models">Models</h4>
                  <ul class="todo-list">
                    <li class="is-done">
                      <span class="todo-check is-done" aria-hidden="true"></span>
                      <span data-i18n-html="updates.rm1"><strong>Wan 2.1 1.3B</strong> backbone and training recipes</span>
                    </li>
                    <li class="is-done">
                      <span class="todo-check is-done" aria-hidden="true"></span>
                      <span data-i18n="updates.rm2">Four memory families — Context, Compression, Spatial, State-Space</span>
                    </li>
                    <li class="is-done">
                      <span class="todo-check is-done" aria-hidden="true"></span>
                      <span data-i18n-html="updates.rm3"><strong>Dynamic training pool</strong> — SpatialVID subset export &amp; settings</span>
                    </li>
                    <li class="is-done">
                      <span class="todo-check is-done" aria-hidden="true"></span>
                      <span data-i18n-html="updates.rm4"><strong>Paper checkpoints</strong><a href="https://huggingface.co/Echo-Team/Echo-Memory" target="_blank" rel="noopener noreferrer">Echo-Team/Echo-Memory</a></span>
                    </li>
                    <li>
                      <span class="todo-check" aria-hidden="true"></span>
                      <span data-i18n-html="updates.rm5"><strong>Wan 2.2</strong> + multi-scale <strong>5B / 14B</strong></span>
                    </li>
                  </ul>
                </article>
                <article class="todo-group">
                  <h4 data-i18n="updates.eval">Eval</h4>
                  <ul class="todo-list">
                    <li>
                      <span class="todo-check" aria-hidden="true"></span>
                      <span data-i18n-html="updates.re1"><strong>Dynamic eval</strong> beyond static replay/revisit</span>
                    </li>
                    <li>
                      <span class="todo-check" aria-hidden="true"></span>
                      <span data-i18n="updates.re2">More revisit probes and scoring presets</span>
                    </li>
                  </ul>
                </article>
              </div>
            </div>

            <div class="updates-panel community-panel">
              <h3 class="updates-heading" data-i18n="community.title">Community</h3>
              <p data-i18n="community.lead">Join the Echo-Memory WeChat group for release updates, checkpoint questions, and maintainer coordination.</p>
              <figure class="wechat-qr">
                <img
                  class="wechat-qr__photo"
                  src="assets/wechat_group_qrcode.jpg?v=20260701"
                  width="1166"
                  height="1640"
                  alt="Echo-Memory WeChat group QR code"
                  data-i18n-attr="alt:community.qr.alt"
                />
                <figcaption data-i18n="community.qr.caption">Echo-Memory 交流群 · scan to join (QR refreshes periodically)</figcaption>
              </figure>
            </div>
          </div>
        </div>
      </section>

      <section id="bibtex" class="section reveal" data-section="bibtex">
        <div class="container">
          <p class="section-kicker" data-i18n="bibtex.kicker">08 · Citation</p>
          <h2 class="section-title" data-i18n="bibtex.title">BibTeX</h2>
          <p class="section-lead" data-i18n-html="bibtex.lead">
            Echo-Memory: A Controlled Study of Memory in Action World Models (June 2026).
            Licensed under
            <a href="https://creativecommons.org/licenses/by/4.0/" target="_blank" rel="noopener noreferrer">CC BY 4.0</a>.
            Cite the arXiv preprint below.
          </p>
          <div class="cite-switcher">
            <div class="cite-panel is-active">
              <dl class="pub-meta">
                <div class="pub-meta__row">
                  <dt data-i18n="bibtex.source">Source</dt>
                  <dd>
                    <a href="https://arxiv.org/abs/2606.09803" target="_blank" rel="noopener noreferrer">arXiv</a>
                  </dd>
                </div>
                <div class="pub-meta__row">
                  <dt data-i18n="bibtex.arxivid">arXiv ID</dt>
                  <dd>2606.09803</dd>
                </div>
                <div class="pub-meta__row">
                  <dt data-i18n="bibtex.pdf">PDF</dt>
                  <dd>
                    <a href="https://arxiv.org/pdf/2606.09803" target="_blank" rel="noopener noreferrer">arxiv.org/pdf/2606.09803</a>
                  </dd>
                </div>
                <div class="pub-meta__row">
                  <dt data-i18n="bibtex.license">License</dt>
                  <dd>CC BY 4.0</dd>
                </div>
              </dl>
              <div class="bibtex-wrap">
                <button type="button" class="copy-btn" data-copy-target="bibtex-arxiv-block" data-i18n="bibtex.copy">Copy</button>
                <pre class="bibtex" id="bibtex-arxiv-block"><code>@article{king2026echomemory,
  title={Echo-Memory: A Controlled Study of Memory in Action World Models},
  author={King, Wayne and Xue, Zeyue and Bian, Yuxuan and Huang, Jie and Li, Haoran and Li, Yaowei and Su, Yaofeng and Li, Yuming and Wang, Haoyu and Zhang, Shiyi and Zhang, Songchun and Niu, Yuwei and Xu, Sihan and Zhuang, Junhao and Huang, Haoyang and Duan, Nan},
  journal={arXiv preprint arXiv:2606.09803},
  year={2026},
  month={jun},
  eprint={2606.09803},
  archivePrefix={arXiv},
  primaryClass={cs.CV},
  url={https://arxiv.org/abs/2606.09803}
}</code></pre>
              </div>
            </div>
          </div>
        </div>
      </section>
    </main>

    <footer class="footer">
      <div class="container footer-row">
        <div>
          <p class="footer-copy" data-i18n="footer.copy">© Echo Team · Joy Future Academy, JD</p>
        </div>
        <div class="footer-links">
          <a href="https://github.com/Echo-Team-Joy-Future-Academy-JD/Echo-Memory">GitHub</a>
          <a href="https://arxiv.org/abs/2606.09803" target="_blank" rel="noopener noreferrer">arXiv</a>
          <a href="https://arxiv.org/pdf/2606.09803" target="_blank" rel="noopener noreferrer">PDF</a>
          <a href="https://echo-team-joy-future-academy-jd.github.io/Echo-Memory/" data-i18n="footer.pp">Project Page</a>
          <a href="developer.html" data-i18n="nav.developer">Developer Guide</a>
        </div>
        <p class="build-id" hidden aria-hidden="true">site-build-main</p>
      </div>
    </footer>
  </div>

  <script src="i18n.js?v=lang-v2"></script>
  <script src="i18n-runtime.js?v=lang-v2"></script>
  <script src="site.js?v=lang-v1" defer></script>
</body>
</html>