beamerpkg 1.2.0__tar.gz → 1.3.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (221) hide show
  1. beamerpkg-1.3.0/PKG-INFO +428 -0
  2. beamerpkg-1.3.0/README.md +407 -0
  3. {beamerpkg-1.2.0 → beamerpkg-1.3.0}/pyproject.toml +2 -1
  4. {beamerpkg-1.2.0 → beamerpkg-1.3.0}/src/beamerpkg/__init__.py +1 -1
  5. {beamerpkg-1.2.0 → beamerpkg-1.3.0}/src/beamerpkg/cli.py +17 -1
  6. {beamerpkg-1.2.0 → beamerpkg-1.3.0}/src/beamerpkg/package.py +86 -24
  7. beamerpkg-1.3.0/src/beamerpkg/pdf_media.py +242 -0
  8. beamerpkg-1.3.0/src/beamerpkg/spatial_model.py +230 -0
  9. beamerpkg-1.3.0/src/beamerpkg/spatial_project.py +191 -0
  10. beamerpkg-1.3.0/src/beamerpkg/spatial_server.py +209 -0
  11. beamerpkg-1.3.0/src/beamerpkg/static/spatial/THIRD_PARTY_NOTICES.txt +282 -0
  12. beamerpkg-1.3.0/src/beamerpkg/static/spatial/assets/index-4tj3y4fJ.css +1 -0
  13. beamerpkg-1.3.0/src/beamerpkg/static/spatial/assets/index-CWrvO8_X.js +116 -0
  14. beamerpkg-1.3.0/src/beamerpkg/static/spatial/assets/pdf.worker.min-CjEcRF4W.mjs +28 -0
  15. beamerpkg-1.3.0/src/beamerpkg/static/spatial/index.html +4 -0
  16. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/LICENSE +177 -0
  17. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/78-EUC-H.bcmap +0 -0
  18. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/78-EUC-V.bcmap +0 -0
  19. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/78-H.bcmap +0 -0
  20. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/78-RKSJ-H.bcmap +0 -0
  21. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/78-RKSJ-V.bcmap +0 -0
  22. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/78-V.bcmap +0 -0
  23. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/78ms-RKSJ-H.bcmap +0 -0
  24. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/78ms-RKSJ-V.bcmap +0 -0
  25. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/83pv-RKSJ-H.bcmap +0 -0
  26. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/90ms-RKSJ-H.bcmap +0 -0
  27. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/90ms-RKSJ-V.bcmap +0 -0
  28. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/90msp-RKSJ-H.bcmap +0 -0
  29. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/90msp-RKSJ-V.bcmap +0 -0
  30. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/90pv-RKSJ-H.bcmap +0 -0
  31. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/90pv-RKSJ-V.bcmap +0 -0
  32. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/Add-H.bcmap +0 -0
  33. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/Add-RKSJ-H.bcmap +0 -0
  34. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/Add-RKSJ-V.bcmap +0 -0
  35. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/Add-V.bcmap +0 -0
  36. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/Adobe-CNS1-0.bcmap +0 -0
  37. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/Adobe-CNS1-1.bcmap +0 -0
  38. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/Adobe-CNS1-2.bcmap +0 -0
  39. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/Adobe-CNS1-3.bcmap +0 -0
  40. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/Adobe-CNS1-4.bcmap +0 -0
  41. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/Adobe-CNS1-5.bcmap +0 -0
  42. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/Adobe-CNS1-6.bcmap +0 -0
  43. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/Adobe-CNS1-UCS2.bcmap +0 -0
  44. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/Adobe-GB1-0.bcmap +0 -0
  45. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/Adobe-GB1-1.bcmap +0 -0
  46. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/Adobe-GB1-2.bcmap +0 -0
  47. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/Adobe-GB1-3.bcmap +0 -0
  48. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/Adobe-GB1-4.bcmap +0 -0
  49. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/Adobe-GB1-5.bcmap +0 -0
  50. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/Adobe-GB1-UCS2.bcmap +0 -0
  51. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/Adobe-Japan1-0.bcmap +0 -0
  52. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/Adobe-Japan1-1.bcmap +0 -0
  53. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/Adobe-Japan1-2.bcmap +0 -0
  54. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/Adobe-Japan1-3.bcmap +0 -0
  55. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/Adobe-Japan1-4.bcmap +0 -0
  56. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/Adobe-Japan1-5.bcmap +0 -0
  57. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/Adobe-Japan1-6.bcmap +0 -0
  58. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/Adobe-Japan1-UCS2.bcmap +0 -0
  59. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/Adobe-Korea1-0.bcmap +0 -0
  60. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/Adobe-Korea1-1.bcmap +0 -0
  61. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/Adobe-Korea1-2.bcmap +0 -0
  62. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/Adobe-Korea1-UCS2.bcmap +0 -0
  63. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/B5-H.bcmap +0 -0
  64. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/B5-V.bcmap +0 -0
  65. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/B5pc-H.bcmap +0 -0
  66. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/B5pc-V.bcmap +0 -0
  67. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/CNS-EUC-H.bcmap +0 -0
  68. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/CNS-EUC-V.bcmap +0 -0
  69. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/CNS1-H.bcmap +0 -0
  70. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/CNS1-V.bcmap +0 -0
  71. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/CNS2-H.bcmap +0 -0
  72. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/CNS2-V.bcmap +3 -0
  73. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/ETHK-B5-H.bcmap +0 -0
  74. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/ETHK-B5-V.bcmap +0 -0
  75. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/ETen-B5-H.bcmap +0 -0
  76. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/ETen-B5-V.bcmap +0 -0
  77. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/ETenms-B5-H.bcmap +3 -0
  78. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/ETenms-B5-V.bcmap +0 -0
  79. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/EUC-H.bcmap +0 -0
  80. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/EUC-V.bcmap +0 -0
  81. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/Ext-H.bcmap +0 -0
  82. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/Ext-RKSJ-H.bcmap +0 -0
  83. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/Ext-RKSJ-V.bcmap +0 -0
  84. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/Ext-V.bcmap +0 -0
  85. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/GB-EUC-H.bcmap +0 -0
  86. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/GB-EUC-V.bcmap +0 -0
  87. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/GB-H.bcmap +4 -0
  88. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/GB-V.bcmap +0 -0
  89. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/GBK-EUC-H.bcmap +0 -0
  90. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/GBK-EUC-V.bcmap +0 -0
  91. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/GBK2K-H.bcmap +0 -0
  92. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/GBK2K-V.bcmap +0 -0
  93. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/GBKp-EUC-H.bcmap +0 -0
  94. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/GBKp-EUC-V.bcmap +0 -0
  95. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/GBT-EUC-H.bcmap +0 -0
  96. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/GBT-EUC-V.bcmap +0 -0
  97. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/GBT-H.bcmap +0 -0
  98. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/GBT-V.bcmap +0 -0
  99. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/GBTpc-EUC-H.bcmap +0 -0
  100. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/GBTpc-EUC-V.bcmap +0 -0
  101. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/GBpc-EUC-H.bcmap +0 -0
  102. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/GBpc-EUC-V.bcmap +0 -0
  103. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/H.bcmap +0 -0
  104. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/HKdla-B5-H.bcmap +0 -0
  105. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/HKdla-B5-V.bcmap +0 -0
  106. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/HKdlb-B5-H.bcmap +0 -0
  107. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/HKdlb-B5-V.bcmap +0 -0
  108. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/HKgccs-B5-H.bcmap +0 -0
  109. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/HKgccs-B5-V.bcmap +0 -0
  110. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/HKm314-B5-H.bcmap +0 -0
  111. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/HKm314-B5-V.bcmap +0 -0
  112. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/HKm471-B5-H.bcmap +0 -0
  113. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/HKm471-B5-V.bcmap +0 -0
  114. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/HKscs-B5-H.bcmap +0 -0
  115. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/HKscs-B5-V.bcmap +0 -0
  116. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/Hankaku.bcmap +0 -0
  117. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/Hiragana.bcmap +0 -0
  118. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/KSC-EUC-H.bcmap +0 -0
  119. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/KSC-EUC-V.bcmap +0 -0
  120. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/KSC-H.bcmap +0 -0
  121. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/KSC-Johab-H.bcmap +0 -0
  122. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/KSC-Johab-V.bcmap +0 -0
  123. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/KSC-V.bcmap +0 -0
  124. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/KSCms-UHC-H.bcmap +0 -0
  125. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/KSCms-UHC-HW-H.bcmap +0 -0
  126. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/KSCms-UHC-HW-V.bcmap +0 -0
  127. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/KSCms-UHC-V.bcmap +0 -0
  128. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/KSCpc-EUC-H.bcmap +0 -0
  129. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/KSCpc-EUC-V.bcmap +0 -0
  130. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/Katakana.bcmap +0 -0
  131. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/LICENSE +36 -0
  132. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/NWP-H.bcmap +0 -0
  133. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/NWP-V.bcmap +0 -0
  134. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/RKSJ-H.bcmap +0 -0
  135. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/RKSJ-V.bcmap +0 -0
  136. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/Roman.bcmap +0 -0
  137. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/UniCNS-UCS2-H.bcmap +0 -0
  138. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/UniCNS-UCS2-V.bcmap +0 -0
  139. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/UniCNS-UTF16-H.bcmap +0 -0
  140. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/UniCNS-UTF16-V.bcmap +0 -0
  141. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/UniCNS-UTF32-H.bcmap +0 -0
  142. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/UniCNS-UTF32-V.bcmap +0 -0
  143. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/UniCNS-UTF8-H.bcmap +0 -0
  144. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/UniCNS-UTF8-V.bcmap +0 -0
  145. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/UniGB-UCS2-H.bcmap +0 -0
  146. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/UniGB-UCS2-V.bcmap +0 -0
  147. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/UniGB-UTF16-H.bcmap +0 -0
  148. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/UniGB-UTF16-V.bcmap +0 -0
  149. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/UniGB-UTF32-H.bcmap +0 -0
  150. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/UniGB-UTF32-V.bcmap +0 -0
  151. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/UniGB-UTF8-H.bcmap +0 -0
  152. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/UniGB-UTF8-V.bcmap +0 -0
  153. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/UniJIS-UCS2-H.bcmap +0 -0
  154. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/UniJIS-UCS2-HW-H.bcmap +0 -0
  155. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/UniJIS-UCS2-HW-V.bcmap +0 -0
  156. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/UniJIS-UCS2-V.bcmap +0 -0
  157. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/UniJIS-UTF16-H.bcmap +0 -0
  158. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/UniJIS-UTF16-V.bcmap +0 -0
  159. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/UniJIS-UTF32-H.bcmap +0 -0
  160. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/UniJIS-UTF32-V.bcmap +0 -0
  161. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/UniJIS-UTF8-H.bcmap +0 -0
  162. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/UniJIS-UTF8-V.bcmap +0 -0
  163. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/UniJIS2004-UTF16-H.bcmap +0 -0
  164. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/UniJIS2004-UTF16-V.bcmap +0 -0
  165. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/UniJIS2004-UTF32-H.bcmap +0 -0
  166. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/UniJIS2004-UTF32-V.bcmap +0 -0
  167. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/UniJIS2004-UTF8-H.bcmap +0 -0
  168. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/UniJIS2004-UTF8-V.bcmap +0 -0
  169. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/UniJISPro-UCS2-HW-V.bcmap +0 -0
  170. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/UniJISPro-UCS2-V.bcmap +0 -0
  171. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/UniJISPro-UTF8-V.bcmap +0 -0
  172. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/UniJISX0213-UTF32-H.bcmap +0 -0
  173. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/UniJISX0213-UTF32-V.bcmap +0 -0
  174. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/UniJISX02132004-UTF32-H.bcmap +0 -0
  175. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/UniJISX02132004-UTF32-V.bcmap +0 -0
  176. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/UniKS-UCS2-H.bcmap +0 -0
  177. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/UniKS-UCS2-V.bcmap +0 -0
  178. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/UniKS-UTF16-H.bcmap +0 -0
  179. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/UniKS-UTF16-V.bcmap +0 -0
  180. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/UniKS-UTF32-H.bcmap +0 -0
  181. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/UniKS-UTF32-V.bcmap +0 -0
  182. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/UniKS-UTF8-H.bcmap +0 -0
  183. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/UniKS-UTF8-V.bcmap +0 -0
  184. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/V.bcmap +0 -0
  185. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/cmaps/WP-Symbol.bcmap +0 -0
  186. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/iccs/CGATS001Compat-v2-micro.icc +0 -0
  187. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/iccs/LICENSE +116 -0
  188. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/standard_fonts/FoxitDingbats.pfb +0 -0
  189. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/standard_fonts/FoxitFixed.pfb +0 -0
  190. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/standard_fonts/FoxitFixedBold.pfb +0 -0
  191. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/standard_fonts/FoxitFixedBoldItalic.pfb +0 -0
  192. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/standard_fonts/FoxitFixedItalic.pfb +0 -0
  193. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/standard_fonts/FoxitSerif.pfb +0 -0
  194. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/standard_fonts/FoxitSerifBold.pfb +0 -0
  195. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/standard_fonts/FoxitSerifBoldItalic.pfb +0 -0
  196. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/standard_fonts/FoxitSerifItalic.pfb +0 -0
  197. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/standard_fonts/FoxitSymbol.pfb +0 -0
  198. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/standard_fonts/LICENSE_FOXIT +27 -0
  199. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/standard_fonts/LICENSE_LIBERATION +363 -0
  200. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/standard_fonts/LiberationSans-Bold.ttf +0 -0
  201. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/standard_fonts/LiberationSans-BoldItalic.ttf +0 -0
  202. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/standard_fonts/LiberationSans-Italic.ttf +0 -0
  203. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/standard_fonts/LiberationSans-Regular.ttf +0 -0
  204. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/wasm/LICENSE_JBIG2 +196 -0
  205. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/wasm/LICENSE_OPENJPEG +39 -0
  206. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/wasm/LICENSE_PDFJS_JBIG2 +13 -0
  207. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/wasm/LICENSE_PDFJS_OPENJPEG +22 -0
  208. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/wasm/LICENSE_PDFJS_QCMS +19 -0
  209. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/wasm/LICENSE_QCMS +21 -0
  210. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/wasm/jbig2.wasm +0 -0
  211. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/wasm/jbig2_nowasm_fallback.js +15 -0
  212. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/wasm/openjpeg.wasm +0 -0
  213. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/wasm/openjpeg_nowasm_fallback.js +17 -0
  214. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/wasm/qcms_bg.wasm +0 -0
  215. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/wasm/quickjs-eval.js +16 -0
  216. beamerpkg-1.3.0/src/beamerpkg/static/spatial/pdfjs/wasm/quickjs-eval.wasm +0 -0
  217. beamerpkg-1.2.0/PKG-INFO +0 -285
  218. beamerpkg-1.2.0/README.md +0 -264
  219. beamerpkg-1.2.0/src/beamerpkg/pdf_media.py +0 -94
  220. {beamerpkg-1.2.0 → beamerpkg-1.3.0}/LICENSE +0 -0
  221. {beamerpkg-1.2.0 → beamerpkg-1.3.0}/src/beamerpkg/tex/beamerpkg.sty +0 -0
@@ -0,0 +1,428 @@
1
+ Metadata-Version: 2.4
2
+ Name: beamerpkg
3
+ Version: 1.3.0
4
+ Summary: Portable Beamer/PDF presentation bundles with external media assets
5
+ License-Expression: Apache-2.0
6
+ License-File: LICENSE
7
+ Author: Uli Kerzel
8
+ Requires-Python: >=3.11,<4.0
9
+ Classifier: Programming Language :: Python :: 3
10
+ Classifier: Programming Language :: Python :: 3.11
11
+ Classifier: Programming Language :: Python :: 3.12
12
+ Classifier: Programming Language :: Python :: 3.13
13
+ Classifier: Programming Language :: Python :: 3.14
14
+ Classifier: Programming Language :: Python :: 3.15
15
+ Requires-Dist: pypdf (>=5.0,<7.0)
16
+ Project-URL: Homepage, https://github.com/ukerzel/beamerpkg
17
+ Project-URL: Issues, https://github.com/ukerzel/beamerpkg/issues
18
+ Project-URL: Repository, https://github.com/ukerzel/beamerpkg
19
+ Description-Content-Type: text/markdown
20
+
21
+ # beamerpkg
22
+
23
+ `beamerpkg` makes multimedia Beamer presentations portable without replacing
24
+ Beamer's rendering model. One archive can be presented through two first-class
25
+ routes: pdfpc, usually the main one, and a spatial canvas. Neither route requires
26
+ the other, and every package must work on both.
27
+
28
+ ```text
29
+ Beamer -> ordinary PDF + external MP4 files -> one relocatable .beamerpkg
30
+ |
31
+ +--------------------+--------------------+
32
+ v v
33
+ beamerpkg present (pdfpc) beamerpkg spatial (canvas)
34
+ two screens, notes, timer zoomable canvas in a browser
35
+ ```
36
+
37
+ Equations, TikZ, columns, backgrounds, arrows, Beamer overlays, fonts, and all
38
+ other slide layout remain PDF. The package layer only restores external media at
39
+ the relative paths already referenced by the PDF.
40
+
41
+ ## Status
42
+
43
+ The container/path MVP was validated on **2026-09-30** with pdfpc under WSL/WSLg:
44
+ the packaged PDF rendered normally and the packaged H.264 video played in the
45
+ TeX-defined rectangle. The full-resolution autoplay demo also works.
46
+
47
+ Version 0.2 added **wrapperless media discovery**: for standard Beamer
48
+ `multimedia/\movie` documents, `beamerpkg pack` reads the PDF annotation and
49
+ collects the referenced local media automatically. A `.beamerpkg-assets`
50
+ sidecar is no longer required for normal use.
51
+
52
+ Version 1.2.0 made media optional. A PDF without movie references packs as
53
+ PDF-only (plus the `.pdfpc` notes and `--source` payload, if any), with an empty
54
+ `assets` list.
55
+
56
+ Version 1.3.0 adds the spatial presentation route, bundled offline browser
57
+ resources, and the packaging/media fixes described below. The pdfpc route and
58
+ v1 archive format remain supported. See the
59
+ [1.3.0 tag](https://github.com/ukerzel/beamerpkg/tree/v1.3.0).
60
+
61
+ ### Two presentation routes
62
+
63
+ The same `.beamerpkg` supports both routes. Both are first-class, though pdfpc
64
+ will usually be the main one:
65
+
66
+ ```bash
67
+ beamerpkg present talk.beamerpkg # pdfpc: two screens, speaker notes, timer
68
+ beamerpkg spatial talk.beamerpkg # spatial: the slides on a zoomable canvas
69
+ ```
70
+
71
+ Pick a route per talk, or use both with the same archive. Neither depends on
72
+ the other: `present` needs no browser, layout or frontend tooling, and `spatial`
73
+ needs no pdfpc. A change to packing, the archive or media discovery has to keep
74
+ both routes working.
75
+
76
+ The spatial route shows the unchanged PDF on a canvas. It supports explicit
77
+ overlay groups, whole-frame and detail viewpoints, guided paths, exploring and
78
+ returning, and both packaged-video forms. A spatial arrangement lives beside the
79
+ archive in `talk.spatial.json`; the archive format is the same for both routes.
80
+ Spatial is read-only for now: there is no graphical editor or write API yet.
81
+
82
+ From a checkout, build the pinned frontend before using `spatial`, following
83
+ the setup below. Built wheels include its offline assets and need no end-user
84
+ Node/npm or pdfpc. `examples/build_demo.sh` builds the demo talk for both routes. See the
85
+ [try-it guide](https://github.com/ukerzel/beamerpkg/blob/main/docs/spatial/USER_GUIDE.md),
86
+ [first-MVP contract](https://github.com/ukerzel/beamerpkg/blob/main/docs/SPATIAL_MVP.md), and
87
+ [technical evaluation](https://github.com/ukerzel/beamerpkg/blob/main/docs/spatial/PROTOTYPE_EVALUATION.md).
88
+
89
+ The viewer includes grouped overlays, whole-frame and detail views, named
90
+ paths, a whole-canvas overview with clickable steps, a minimap, viewpoint
91
+ previews, fullscreen and keyboard/clicker controls. Temporary detours retain
92
+ the guided position; nested returns restore overlays, camera and paused media.
93
+ The demo includes separate backup clusters for questions. See the guide for
94
+ the controls, supported media options and size limits.
95
+
96
+ ## Package format
97
+
98
+ A `.beamerpkg` is an ordinary ZIP archive:
99
+
100
+ ```text
101
+ talk.beamerpkg
102
+ ├── manifest.json
103
+ ├── talk.pdf
104
+ ├── talk.pdfpc # optional
105
+ ├── media/
106
+ │ └── simulation.mp4
107
+ └── source/ # optional editable source snapshot
108
+ ├── talk.tex
109
+ ├── figures/
110
+ └── references.bib
111
+ ```
112
+
113
+ The manifest contains SHA-256 hashes and byte sizes. Runtime media are restored
114
+ at the relative locations used by Beamer; harmless `./` and repeated path
115
+ separators are normalized without changing the PDF. Optional editable sources
116
+ live under `source/` and are recorded separately in the manifest.
117
+
118
+ ## Install the released package
119
+
120
+ ```bash
121
+ python -m pip install beamerpkg
122
+ beamerpkg present talk.beamerpkg
123
+ ```
124
+
125
+ Version 1.3.0 includes both presentation routes. Use
126
+ `beamerpkg spatial talk.beamerpkg` for the spatial viewer; no Node/npm is
127
+ needed when installing the published wheel.
128
+
129
+ ## Install for development
130
+
131
+ Requires Python 3.11+ and Poetry. To present through pdfpc, install pdfpc and
132
+ the system codecs required by your media. Python packing and inspection do
133
+ not need pdfpc, TeX or Node.
134
+
135
+ ```bash
136
+ poetry install
137
+ ```
138
+
139
+ The only runtime Python dependency is `pypdf`, used to inspect PDF annotations.
140
+
141
+ For spatial presentation from a checkout, also install Node 22.13+ and npm
142
+ (as required by the pinned frontend dependencies) and build the bundled frontend:
143
+
144
+ ```bash
145
+ (cd frontend/spatial && npm ci && npm run build)
146
+ ```
147
+
148
+ Built wheels include these resources. End users of a built wheel need a browser
149
+ for spatial presentation, but no Node/npm. Building the example PDFs requires
150
+ a TeX installation with Beamer, TikZ/PGFPlots, `slashed`, `pdfpc` and
151
+ `appendixnumberbeamer`; the video and poster are already included.
152
+
153
+ ## CLI reference
154
+
155
+ Run `beamerpkg COMMAND --help` for command-specific help.
156
+
157
+ | Command | Options and behavior |
158
+ |---|---|
159
+ | `pack PDF` | `--root DIR` sets the media root (default: PDF directory); `--output PATH` / `-o PATH` selects the archive (default: PDF stem plus `.beamerpkg`). |
160
+ | `pack PDF --assets FILE` | Uses an explicit asset list instead of discovering PDF media. |
161
+ | `pack PDF --notes FILE` | Selects notes explicitly; otherwise includes a same-stem `.pdfpc` file beside the PDF when present. |
162
+ | `pack PDF --source PATH` | Repeat to include editable files/directories relative to `--source-root DIR` (default: media root). |
163
+ | `inspect ARCHIVE` | Validates the archive and prints its inventory; `--json` prints the validated manifest. |
164
+ | `present ARCHIVE` | Extracts temporarily and launches pdfpc; `--presenter EXECUTABLE` selects another executable. Arguments after `--` are passed to the presenter. |
165
+ | `spatial ARCHIVE` | Starts the local viewer; `--no-browser` prints the URL without opening a browser. |
166
+ | `texdir` | Prints the installed directory containing `beamerpkg.sty`. |
167
+
168
+ `pack` prints the output path. Recognized package-validation errors print a
169
+ message on stderr and return status 2. `present` returns the presenter's exit
170
+ status and removes its temporary extraction when the subprocess exits.
171
+
172
+ ## Optional editable source payload
173
+
174
+ A presentation package can also carry the LaTeX source and authoring assets so
175
+ the recipient can modify and rebuild the presentation without editing the PDF.
176
+
177
+ Source inclusion is explicit. Pass a source root and repeat `--source` for the
178
+ files or directories to preserve:
179
+
180
+ ```bash
181
+ poetry run beamerpkg pack build/talk.pdf \
182
+ --root build \
183
+ --source-root . \
184
+ --source talk.tex \
185
+ --source figures \
186
+ --source references.bib
187
+ ```
188
+
189
+ Those files are stored with their relative structure under `source/`:
190
+
191
+ ```text
192
+ source/
193
+ ├── talk.tex
194
+ ├── figures/
195
+ │ └── plot.png
196
+ └── references.bib
197
+ ```
198
+
199
+ Because `.beamerpkg` is an ordinary ZIP archive, a recipient can unpack it,
200
+ edit the source tree, and rebuild with their normal LaTeX toolchain. Runtime
201
+ presentation files remain separate, so including sources never changes pdfpc
202
+ playback.
203
+
204
+ The source snapshot is deliberately opt-in and explicit: beamerpkg does not
205
+ guess which files constitute a reproducible authoring project. Directories are
206
+ included recursively; source paths must remain within `--source-root`, and
207
+ symlinks are rejected, including symlinked parent directories within a selected
208
+ path. This is a selected source snapshot; dependencies are not discovered and
209
+ the source is not rebuilt automatically.
210
+
211
+ An asset needed both by the runtime presentation and by the editable source tree
212
+ may be stored twice. This keeps both trees self-contained and avoids symlink or
213
+ viewer-specific deduplication behavior in the package format.
214
+
215
+ ## Standard Beamer: no Beamerpkg LaTeX helper required
216
+
217
+ The wrapperless standard-Beamer route is **click-to-start in pdfpc**. This is
218
+ the expected behavior of the normal `\movie` annotation path; autoplay is a
219
+ separate pdfpc-specific feature described below.
220
+
221
+ Write an ordinary Beamer movie:
222
+
223
+ ```latex
224
+ \usepackage{multimedia}
225
+
226
+ \movie[loop,showcontrols]
227
+ {\includegraphics[width=\linewidth]{media/poster.png}}
228
+ {media/video.mp4}
229
+ ```
230
+
231
+ Compile it normally, then package it:
232
+
233
+ ```bash
234
+ poetry run beamerpkg pack talk.pdf --root .
235
+ ```
236
+
237
+ The packer discovers the external `/Movie` file reference from the PDF,
238
+ validates that it is a safe local relative path, and includes it at the same path
239
+ inside the container.
240
+
241
+ An explicit sidecar remains available as a compatibility/fallback route:
242
+
243
+ ```bash
244
+ poetry run beamerpkg pack talk.pdf --root . --assets talk.beamerpkg-assets
245
+ ```
246
+
247
+ The asset list contains one path per line, relative to the media root. Blank
248
+ lines and lines starting with `#` are ignored; repeated paths are collapsed.
249
+ Selection order is explicit `--assets`, then PDF discovery, then a same-stem
250
+ `.beamerpkg-assets` fallback if discovery found no media. An empty explicit
251
+ list is accepted. Supported references to missing or unsafe files still fail.
252
+
253
+ | Annotation | Packing | Spatial playback |
254
+ |---|---|---|
255
+ | Standard `/Movie` | Discovers a string or `/UF` / `/F` file specification. | Uses the annotation rectangle; accepts `/Mode /Once` or `/Repeat` and boolean `/ShowControls`. Missing flags remain unknown. |
256
+ | pdfpc `/Link` + `/Launch` | Discovers the file before `?` when options include `autostart`, `loop`, `start` or `stop`. Unrelated launch actions are ignored. | Supports `autostart` and `loop` only, without values or duplicates. Other encoded options fail visibly. |
257
+
258
+ Spatial playback also requires a visible, nonempty rectangle and a declared
259
+ local asset. Embedded media and arbitrary PDF action execution are unsupported.
260
+ Browser codec and autoplay policies still apply; see the
261
+ [media and support limits](https://github.com/ukerzel/beamerpkg/blob/main/docs/spatial/USER_GUIDE.md#media-and-support-limits).
262
+
263
+ ## pdfpc autoplay
264
+
265
+ Autoplay is viewer-specific rather than part of the container format. For pdfpc,
266
+ the bundled LaTeX helper `beamerpkg.sty` provides:
267
+
268
+ ```latex
269
+ \pkgpdfpcmovie[autostart&loop]
270
+ {\includegraphics[width=\linewidth]{media/poster.png}}
271
+ {media/video.mp4}
272
+ ```
273
+
274
+ The helper ships with the Python package. `beamerpkg texdir` prints its
275
+ directory, so LaTeX can find it without copying files:
276
+
277
+ ```bash
278
+ TEXINPUTS="$(beamerpkg texdir)//:" pdflatex talk.tex
279
+ ```
280
+
281
+ In a repository checkout it lives at `src/beamerpkg/tex/beamerpkg.sty`.
282
+
283
+ This emits pdfpc's `run:` launch-link mechanism. The packer also recognizes
284
+ these pdfpc media launch links and strips their query options when collecting
285
+ the underlying media file.
286
+
287
+ ## pdfpc speaker notes and settings
288
+
289
+ If a same-name pdfpc sidecar exists beside the PDF, it is included automatically:
290
+
291
+ ```text
292
+ talk.pdf
293
+ talk.pdfpc
294
+ ```
295
+
296
+ ```bash
297
+ poetry run beamerpkg pack talk.pdf --root .
298
+ ```
299
+
300
+ The resulting package records `talk.pdfpc` separately as `notes` in the
301
+ manifest and restores it beside `talk.pdf` before launching pdfpc. This keeps
302
+ speaker notes and other pdfpc presentation metadata portable without putting
303
+ them into the PDF itself.
304
+
305
+ Use `--notes path/to/selected-notes.json` to select another notes file. Its bytes
306
+ are restored as `talk.pdfpc`, matching the presentation name so pdfpc can find it.
307
+ Provide a pdfpc-compatible notes file; packing does not convert its contents.
308
+
309
+ The repository demo contains `examples/demo.pdfpc` with a visible speaker note
310
+ on the first page so this behavior can be checked in presenter view.
311
+
312
+ ## Inspect and present
313
+
314
+ ```bash
315
+ poetry run beamerpkg inspect talk.beamerpkg
316
+ poetry run beamerpkg present talk.beamerpkg
317
+ ```
318
+
319
+ `beamerpkg present` validates the archive, extracts it to a temporary directory
320
+ while preserving all relative paths, launches `pdfpc` from that directory, and
321
+ keeps the directory alive until the presenter exits. Arguments after `--` are
322
+ forwarded verbatim to the presenter before the PDF filename.
323
+
324
+ For a single physical monitor, keep both pdfpc windows available and switch
325
+ between presenter and audience views with the desktop window switcher.
326
+
327
+ When invoking through Poetry, pass pdfpc options directly after the package:
328
+
329
+ ```bash
330
+ poetry run beamerpkg present talk.beamerpkg -w both
331
+ ```
332
+
333
+ Poetry may consume a literal `--` separator before the Beamerpkg CLI sees it.
334
+ When invoking an installed `beamerpkg` executable directly, the explicit
335
+ separator form is also supported:
336
+
337
+ ```bash
338
+ beamerpkg present talk.beamerpkg -- -w both
339
+ ```
340
+
341
+ This is intentionally transparent passthrough rather than a Beamerpkg-specific
342
+ single-monitor mode. Other pdfpc options work the same way.
343
+
344
+ ## Validation and recent fixes
345
+
346
+ Packing rejects unsafe paths, source symlinks, duplicate member names,
347
+ file/directory collisions and output paths that would overwrite selected inputs.
348
+ Archive validation checks declared sizes and hashes and rejects undeclared
349
+ files, noncanonical manifest paths and ZIP symlinks. A failed archive write
350
+ keeps an existing output bundle and removes temporary output.
351
+
352
+ The release-preparation fixes also preserve explicit notes under the PDF stem,
353
+ decode `/ShowControls false` correctly, align relative media-path normalization
354
+ between routes, and turn the tested malformed ZIP/PDF/layout cases into readable
355
+ errors. The 2026-11-03 check passed 208 Python tests and 27 frontend tests;
356
+ Python coverage was 98.25% for statements and 95.39% for branches. This is
357
+ software validation on Python 3.14.4/Chromium, not a broader platform claim.
358
+ See [contributor checks](https://github.com/ukerzel/beamerpkg/blob/main/CONTRIBUTING.md) and the [review record](https://github.com/ukerzel/beamerpkg/blob/main/WORKLOG.md).
359
+
360
+ ## Demo
361
+
362
+ The demo uses the full repository assets, a pdfpc metadata sidecar, and an
363
+ editable source snapshot:
364
+
365
+ - `examples/media/gemini_generated_video_b2693757.mp4`
366
+ - `examples/media/video-poster_big.png`
367
+ - `examples/demo.pdfpc` (speaker notes / pdfpc metadata)
368
+ - `source/examples/demo.tex`
369
+ - `source/examples/media/...`
370
+ - `source/src/beamerpkg/tex/beamerpkg.sty`
371
+
372
+ The mixed demo also contains two lightweight Beamer/PDF motion examples before
373
+ the video slides:
374
+
375
+ - a short `\transfade[duration=0.2]` page transition;
376
+ - a three-state manual overlay sequence that progressively builds
377
+ `Input -> Model -> Result` and remains fully reversible with the arrow keys.
378
+
379
+ Both are encoded in the PDF itself; `beamerpkg` does not need to discover or
380
+ package anything special for them. The overlay example deliberately avoids
381
+ `\transduration`: timed PDF pages restart their timer when revisited, which
382
+ makes backward navigation jump forward again.
383
+
384
+ After installing the Python dependencies, TeX packages and (for spatial use)
385
+ building the frontend, build both demo archives:
386
+
387
+ ```bash
388
+ ./examples/build_demo.sh
389
+
390
+ poetry run beamerpkg present examples/demo.beamerpkg
391
+ poetry run beamerpkg present examples/wrapperless.beamerpkg
392
+ poetry run beamerpkg spatial examples/demo.beamerpkg
393
+ ```
394
+
395
+ This script regenerates the example PDFs/packages and writes
396
+ `examples/demo.spatial.json`. To transport the authored demo, copy that sidecar
397
+ with `demo.beamerpkg`; pdfpc needs only the archive. For isolated developer
398
+ fixtures that preserve example outputs, run
399
+ `poetry run python tools/build_spatial_fixtures.py`.
400
+
401
+ `examples/demo.tex` also embeds speaker notes and a 10-minute countdown via
402
+ the standard `pdfpc` LaTeX package, so they travel inside the PDF itself. The
403
+ title page deliberately has no embedded note: pdfpc lets an embedded note
404
+ replace the sidecar note for the same page, so page 1 keeps showing the
405
+ `examples/demo.pdfpc` note and both routes can be checked in presenter view.
406
+
407
+ `examples/wrapperless.tex` imports only Beamer's `multimedia` package. It is
408
+ the integration proof that packaging no longer depends on a Beamerpkg-specific
409
+ LaTeX command. In pdfpc this wrapperless example is click-to-start.
410
+
411
+ The mixed `examples/demo.tex` intentionally contains two video slides: one
412
+ standard wrapperless `\movie` slide that is click-to-start, followed by one
413
+ pdfpc-specific `\pkgpdfpcmovie[autostart&loop]` slide that starts
414
+ automatically.
415
+
416
+ ## Documentation
417
+
418
+ - [Spatial user guide](https://github.com/ukerzel/beamerpkg/blob/main/docs/spatial/USER_GUIDE.md): setup, demo, controls,
419
+ current sidecar schema and support limits.
420
+ - [Contributing](https://github.com/ukerzel/beamerpkg/blob/main/CONTRIBUTING.md) and [frontend development](https://github.com/ukerzel/beamerpkg/blob/main/frontend/spatial/README.md):
421
+ Python/browser checks and installed-distribution verification.
422
+ - [Current status and release preparation](https://github.com/ukerzel/beamerpkg/blob/main/docs/NEXT_STEPS.md): completed work,
423
+ release steps and deferred scope.
424
+ - [MVP history](https://github.com/ukerzel/beamerpkg/blob/main/docs/MVP.md), [first spatial contract](https://github.com/ukerzel/beamerpkg/blob/main/docs/SPATIAL_MVP.md),
425
+ [broader design](https://github.com/ukerzel/beamerpkg/blob/main/docs/SPATIAL_PLAN.md) and dated spatial reports: decisions
426
+ and evidence at their recorded stages. The broader editor/save design is
427
+ not the implemented feature set.
428
+