PageSourceSearch

https://kairobo.github.io/PrimHOI/

html kairobo.github.io collected 2026-10-03 09:26:26 UTC 25,154 bytes, 483 lines download raw bytes

1<!DOCTYPE html>
2<html>
3<head>
4  <meta charset="utf-8">
5  <meta name="description" content="DESCRIPTION META TAG">
6  <meta property="og:title" content="SOCIAL MEDIA TITLE TAG"/>
7  <meta property="og:description" content="SOCIAL MEDIA DESCRIPTION TAG TAG"/>
8  <meta property="og:url" content="URL OF THE WEBSITE"/>
9  <meta property="og:image" content="static/image/your_banner_image.png" />
10  <meta property="og:image:width" content="1200"/>
11  <meta property="og:image:height" content="630"/>
12
13  <meta name="twitter:title" content="TWITTER BANNER TITLE META TAG">
14  <meta name="twitter:description" content="TWITTER BANNER DESCRIPTION META TAG">
15  <meta name="twitter:image" content="static/images/your_twitter_banner_image.png">
16  <meta name="twitter:card" content="summary_large_image">
17  <!-- Keywords for your paper to be indexed by-->
18  <meta name="keywords" content="character animation, humanoid, human-object interaction, reinforcement learning, manipulation, basketball">
19  <meta name="viewport" content="width=device-width, initial-scale=1">
20  <title>PrimHOI: Compositional Human-Object Interaction via Reusable Primitives</title>
21  <link rel="icon" href="static/images/prim_icon.png" type="image/svg+xml">
22
23  <link href="https://fonts.googleapis.com/css?family=Google+Sans|Noto+Sans|Castoro"
24  rel="stylesheet">
25
26  <link rel="stylesheet" href="static/css/bulma.min.css">
27  <link rel="stylesheet" href="static/css/bulma-carousel.min.css">
28  <link rel="stylesheet" href="static/css/bulma-slider.min.css">
29  <link rel="stylesheet" href="static/css/fontawesome.all.min.css">
30  <link rel="stylesheet"
31  href="https://cdn.jsdelivr.net/gh/jpswalsh/academicons@1/css/academicons.min.css">
32  <link rel="stylesheet" href="static/css/index.css">
33
34  
34<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
34
35  
35<script src="https://documentcloud.adobe.com/view-sdk/main.js"></script>
35
36  
36<script defer src="static/js/fontawesome.all.min.js"></script>
36
37  
37<script src="https://kit.fontawesome.com/d383128d10.js" crossorigin="anonymous"></script>
37
38  
38<script src="static/js/bulma-carousel.min.js"></script>
38
39  
39<script src="static/js/bulma-slider.min.js"></script>
39
40  
40<script src="static/js/index.js"></script>
40
41
42  
42<script type="importmap">
43    {
44      "imports": {
45        "vue": "https://unpkg.com/vue@3/dist/vue.esm-browser.js",
46        "three": "https://unpkg.com/[email protected]/build/three.module.js",
47        "three/addons/": "https://unpkg.com/[email protected]/examples/jsm/"
48      }
49    }
50  </script>
50
51</head>
52<!-- Google tag (gtag.js) -->
vendor: 64 bytes, lines 52-53
52
53<script async src="https://www.googletagmanager.com/gtag/js?id=
53G-KC36P9N5PB
vendor: 12 bytes, line 53
53"></script>
54<script>
55  
vendor: 134 bytes, lines 55-59
55window.dataLayer = window.dataLayer || [];
56  function gtag(){dataLayer.push(arguments);}
57  gtag('js', new Date());
58
59  gtag('config', '
59G-KC36P9N5PB
vendor: 4 bytes, line 59
59');
60</script>
60
61
62
63<body>
64  <section class="hero">
65    <div class="hero-body">
66      <div class="container is-max-desktop">
67        <div class="columns is-centered">
68          <div class="column has-text-centered">
69            <h1 class="title is-1 publication-title"><img src="static/images/prim_icon.png" style="height: 60px; margin-bottom: -3px;">PrimHOI: Compositional Human-Object Interaction via Reusable Primitives</h1>
70            <div class="has-text-centered mb-4 iccv-year">ICCV 2025</div>
71            <div class="is-size-5 publication-authors">
72              <span class="author-block">
73                <a href="https://kairobo.github.io/">Kai Jia*</a><sup>1</sup>,
74              </span>
75              <span class="author-block">
76                <a href="https://tengyu.ai/">Tengyu Liu*</a><sup>2</sup>,
77              </span>
78              <span class="author-block">
79                <a href="https://yzhu.io/">Yixin Zhu</a><sup>3</sup>,
80              </span>
81              <span class="author-block">
82                <a href="https://peimingtao.github.io/">Mingtao Pei</a><sup>1,✉️</sup>,
83              </span>
84              <span class="author-block">
85                <a href="https://siyuanhuang.com/">Siyuan Huang</a><sup>2,✉️</sup>,
86              </span>
87            </div>
88  
89            <div class="is-size-5 publication-authors">
90              <span class="author-block"><sup>1</sup>School of Computer Science Technology, Beijing Institute of Technology</span>
91              <span>        </span>
92              <span class="author-block"><sup>2</sup>National Key Laboratory of General Artificial Intelligence, BIGAI</span>
93              <span>        </span>
94              <span class="author-block"><sup>3</sup>School of Psychological and Cognitive Sciences, Peking University</span>
95
96            </div>
97
98            <div class="column has-text-centered">
99              <div class="publication-links">
100                <!-- PDF Link. static/pdf/paper.pdf -->
101                <span class="link-block">
102                  <a href="https://openaccess.thecvf.com//content/ICCV2025/papers/Jia_PrimHOI_Compositional_Human-Object_Interaction_via_Reusable_Primitives_ICCV_2025_paper.pdf"
103                     class="external-link button is-normal is-rounded is-dark">
104                    <span class="icon">
105                        <i class="fas fa-file-pdf"></i>
106                    </span>
107                    <span>Paper PDF</span>
108                  </a>
109                </span>
110<!--                <span class="link-block">-->
111<!--                  <a href="https://arxiv.org/abs/xxx"-->
112<!--                     class="external-link button is-normal is-rounded is-dark">-->
113<!--                    <span class="icon">-->
114<!--                        <i class="ai ai-arxiv"></i>-->
115<!--                    </span>-->
116<!--                    <span>arXiv</span>-->
117<!--                  </a>-->
118<!--                </span>-->
119                <!-- Video Link. -->
120                <span class="link-block">
121                  <a href="https://youtu.be/jVAQuBcfz8o?si=kFy7Oy4gxpRfzcHB"
122                     class="external-link button is-normal is-rounded is-dark">
123                    <span class="icon">
124                        <i class="fab fa-youtube"></i>
125                    </span> 
126                    <span>Video</span>
127                  </a>
128                </span>
129                <!-- Code Link. -->
130                <span class="link-block">
131                  <a href="https://github.com/Kairobo/PrimitiveHOI"
132                     class="external-link button is-normal is-rounded is-dark">
133                    <span class="icon">
134                        <i class="fab fa-github"></i>
135                    </span>
136                    <span>Code</span>
137                    </a>
138                </span>
139              </div>
140            </div>
141            
142          </div>
143        </div>
144      </div>
145    </div>
146  </section>
147
148<!-- Teaser -->
149<section class="hero is-small">
150  <div class="hero-body">
151    <div class="container is-max-desktop">
152      <div class="columns is-centered has-text-centered">
153        <div class="column is-full">
154            <div class="content has-text-centered">
155              <img src="static/images/teaser.png"/>
156          </div>
157        </div>
158      </div>
159    </div>
160  </div>
161</section>
162<!-- End teaser -->
163
164
165<!-- Paper abstract -->
166<section class="hero is-small">
167  <div class="hero-body">
168    <div class="container is-max-desktop">
169      <div class="columns is-centered has-text-centered">
170        <div class="column is-four-fifths">
171          <h2 class="title is-3">Abstract</h2>
172          <div class="content has-text-justified">
173            <p>
174            Synthesizing realistic \ac{hoi} motions is essential for creating believable digital characters and intelligent robots.
175            Existing approaches rely on data-intensive learning models that struggle with the compositional structure of daily \ac{hoi} motions, particularly for complex multi-object manipulation tasks. The exponential growth of possible interaction scenarios makes comprehensive data collection prohibitively expensive.
176            The fundamental challenge is synthesizing unseen, complex \ac{hoi}
176 sequences without extensive task-specific training data.
177            Here we show that \method generates complex \ac{hoi} motions through spatial and temporal composition of generalizable interaction primitives defined by relative geometry.
178            Our approach demonstrates that repetitive local contact patterns---grasping, clamping, and supporting---serve as reusable building blocks for diverse interaction sequences. Unlike previous data-driven methods requiring end-to-end training for each task variant, \method achieves zero-shot transfer to unseen scenarios through hierarchical primitive planning.
179            Experimental validation demonstrates substantial improvements in adaptability, diversity, and motion quality compared to existing approaches.
180            </p>
181          </div>
182        </div>
183      </div>
184      <!-- Paper video. -->
185      <div class="columns is-centered has-text-centered">
186        <div class="column is-four-fifths">
187          <h2 class="title is-3">Video</h2>
188          <div class="publication-video">
189            <iframe src="https://www.youtube.com/embed/jVAQuBcfz8o?si=JFMF3IB0xE_R31XL" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen=""></iframe>
190          <!--          <video controls autoplay loop muted playsinline src="static/videos/PrimHOI_demo.mp4" style=""></video>-->
191          </div>
192        </div>
193      </div>
194      <!--/ Paper video. -->
195    </div>
196  </div>
197</section>
198<!-- End paper abstract -->
199
200
201<!-- Poster -->
202<section class="hero is-small">
203  <div class="hero-body">
204    <div class="container is-max-desktop">
205      <div class="columns is-centered has-text-centered">
206        <div class="column is-full">
207          <div class="content has-text-centered">
208            <h2 class="title is-3">Method Overview</h2>
209            <img src="static/images/overview.png"/>
210            <div class="content has-text-justified">
211              <p>
212                Overview of our PrimHOI. (I) We define HOI planning tasks in the Planning Domain Definition Language (PDDL), named PDDL-HOI, which serves as prior knowledge for planning. A LLM translates the task description into a PDDL-formatted planning problem. The symbolic planner in PDDL-HOI then searches for a plausible solution, represented as subgoals {sg} that outline each key step. (II) After high-level planning, low-level motion generation proceeds in two steps: Key-Pose Generation and Intermediate Motion Generation between adjacent key poses. (II.i) Each key pose Ck is generated by optimizing the contact constraints specified in the subgoal graph sgk. These contact constraints are derived from sampling for each contact primitive factor. (II.ii) To connect adjacent key poses, we first plan the object’s motion, followed by generating intermediate human motion guided by the contact trajectory attached to the object’s path. A post-optimization refines the results, enforcing constraints from the subgoal graph, as well as addressing penetration, smoothness, and other requirements.
213              </p>
214            </div>
215          </div>
216        </div>
217      </div>
218    </div>
219  </div>
220</section>
221<!-- End poster -->
222
223<!-- Long Results -->
224<section class="hero is-light is-small">
225  <div class="hero-body">
226    <h2 class="title is-2" style="text-align: center;"> The Three Long Plans </h2>
227    <div class="container">
228       <h2 class="title is-2" style="text-align: center;"> &lt; Plan 1 &gt;  </h2>
229      <div id="results-carousel" class="carousel results-carousel" style="text-align: center;">
230        <!--  -->
231        <div class="publication-banner video">
232          <div class="video-caption" style="margin-bottom: 10px; margin-right: 10px;">
233            [Start] The person picks up (<span style="color: red;">Grasp</span>) the first box using the right hand.
234          </div>
235          <video poster="index.html" id="jumpshot" autoplay controls muted loop height="100%">
236            <source src="static/videos/10_1.mp4"
237                    type="video/mp4">
238          </video>
239        </div>
240        <div class="publication-banner video">
241          <div class="video-caption" style="margin-bottom: 10px; margin-right: 10px;">
242            Then uses right hand (<span style="color: red;">Grasp</span>) to put on left hand to let the left hand to <span style="color: green;">support</span> the object.
243          </div>
244          <video poster="index.html" id="jumpshot" autoplay controls muted loop height="100%">
245            <source src="static/videos/10_2.mp4"
246                    type="video/mp4">
247          </video>
248        </div>
249        <div class="publication-banner video">
250          <div class="video-caption" style="margin-bottom: 10px; margin-right: 10px;">
251            The person <span style="color: red;">grasps</span> the second box using the right hand while <span style="color: green;">supporting</span> the first box.
252          </div>
253          <video poster="index.html" id="jumpshot" autoplay controls muted loop height="100%">
254            <source src="static/videos/10_3.mp4"
255                    type="video/mp4">
256          </video>
257        </div>
258        <div class="publication-banner video">
259          <div class="video-caption" style="margin-bottom: 10px; margin-right: 10px;">
260            The person picks up (<span style="color: red;">Grasp</span>) the other box using the right hand while <span style="color: green;">supporting</span> the first box.
261          </div>
262          <video poster="index.html" id="jumpshot" autoplay controls muted loop height="100%">
263            <source src="static/videos/10_4.mp4"
264                    type="video/mp4">
265          </video>
266        </div>
267        <div class="publication-banner video">
268          <div class="video-caption" style="margin-bottom: 10px; margin-right: 10px;">
269            The person places the box (<span style="color: red;">Grasp</span>) on the first box (<span style="color: green;">Support</span>).
270          </div>
271          <video poster="index.html" id="jumpshot" autoplay controls muted loop height="100%">
272            <source src="static/videos/10_5.mp4"
273                    type="video/mp4">
274          </video>
275        </div>
276        <div class="publication-banner video">
277          <div class="video-caption" style="margin-bottom: 10px; margin-right: 10px;">
278            The person uses the free hand to open the door [End].
279          </div>
280          <video poster="index.html" id="jumpshot" autoplay controls muted loop height="100%">
281            <source src="static/videos/10_6.mp4"
282                    type="video/mp4">
283          </video>
284        </div>
285      </div>
286    </div>
287    <br>
288    <br>
289    <div class="container">
290       <h2 class="title is-2" style="text-align: center;"> &lt; Plan 2 &gt;  </h2>
291        <!--  -->
292        <div class="columns is-centered">
293        <div class="column is-one-fifths is-centered has-text-centered">
294          <p> <strong>The person <span style="color: orange;">clamps</span> the second box using chest and elbow.</strong> </p>
295          <video controls autoplay loop muted playsinline src="static/videos/5_1.mp4" style="border: 1px solid #bbb; border-radius: 10px; margin: 1.0%; width: 70%;"></video>
296        </div>
297        <div class="column is-one-fifths is-centered has-text-centered">
298          <p> <strong>The person uses the free hand to open the door.</strong> </p>
299          <video controls autoplay loop muted playsinline src="static/videos/5_2.mp4"  style="border: 1px solid #bbb; border-radius: 10px; margin: 1.0%;width: 70%;"></video>
300        </div>
301        </div>
302    </div>
303    <br>
304    <br>
305    <div class="container">
306       <h2 class="title is-2" style="text-align: center;"> &lt; Plan 3 &gt;  </h2>
307        <!--  -->
308        <div class="columns is-centered">
309        <div class="column is-one-fifths is-centered has-text-centered">
310          <p> <strong>The person <span style="color: orange;">clamps</span> the second box using chest and the first box.</strong> </p>
311          <video controls autoplay loop muted playsinline src="static/videos/7_1.mp4" style="border: 1px solid #bbb; border-radius: 10px; margin: 1.0%; width: 70%;"></video>
312        </div>
313        <div class="column is-one-fifths is-centered has-text-centered">
314          <p> <strong>The person uses the free hand to open the door.</strong> </p>
315          <video controls autoplay loop muted playsinline src="static/videos/7_2.mp4"  style="border: 1px solid #bbb; border-radius: 10px; margin: 1.0%;width: 70%;"></video>
316        </div>
317        </div>
318    </div>
319    <!--  -->
320  </div>
321</div>g
322</div>
323</section>
324
325
326<!-- The Four  -->
327<section class="section">
328  <div class="container">
329    <h2 class="title is-2" style="text-align: center;"> Results - Motions for Four Primitive Contact Modes </h2>
330    <div class="columns is-centered">
331      <div class="column is-one-fifths is-centered has-text-centered">
332        <video controls autoplay loop muted playsinline src="static/videos/grasp.mp4" poster="static/thumbnails/sm2_robust_book_new.jpg" style="border: 1px solid #bbb; border-radius: 10px; margin: 1.0%;"></video>
333        <p> <strong><span style="color: red;">Grasp</span></strong> </p>
334      </div>
335      <div class="column is-one-fifths is-centered has-text-centered">
336        <video controls autoplay loop muted playsinline src="static/videos/clamp.mp4" poster="static/thumbnails/sm2_robust_getup_new.jpg" style="border: 1px solid #bbb; border-radius: 10px; margin: 1.0%;"></video>
337        <p> <strong><span style="color: orange;">Clamp</span></strong> </p>
338      </div>
339      <div class="column is-one-fifths is-centered has-text-centered">
340        <video controls autoplay loop muted playsinline src="static/videos/support.mp4" poster="static/thumbnails/sm2_robust_shot_new.jpg" style="border: 1px solid #bbb; border-radius: 10px; margin: 1.0%;"></video>
341        <p> <strong><span style="color: green;">Support</span></strong> </p>
342      </div>
343      <div class="column is-one-fifths is-centered has-text-centered">
344        <video controls autoplay loop muted playsinline src="static/videos/dual_support.mp4" poster="static/thumbnails/sm2_robust_df_new.jpg" style="border: 1px solid #bbb; border-radius: 10px; margin: 1.0%;"></video>
345        <p> <strong><span style="color: cyan;">Dual Support</span></strong> </p>
346      </div>
347    </div>
348  </div>
349</section>
350<!-- End The Four  -->
351
352<!-- Other Objects  -->
353<section class="section">
354  <div class="container">
355    <h2 class="title is-2" style="text-align: center;"> Results - Other Objects </h2>
356    <div class="columns is-centered">
357      <div class="column is-one-fifths is-centered has-text-centered">
358        <p> <strong>Long Box</strong> </p>
359        <video controls autoplay loop muted playsinline src="static/videos/longbox.mp4"  style="border: 1px solid #bbb; border-radius: 10px; margin: 1.0%;"></video>
360        <p> The person uses shoulder and hand to <span style="color: cyan;">Dual Support</span> the long box before passing the door. </p>
361      </div>
362      <div class="column is-one-fifths is-centered has-text-centered">
363        <p> <strong>Trashbin</strong> </p>
364        <video controls autoplay loop muted playsinline src="static/videos/trashbin.mp4"  style="border: 1px solid #bbb; border-radius: 10px; margin: 1.0%;"></video>
365        <p> The human uses right hand (<span style="color: red;">Grasp</span>) to put the trashbin on left hand to <span style="color: green;">support</span> the object. </p>
366      </div>
367      <div class="column is-one-fifths is-centered has-text-centered">
368        <p> <strong>Monitor</strong> </p>
369        <video controls autoplay loop muted playsinline src="static/videos/monitor.mp4"  style="border: 1px solid #bbb; border-radius: 10px; margin: 1.0%;"></video>
370        <p> The human lifts the monitor using <span style="color: orange;">Clamp</span>. </p>
371      </div>
372      <div class="column is-one-fifths is-centered has-text-centered">
373        <p> <strong>Plastic Container</strong> </p>
374        <video controls autoplay loop muted playsinline src="static/videos/plastic_container.mp4"  style="border: 1px solid #bbb; border-radius: 10px; margin: 1.0%;"></video>
375        <p> The human lifts the plastic containter using <span style="color: orange;">Clamp</span>. </p>
376      </div>
377    </div>
378  </div>
379</section>
380<!-- Other Objects  -->
381
382
383<!-- Small video carousel -->
384<section class="section">
385  <div class="container">
386    <h2 class="title is-2" style="text-align: center;"> Results - Diverse Object Placement </h2>
387    <div class="columns is-centered">
388      <div class="column is-one-fifths is-centered has-text-centered">
389        <video controls autoplay loop muted playsinline src="static/videos/trashbin.mp4" poster="static/thumbnails/sm2_kettle_cup_new.jpg" style="border: 1px solid #bbb; border-radius: 10px; margin: 1.0%;width: 70%;"></video>
390        <p> Trashbin <span style="color: red;">Grasp</span> Placement #1 </p>
391      </div>
392      <div class="column is-one-fifths is-centered has-text-centered">
393        <video controls autoplay loop muted playsinline src="static/videos/trashbin_2.mp4" poster="static/thumbnails/sm2_stand_chair_new.jpg" style="border: 1px solid #bbb; border-radius: 10px; margin: 1.0%;width: 70%;"></video>
394        <p> Trashbin <span style="color: red;">Grasp</span> Placement #2 </p>
395      </div>
396    </div>
397  </div>
398</section>
399<!-- End small video carousel-->
400
401<!-- Small video carousel -->
402<section class="section">
403  <div class="container">
404    <h2 class="title is-2" style="text-align: center;"> Results - Diverse Primitive Contact Points </h2>
405    <div class="columns is-centered">
406      <div class="column is-one-fifths is-centered has-text-centered">
407        <p> The human lifts the monitor using <span style="color: orange;">Clamp</span>.</p>
408        <video controls autoplay loop muted playsinline src="static/videos/cpt_1.mp4" poster="static/thumbnails/sm2_kettle_cup_new.jpg" style="border: 1px solid #bbb; border-radius: 10px; margin: 1.0%; width: 100%;"></video>
409      </div>
410      <div class="column is-one-fifths is-centered has-text-centered">
411        <p> The human lifts the plastic containter using <span style="color: orange;">Clamp</span>.</p>
412        <video controls autoplay loop muted playsinline src="static/videos/cpt_2.mp4" poster="static/thumbnails/sm2_kettle_cup_new.jpg" style="border: 1px solid #bbb; border-radius: 10px; margin: 1.0%; width: 100%;"></video>
413      </div>
414    </div>
415  </div>
416</section>
417<!-- End small video carousel-->
418
419
420<!-- Small video carousel -->
421<section class="section">
422  <div class="container">
423    <h2 class="title is-2" style="text-align: center;"> Comparison Experiments </h2>
424    <div class="columns is-centered">
425      <div class="column is-one-fifths is-centered has-text-centered">
426        <p> Comparison in Contact Guidance Motion Generation: Local Control (Ours) vs. IK. </p>
427        <video controls autoplay loop muted playsinline src="static/videos/compare_1.mp4" poster="static/thumbnails/sm2_kettle_cup_new.jpg" style="border: 1px solid #bbb; border-radius: 10px; margin: 1.0%; width: 70%;"></video>
428      </div>
429    </div>
430    <div class="columns is-centered">
431      <div class="column is-one-fifths is-centered has-text-centered">
432        <p> Comparison in Contact Guidance Motion Generation: Local Control (Ours) vs. ProgMogen[1] </p>
433        <video controls autoplay loop muted playsinline src="static/videos/compare_2.mp4" poster="static/thumbnails/sm2_kettle_cup_new.jpg" style="border: 1px solid #bbb; border-radius: 10px; margin: 1.0%; width: 70%;"></video>
434      </div>
435    </div>
436  </div>
437</section>
438<!-- End small video carousel-->
439
440
441<!--BibTex citation -->
442<section class="section" id="BibTeX">
443  <div class="container is-max-desktop content">
444    <div class="has-text-centered">
445      <h2 class="title is-3">BibTeX</h2>
446    </div>
447    <pre>
448      <code>
449      @inproceedings{jia2025primhoi,
450        title={PrimHOI: Compositional Human-Object Interaction via Reusable Primitives},
451        author={Jia, Kai and Liu, Tengyu and Zhu, Yixin and Pei, Mingtao and Huang, Siyuan},
452        booktitle={Proceedings of International Conference on Computer Vision (ICCV)},
453        pages={11491--11501},
454        year={2025}
455      }
456      </code>
457  </pre>
458  </div>
459</section>
460<!--End BibTex citation -->
461
462
463<footer class="footer">
464  <div class="container">
465    <div class="columns is-centered">
466      <div class="column is-8">
467        <div class="content has-text-centered">
468          <p>
469            Page template borrowed from <a href="https://github.com/eliahuhorwitz/Academic-project-page-template" target="_blank"> Academic Project Page Template</a>. <br>
470            You are free to borrow the template of our website, we just ask that you link back to this page in the footer. <br>
471            This website is licensed under a <a rel="license"  href="http://creativecommons.org/licenses/by-sa/4.0/" target="_blank">Creative Commons Attribution-ShareAlike 4.0 International License</a>.
472          </p>
473        </div>
474      </div>
475    </div>
476  </div>
477</footer>
478
479<script src="animate.js" type="module"></script>
479
480
481
482</body>
483</html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.