PageSourceSearch

https://huimin-zeng.github.io/PhysHDR-GS/

html huimin-zeng.github.io collected 2026-10-03 09:18:45 UTC 23,420 bytes, 505 lines download raw bytes

1
2<!DOCTYPE html>
3<html>
4<head>
5  <meta charset="utf-8">
6  <meta name="description"
7        content="Physically Inspired Gaussian Splatting for HDR Novel View Synthesis">
8  <meta name="keywords" content="Physically Inspired Gaussian Splatting for HDR Novel View Synthesis, PhysHDR-GS, HDR Novel View Synthesis, 3D Gaussian Splatting">
9  <meta name="viewport" content="width=device-width, initial-scale=1">
10  <title>Physically Inspired Gaussian Splatting for HDR Novel View Synthesis</title>
11
12  <!-- Bootstrap -->
13  <link rel="stylesheet" href="./static/css/bootstrap-4.4.1.css">
14
15  <!-- Global site tag (gtag.js) - Google Analytics -->
vendor: 66 bytes, lines 15-16
15
16  <script async src="https://www.googletagmanager.com/gtag/js?id=
16G-PYVRSFMDRL
vendor: 14 bytes, lines 16-17
16"></script>
17  
17<script>
18    
vendor: 155 bytes, lines 18-26
18window.dataLayer = window.dataLayer || [];
19
20    function gtag() {
21      dataLayer.push(arguments);
22    }
23
24    gtag('js', new Date());
25
26    gtag('config', '
26G-PYVRSFMDRL
vendor: 6 bytes, lines 26-27
26');
27  
27</script>
27
28
29  
30
31  <link href="https://fonts.googleapis.com/css?family=Google+Sans|Noto+Sans|Castoro"
32        rel="stylesheet">
33  
34  
35  
36  
37  <link rel="stylesheet" href="./static/css/bulma.min.css">
38  <link rel="stylesheet" href="./static/css/bulma-carousel.min.css">
39  <link rel="stylesheet" href="./static/css/bulma-slider.min.css">
40  <link rel="stylesheet" href="./static/css/fontawesome.all.min.css">
41  <link rel="stylesheet"
42        href="https://cdn.jsdelivr.net/gh/jpswalsh/academicons@1/css/academicons.min.css">
43  <link rel="stylesheet" href="./static/css/index.css">
44  <link rel="icon" href="./static/images/72.png">
45
46  
47
48  
48<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
48
49  
49<script defer src="./static/js/fontawesome.all.min.js"></script>
49
50  
50<script src="./static/js/bulma-carousel.min.js"></script>
50
51  
51<script src="./static/js/bulma-slider.min.js"></script>
51
52  
52<script src="./static/js/index.js"></script>
52
53  
53<script src="./static/js/app.js"></script>
53
54  
54<script src="./static/js/video_comparison.js"></script>
54
55
56  <link rel="stylesheet" href="./static/css/dics.original.css">
57  
57<script src="./static/js/event_handler.js"></script>
57
58  
58<script src="./static/js/dics.original.js"></script>
58
59 
60
61</head>
62<body>
63
64
65<section class="hero">
66  <div class="hero-body">
67    <div class="container is-max-desktop">
68      <div class="columns is-centered">
69        <div class="column has-text-centered">
70        
71          <h2 class="title is-2 publication-title" style="margin-top: 0; margin-bottom: 0">Physically Inspired Gaussian Splatting for HDR Novel View Synthesis</h2>
72          <br>
73          <h2 class="title is-4" style="margin-top: 0; margin-bottom: 0">CVPR 2026</h2>
74          <br>
75          <div class="is-size-5 publication-authors">    
76            <span class="author-block">
77                <a href="https://huimin-zeng.github.io/">Huimin Zeng</a>
78            </span>&nbsp;&nbsp;&nbsp;&nbsp;
79            <span class="author-block">
80                <a href="https://yueb17.github.io/">Yue Bai</a>
81            </span>&nbsp;&nbsp;&nbsp;&nbsp;
82            <span class="author-block">
83                <a href="https://scholar.google.com/citations?user=oKoYjqUAAAAJ&hl=zh-CN">Hailing Wang</a>
84            </span>&nbsp;&nbsp;&nbsp;&nbsp;
85            <span class="author-block">
86                <a href="https://www1.ece.neu.edu/~yunfu/">Yun Fu</a>
87            </span>
88          </div>
89
90          <div class="is-size-5 publication-authors">
91            <span class="author-block"><sup></sup>Northeastern University</span>&nbsp;&nbsp;&nbsp;&nbsp;
92          </div>
93
94          <div class="column has-text-centered">
95            <div class="publication-links">
96              <!-- PDF Link. -->
97              <span class="link-block">
98                <a href="./assets/paper.pdf"
99                   class="external-link button is-normal is-rounded is-dark">
100                  <span class="icon">
101                      <i class="fas fa-file-pdf"></i>
102                  </span>
103                  <span>Paper</span>
104                </a>
105              </span>
106              <span class="link-block">
107                <a href="./assets/supp.pdf"
108                   class="external-link button is-normal is-rounded is-dark">
109                  <span class="icon">
110                      <i class="fas fa-file-pdf"></i>
111                  </span>
112                  <span>Supp</span>
113                </a>
114              </span>
115
116              <span class="link-block">
117                <a href="https://arxiv.org/abs/2603.28020"
118                   class="external-link button is-normal is-rounded is-dark">
119                  <span class="icon">
120                      <i class="ai ai-arxiv"></i>
121                  </span>
122                  <span>arXiv</span>
123                </a>
124              </span>
125              <!-- Code Link. -->
126              <span class="link-block">
127                <a href="https://github.com/ZeldaM1/PhysHDR-GS"
128                   class="external-link button is-normal is-rounded is-dark disabled">
129                  <span class="icon">
130                      <i class="fab fa-github"></i>
131                  </span>
132                  <span>Code</span>
133                  </a>
134              </span>
135
136            </div>
137
138          </div>
139        </div>
140      </div>
141    </div>
142  </div>
143</section>
144
145<section class="hero teaser">
146  <div class="container is-max-desktop">
147    <div class="hero-body">
148      <div class="columns is-centered has-text-centered">
149        <div class="column is-full-width">
150      
151          <img src="./assets/teaser.jpg" class="center" width="50%">
152          <h2 class="subtitle has-text-centered" style="margin-top: 15px">
153            TL;DR: We present PhysHDR-GS, a physically inspired HDR novel view synthesis framework that models scene appearance via intrinsic reflectance and adjustable ambient illumination, thus modeling appearance-related dynamic details.
154          </h2>
155        </div>
156      </div>
157    </div>
158  </div>
159</section>
160
161 
162<section class="section">
163  <div class="container is-max-desktop">
164    <!-- Abstract. -->
165    <div class="columns is-centered has-text-centered">
166      <div class="column is-four-fifths">
167        <h2 class="title is-3" style="margin-top: -30px">Abstract</h2>
168        <div class="content has-text-justified">
169          <p>
170            High dynamic range novel view synthesis (HDR-NVS) reconstructs scenes with dynamic details by fusing multi-exposure low dynamic range (LDR) views, yet it struggles to capture ambient illumination-dependent appearance. Implicitly supervising HDR content by constraining tone-mapped results fails in correcting abnormal HDR values, and results in limited gradients for Gaussians in under/over-exposed regions. To this end, we introduce PhysHDR-GS, a physically inspired HDR-NVS framework that models scene appearance via intrinsic reflectance and adjustable ambient illumination. PhysHDR-GS employs a complementary image-exposure (IE) branch and Gaussian-illumination (GI) branch to faithfully reproduce standard camera observations and capture illumination-dependent appearance changes, respectively. During training, the proposed cross-branch HDR consistency loss provides explicit supervision for HDR content, while an illumination-guided gradient scaling strategy mitigates exposure-biased gradient starvation and reduces under-densified representations. Experimental results across realistic and synthetic datasets demonstrate our superiority in reconstructing HDR details (e.g., a PSNR gain of 2.04 dB over HDR-GS), while maintaining real-time rendering speed (up to 76 FPS).
171          </p>
172        </div>
173      </div>
174    </div>
175    <!--/ Abstract. -->
176    
177  </div>
178</section>
179
180
181
182
183<section class="section">
184  <div class="container is-max-desktop">
185
186    <!-- Method. -->
187    <div class="columns is-centered has-text-centered">
188        <div class="column is-full-width">
189            <br>
190          <h2 class="title is-3" style="margin-top: -20px">Method</h2>
191    
192          <img src="./assets/overview.jpg" class="center" width="100%">
193          <div class="content has-text-justified">
194            <p style="margin-top: 10px">
195              The proposed PhysHDR-GS is driven by three key components:
196            </p>
197          </div>
198          <ul style="margin-top: 10px; padding-left: 1.4em; list-style-type: disc; text-align: left;">
199            <li style="margin-bottom: 10px; font-size: 0.95rem;">
200              <b>Physical Radiance Composition.</b>  The <b>IE branch</b> globally scales the projected HDR image by camera exposure <i>t</i>; the <b>GI branch</b> relights the scene via a virtual illumination modulator, locally rescaling radiance intensity to avoid saturation. 
201            </li>
202            <li style="margin-bottom: 10px; font-size: 0.95rem;">
203              <b>Self-Consistent HDR Fusion.</b> The lightweight tone mapper fuses complementary LDR outputs from dual branches. <b>Cross-branch HDR consistency loss</b> between IE and GI branch provides explicit HDR self-supervision without ground truth.
204            </li>
205            <li style="font-size: 0.95rem;">
206              <b>Illumination-Guided Gradient Scaling.</b> Gaussians in over/under-exposed regions receive small gradients due to the flat slope of the tone mapping curve. The illumination-guided scaling amplifies per-Gaussian gradients and prevents under-densification.
207            </li>
208          </ul>
209    
210        </div>
211      </div>
212      <!--/ Method. -->
213
214
215  </div>
216</section>
217
218
219
220<!-- ===== Video Comparison: LDR vs HDR ===== -->
221<section class="section" id="video-comparison-section">
222  <div class="container is-max-desktop">
223    <div class="columns is-centered">
224      <div class="column is-full-width">
225        <h2 class="title is-3 has-text-centered" style="margin-top: -30px">Video Comparison</h2>
226        <div class="content has-text-justified">
227          <p>Drag the slider to compare LDR-HDR novel views of each scene.</p>
228        </div>
229
230        <div style="display: flex; flex-wrap: wrap; gap: 8px; justify-content: center;">
231
232          <!-- bathroom -->
233          <div style="flex: 1; min-width: 180px;
233 max-width: calc(25% - 10px);">
234            <div style="position:relative;">
235              <video id="vid_bathroom" loop playsinline muted preload="auto" oncanplay="resizeAndPlay(this)" style="width:100%;"><source src="mp4/bathroom_cat.mp4" type="video/mp4"></video>
236              <canvas class="videoMerge" id="vid_bathroomMerge" style="width:100%;height:auto;display:none;"></canvas>
237              <div style="position:absolute;top:0;left:0;width:100%;background:rgba(0,0,0,0.52);color:#fff;padding:4px 0;text-align:center;font-size:13px;font-weight:600;pointer-events:none;z-index:20;letter-spacing:0.03em;">Bathroom</div>
238            </div>
239          </div>
240
241          <!-- bear -->
242          <div style="flex: 1; min-width: 180px; max-width: calc(25% - 10px);">
243            <div style="position:relative;">
244              <video id="vid_bear" loop playsinline muted preload="auto" oncanplay="resizeAndPlay(this)" style="width:100%;"><source src="mp4/bear_cat.mp4" type="video/mp4"></video>
245              <canvas class="videoMerge" id="vid_bearMerge" style="width:100%;height:auto;display:none;"></canvas>
246              <div style="position:absolute;top:0;left:0;width:100%;background:rgba(0,0,0,0.52);color:#fff;padding:4px 0;text-align:center;font-size:13px;font-weight:600;pointer-events:none;z-index:20;letter-spacing:0.03em;">Bear</div>
247            </div>
248          </div>
249
250          <!-- chair -->
251          <div style="flex: 1; min-width: 180px; max-width: calc(25% - 10px);">
252            <div style="position:relative;">
253              <video id="vid_chair" loop playsinline muted preload="auto" oncanplay="resizeAndPlay(this)" style="width:100%;"><source src="mp4/chair_cat.mp4" type="video/mp4"></video>
254              <canvas class="videoMerge" id="vid_chairMerge" style="width:100%;height:auto;display:none;"></canvas>
255              <div style="position:absolute;top:0;left:0;width:100%;background:rgba(0,0,0,0.52);color:#fff;padding:4px 0;text-align:center;font-size:13px;font-weight:600;pointer-events:none;z-index:20;letter-spacing:0.03em;">Chair</div>
256            </div>
257          </div>
258
259          <!-- desk -->
260          <div style="flex: 1; min-width: 180px; max-width: calc(25% - 10px);">
261            <div style="position:relative;">
262              <video id="vid_desk" loop playsinline muted preload="auto" oncanplay="resizeAndPlay(this)" style="width:100%;"><source src="mp4/desk_cat.mp4" type="video/mp4"></video>
263              <canvas class="videoMerge" id="vid_deskMerge" style="width:100%;height:auto;display:none;"></canvas>
264              <div style="position:absolute;top:0;left:0;width:100%;background:rgba(0,0,0,0.52);color:#fff;padding:4px 0;text-align:center;font-size:13px;font-weight:600;pointer-events:none;z-index:20;letter-spacing:0.03em;">Desk</div>
265            </div>
266          </div>
267
268          <!-- diningroom -->
269          <div style="flex: 1; min-width: 180px; max-width: calc(25% - 10px);">
270            <div style="position:relative;">
271              <video id="vid_diningroom" loop playsinline muted preload="auto" oncanplay="resizeAndPlay(this)" style="width:100%;"><source src="mp4/diningroom_cat.mp4" type="video/mp4"></video>
272              <canvas class="videoMerge" id="vid_diningroomMerge" style="width:100%;height:auto;display:none;"></canvas>
273              <div style="position:absolute;top:0;left:0;width:100%;background:rgba(0,0,0,0.52);color:#fff;padding:4px 0;text-align:center;font-size:13px;font-weight:600;pointer-events:none;z-index:20;letter-spacing:0.03em;">Diningroom</div>
274            </div>
275          </div>
276
277          <!-- dog -->
278          <div style="flex: 1; min-width: 180px; max-width: calc(25% - 10px);">
279            <div style="position:relative;">
280              <video id="vid_dog" loop playsinline muted preload="auto" oncanplay="resizeAndPlay(this)" style="width:100%;"><source src="mp4/dog_cat.mp4" type="video/mp4"></video>
281              <canvas class="videoMerge" id="vid_dogMerge" style="width:100%;height:auto;display:none;"></canvas>
282              <div style="position:absolute;top:0;left:0;width:100%;background:rgba(0,0,0,0.52);color:#fff;padding:4px 0;text-align:center;font-size:13px;font-weight:600;pointer-events:none;z-index:20;letter-spacing:0.03em;">Dog</div>
283            </div>
284          </div>
285
286          <!-- sofa -->
287          <div style="flex: 1; min-width: 180px;
287 max-width: calc(25% - 10px);">
288            <div style="position:relative;">
289              <video id="vid_sofa" loop playsinline muted preload="auto" oncanplay="resizeAndPlay(this)" style="width:100%;"><source src="mp4/sofa_cat.mp4" type="video/mp4"></video>
290              <canvas class="videoMerge" id="vid_sofaMerge" style="width:100%;height:auto;display:none;"></canvas>
291              <div style="position:absolute;top:0;left:0;width:100%;background:rgba(0,0,0,0.52);color:#fff;padding:4px 0;text-align:center;font-size:13px;font-weight:600;pointer-events:none;z-index:20;letter-spacing:0.03em;">Sofa</div>
292            </div>
293          </div>
294
295          <!-- sponza -->
296          <div style="flex: 1; min-width: 180px; max-width: calc(25% - 10px);">
297            <div style="position:relative;">
298              <video id="vid_sponza" loop playsinline muted preload="auto" oncanplay="resizeAndPlay(this)" style="width:100%;"><source src="mp4/sponza_cat.mp4" type="video/mp4"></video>
299              <canvas class="videoMerge" id="vid_sponzaMerge" style="width:100%;height:auto;display:none;"></canvas>
300              <div style="position:absolute;top:0;left:0;width:100%;background:rgba(0,0,0,0.52);color:#fff;padding:4px 0;text-align:center;font-size:13px;font-weight:600;pointer-events:none;z-index:20;letter-spacing:0.03em;">Sponza</div>
301            </div>
302          </div>
303
304        </div><!-- end grid -->
305      </div>
306    </div>
307  </div>
308</section>
309
310
311
312<!-- ===== Drag to Compare Section ===== -->
313<section class="section" id="comparison-section">
314  <div class="container is-max-desktop">
315    <div class="columns is-centered">
316      <div class="column is-full-width">
317        <h2 class="title is-3 has-text-centered" style="margin-top: -30px">Drag to Compare</h2>
318        <div class="content has-text-justified">
319          <p>
320            Select methods for the left and right panels. Drag the slider to compare visual results.
321          </p>
322        </div>
323
324        <!-- Method selectors -->
325        <div style="margin-bottom: 28px; display: flex; gap: 20px; justify-content: center; align-items: center; flex-wrap: wrap;">
326          <div>
327            <label for="cmp-left-method" style="font-weight: bold; margin-right: 8px;">Left:</label>
328            <select id="cmp-left-method" style="padding: 8px 15px; font-size: 15px; border: 1px solid #ccc; border-radius: 4px;">
329              
330              <option value="hdrnerf">HDR-NeRF</option>
331              <option value="HDR-GS" selected>HDR-GS</option>
332              <option value="GS_HDR">GaussHDR</option>
333              <option value="GaussHDR">GaussHDR†</option>
334              <option value="Ours">Ours</option>
335              <option value="Ours_sca">Ours†</option>
336              <option value="GT">GT</option>
337            </select>
338          </div>
339          <div>
340            <label for="cmp-right-method" style="font-weight: bold; margin-right: 8px;">Right:</label>
341            <select id="cmp-right-method" style="padding: 8px 15px; font-size: 15px; border: 1px solid #ccc; border-radius: 4px;">
342              
343              <option value="hdrnerf">HDR-NeRF</option>
344              <option value="HDR-GS">HDR-GS</option>
345              <option value="GS_HDR">GaussHDR</option>
346              <option value="GaussHDR">GaussHDR†</option>
347              <option value="Ours" selected>Ours</option>
348              <option value="Ours_sca">Ours†</option>
349              <option value="GT">GT</option>
350            </select>
351          </div>
352        </div>
353
354        <!-- LDR subsection -->
355        <h3 class="title is-4 has-text-centered" style="margin-bottom: 32px;">LDR</h3>
356        <div id="cmp-grid-ldr" style="display: flex; flex-wrap: wrap; gap: 16px; justify-content: center; margin-bottom: 10px;"></div>
357        <!-- HDR subsection -->
358        <h3 class="title is-4 has-text-centered" style="margin-bottom: 32px;">HDR</h3>
359        <div id="cmp-grid-hdr" style="display: flex; flex-wrap: wrap; gap: 16px; justify-content: center;"></div>
360
361      </div>
362    </div>
363  </div>
364</section>
365
366<script>
367  var cmpScenesLDR = [
368    { id: 'test_007_0', name: 'Computer'  },
369    { id: 'test_009_3', name: 'Luckycat'  },
370    { id: 'test_017_2', name: 'Flower'    },
371  ];
372
373  var cmpScenesHDR = [
374    { id: 'test_r_16',   name: 'Sofa'     },
375    { id: 'test_r_16v1', name: 'Bear'     },
376    { id: 'test_r_6',    name: 'Bathroom' },
377  ];
378
379  var cmpMethodFolders = {
380    'GT':       'compare/GT/',
381    'hdrnerf':  'compare/hdrnerf/',
382    'HDR-GS':   'compare/HDR-GS/',
383    'GaussHDR': 'compare/GaussHDR/',
384    'GS_HDR':   'compare/GS_HDR/',
385    'Ours':     'compare/Ours/',
386    'Ours_sca': 'compare/Ours_sca/',
387  };
388
389  function getCmpImagePath(method, sceneId) {
390    var folder = cmpMethodFolders[method];
391    var filename = sceneId + '.png';
392    if (method === 'GaussHDR' && sceneId === 'test_r_16v1') filename = 'test_r_16_v1.png';
393    return folder + filename;
394  }
395
396  function buildCmpGroup(gridId, scenes) {
397    var grid = document.getElementById(gridId);
398    grid.innerHTML = '';
399    scenes.forEach(function(scene) {
400      var wrapper = document.createElement('div');
401      wrapper.style.cssText = 'flex: 1; min-width: 260px; max-width: calc(33.33% - 12px); text-align: center;';
402      wrapper.innerHTML =
403        '<div style="position: relative;">' +
404          '<div class="b-dics" id="cmp-dics-' + scene.id + '" style="width:100%;"></div>' +
405          '<div style="position:absolute; top:-27px; left:0; width:100%; background:rgba(0,0,0,0.52); color:#fff; padding:4px 0; text-align:center; font-size:13px; font-weight:600; pointer-events:none; z-index:20; letter-spacing:0.03em;">' + scene.name + '</div>' +
406        '</div>';
407      grid.appendChild(wrapper);
408    });
409  }
410
411  function initCmpDicsGroup(scenes) {
412    var leftSel  = document.getElementById('cmp-left-method');
413    var rightSel = document.getElementById('cmp-right-method');
414    var leftMethod  = leftSel.value;
415    var rightMethod = rightSel.value;
416    var leftLabel   = leftSel.options[leftSel.selectedIndex].text;
417    var rightLabel  = rightSel.options[rightSel.selectedIndex].text;
418
419    scenes.forEach(function(scene) {
420      var container = document.getElementById('cmp-dics-' + scene.id);
421      if (!container) return;
422      container.innerHTML =
423        '<img alt="' + leftLabel  + '" src="' + getCmpImagePath(leftMethod,  scene.id) + '">' +
424        '<img alt="' + rightLabel + '" src="' + getCmpImagePath(rightMethod, scene.id) + '">';
425      new Dics({
426        container: container,
427        hideTexts: false,
428        textPosition: 'top',
429      });
430    });
431  }
432
433  function initAllCmpDics() {
434    initCmpDicsGroup(cmpScenesLDR);
435    initCmpDicsGroup(cmpScenesHDR);
436  }
437
438  window.addEventListener('load', function() {
439    buildCmpGroup('cmp-grid-ldr', cmpScenesLDR);
440    buildCmpGroup('cmp-grid-hdr', cmpScenesHDR);
441    initAllCmpDics();
442    document.getElementById('cmp-left-method').addEventListener('change',  initAllCmpDics);
443    document.getElementById('cmp-right-method').addEventListener('change', initAllCmpDics);
444  });
445</script>
445
446
447<section class="section">
448  <div class="container is-max-desktop">
449
450    <!-- Results. -->
451    <div class="columns is-centered ">
452      <div class="column is-full-width">
453        <h2 class="title is-3 has-text-centered" style="margin-top: -30px">Qualitative Results</h2>
454        <h3 class="title is-4" style="margin-bottom: 12px;">LDR Results</h3>
455        <div class="has-text-centered" style="margin-bottom: 36px;">
456          <img src="./assets/LDR_supp.jpg" class="center" width="100%">
457        </div>
458
459        <h3 class="title is-4" style="margin-bottom: 12px;">HDR Results</h3>
460        <div class="has-text-centered" style="margin-bottom: 10px;">
461          <img src="./assets/HDR_supp.jpg" class="center" width="100%">
462        </div>
463
464      </div>
465    </div>
466    <!--/ Results. -->
467
468
469<div class="columns is-centered ">
470<div class="column is-full-width">
471    <h2 class="title is-4" style="margin-top: 30px">BibTeX</h2>
472    <pre><code>@misc{zeng2026physicallyinspiredgaussiansplatting,
473      title={Physically Inspired Gaussian Splatting for HDR Novel View Synthesis}, 
474      author={Huimin Zeng and Yue Bai and Hailing Wang and Yun Fu},
475      year={2026},
476      eprint={2603.28020},
477      archivePrefix={arXiv},
478      primaryClass={cs.CV},
479      url={https://arxiv.org/abs/2603.28020}, 
480}
481</code></pre>
482  </div>
483</div>
484
485
486  </div>
487</section>
488
489<footer class="footer">
490    <div class="container">
491      <div class="columns is-centered">
492        <div class="column is-8">
493          <div class="content">
494            <p>
495              This website is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by-sa/4.0/">Creative
496              Commons Attribution-ShareAlike 4.0 International License</a>. Website source code based on the <a href="https://github.com/nerfies/nerfies.github.io">Nerfies</a> project page.
497            </p>
498          </div>
499        </div>
500      </div>
501    </div>
502  </footer>
503
504</body>
505</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.