mirror of
https://github.com/jeertmans/manim-slides.git
synced 2025-07-15 00:52:15 +08:00
Merge branch 'main' into reorganize
This commit is contained in:
@ -18,82 +18,75 @@
|
||||
<body>
|
||||
<div class="reveal">
|
||||
<div class="slides">
|
||||
{%- for presentation_config in presentation_configs -%}
|
||||
{% set outer_loop = loop %}
|
||||
{%- for slide_config in presentation_config.slides -%}
|
||||
{%- if data_uri -%}
|
||||
{% for presentation_config in presentation_configs -%}
|
||||
{%- set outer_loop = loop %}
|
||||
{% for slide_config in presentation_config.slides %}
|
||||
{% if one_file %}
|
||||
{% set file = file_to_data_uri(slide_config.file) %}
|
||||
{%- else -%}
|
||||
{% set file = assets_dir / slide_config.file.name %}
|
||||
{%- endif -%}
|
||||
<section
|
||||
data-background-size={{ background_size }}
|
||||
data-background-color="{{ presentation_config.background_color }}"
|
||||
data-background-video="{{ file }}"
|
||||
{% if loop.index == 1 and outer_loop.index == 1 -%}
|
||||
data-background-video-muted
|
||||
{%- endif %}
|
||||
{% if slide_config.loop -%}
|
||||
data-background-video-loop
|
||||
{%- endif -%}
|
||||
{% if slide_config.auto_next -%}
|
||||
data-autoslide="{{ get_duration_ms(slide_config.file) }}"
|
||||
{%- endif -%}>
|
||||
{% if slide_config.notes != "" -%}
|
||||
<aside class="notes" data-markdown>{{ slide_config.notes }}</aside>
|
||||
{%- endif %}
|
||||
</section>
|
||||
{%- endfor -%}
|
||||
{%- endfor -%}
|
||||
{% else %}
|
||||
{% set file = assets_dir / (prefix(outer_loop.index0) + slide_config.file.name) %}
|
||||
{% endif %}
|
||||
<section
|
||||
data-background-size={{ background_size }}
|
||||
data-background-color="{{ presentation_config.background_color }}"
|
||||
data-background-video="{{ file }}"
|
||||
{% if loop.index == 1 and outer_loop.index == 1 %}
|
||||
data-background-video-muted
|
||||
{% endif %}
|
||||
{% if slide_config.loop %}
|
||||
data-background-video-loop
|
||||
{% endif %}
|
||||
{% if slide_config.auto_next %}
|
||||
data-autoslide="{{ get_duration_ms(slide_config.file) }}"
|
||||
{% endif %}
|
||||
>
|
||||
{% if slide_config.notes != "" %}
|
||||
<aside class="notes" data-markdown>{{ slide_config.notes }}</aside>
|
||||
{% endif %}
|
||||
</section>
|
||||
{% endfor %}
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/reveal.js/{{ reveal_version }}/reveal.min.js"></script>
|
||||
|
||||
<!-- To include plugins, see: https://revealjs.com/plugins/ -->
|
||||
|
||||
{% if has_notes -%}
|
||||
{% if has_notes %}
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/reveal.js/{{ reveal_version }}/plugin/markdown/markdown.min.js"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/reveal.js/{{ reveal_version }}/plugin/notes/notes.min.js"></script>
|
||||
{%- endif -%}
|
||||
{% endif %}
|
||||
|
||||
<!-- <script src="index.js"></script> -->
|
||||
<script>
|
||||
Reveal.initialize({
|
||||
{% if has_notes -%}
|
||||
plugins: [ RevealMarkdown, RevealNotes ],
|
||||
{%- endif %}
|
||||
{% if has_notes %}
|
||||
/// The list of RevealJS plugins.
|
||||
plugins: [ RevealMarkdown, RevealNotes ],
|
||||
{% endif %}
|
||||
// The "normal" size of the presentation, aspect ratio will
|
||||
// be preserved when the presentation is scaled to fit different
|
||||
// resolutions. Can be specified using percentage units.
|
||||
width: {{ width }},
|
||||
height: {{ height }},
|
||||
|
||||
// Factor of the display size that should remain empty around
|
||||
// the content
|
||||
margin: {{ margin }},
|
||||
|
||||
// Bounds for smallest/largest possible scale to apply to content
|
||||
minScale: {{ min_scale }},
|
||||
maxScale: {{ max_scale }},
|
||||
|
||||
// Display presentation control arrows
|
||||
controls: {{ controls }},
|
||||
|
||||
// Help the user learn the controls by providing hints, for example by
|
||||
// bouncing the down arrow when they first encounter a vertical slide
|
||||
controlsTutorial: {{ controls_tutorial }},
|
||||
|
||||
// Determines where controls appear, "edges" or "bottom-right"
|
||||
controlsLayout: {{ controls_layout }},
|
||||
|
||||
// Visibility rule for backwards navigation arrows; "faded", "hidden"
|
||||
// or "visible"
|
||||
controlsBackArrows: {{ controls_back_arrows }},
|
||||
|
||||
// Display a presentation progress bar
|
||||
progress: {{ progress }},
|
||||
|
||||
// Display the page number of the current slide
|
||||
// - true: Show slide number
|
||||
// - false: Hide slide number
|
||||
@ -109,55 +102,43 @@
|
||||
// object and return an array with one string [slideNumber] or
|
||||
// three strings [n1,delimiter,n2]. See #formatSlideNumber().
|
||||
slideNumber: {{ slide_number }},
|
||||
|
||||
// Can be used to limit the contexts in which the slide number appears
|
||||
// - "all": Always show the slide number
|
||||
// - "print": Only when printing to PDF
|
||||
// - "speaker": Only in the speaker view
|
||||
showSlideNumber: {{ show_slide_number }},
|
||||
|
||||
// Use 1 based indexing for # links to match slide number (default is zero
|
||||
// based)
|
||||
hashOneBasedIndex: {{ hash_one_based_index }},
|
||||
|
||||
// Add the current slide number to the URL hash so that reloading the
|
||||
// page/copying the URL will return you to the same slide
|
||||
hash: {{ hash }},
|
||||
|
||||
// Flags if we should monitor the hash and change slides accordingly
|
||||
respondToHashChanges: {{ respond_to_hash_changes }},
|
||||
|
||||
// Enable support for jump-to-slide navigation shortcuts
|
||||
jumpToSlide: {{ jump_to_slide }},
|
||||
// Push each slide change to the browser history. Implies `hash: true`
|
||||
history: {{ history }},
|
||||
|
||||
// Enable keyboard shortcuts for navigation
|
||||
keyboard: {{ keyboard }},
|
||||
|
||||
// Optional function that blocks keyboard events when retuning false
|
||||
//
|
||||
// If you set this to 'focused', we will only capture keyboard events
|
||||
// for embedded decks when they are in focus
|
||||
keyboardCondition: {{ keyboard_condition }},
|
||||
|
||||
// Disables the default reveal.js slide layout (scaling and centering)
|
||||
// so that you can use custom CSS layout
|
||||
disableLayout: {{ disable_layout }},
|
||||
|
||||
// Enable the slide overview mode
|
||||
overview: {{ overview }},
|
||||
|
||||
// Vertical centering of slides
|
||||
center: {{ center }},
|
||||
|
||||
// Enables touch navigation on devices with touch input
|
||||
touch: {{ touch }},
|
||||
|
||||
// Loop the presentation
|
||||
loop: {{ loop }},
|
||||
|
||||
// Change the presentation direction to be RTL
|
||||
rtl: {{ rtl }},
|
||||
|
||||
// Changes the behavior of our navigation directions.
|
||||
//
|
||||
// "default"
|
||||
@ -183,159 +164,146 @@
|
||||
// from 1.3 -> 2.1. If "grid" is used, the same navigation takes you
|
||||
// from 1.3 -> 2.3.
|
||||
navigationMode: {{ navigation_mode }},
|
||||
|
||||
// Randomizes the order of slides each time the presentation loads
|
||||
shuffle: {{ shuffle }},
|
||||
|
||||
// Turns fragments on and off globally
|
||||
fragments: {{ fragments }},
|
||||
|
||||
// Flags whether to include the current fragment in the URL,
|
||||
// so that reloading brings you to the same fragment position
|
||||
fragmentInURL: {{ fragment_in_url }},
|
||||
|
||||
// Flags if the presentation is running in an embedded mode,
|
||||
// i.e. contained within a limited portion of the screen
|
||||
embedded: {{ embedded }},
|
||||
|
||||
// Flags if we should show a help overlay when the question-mark
|
||||
// key is pressed
|
||||
help: {{ help }},
|
||||
|
||||
// Flags if it should be possible to pause the presentation (blackout)
|
||||
pause: {{ pause }},
|
||||
|
||||
// Flags if speaker notes should be visible to all viewers
|
||||
showNotes: {{ show_notes }},
|
||||
|
||||
// Global override for autolaying embedded media (video/audio/iframe)
|
||||
// - null: Media will only autoplay if data-autoplay is present
|
||||
// - true: All media will autoplay, regardless of individual setting
|
||||
// - false: No media will autoplay, regardless of individual setting
|
||||
autoPlayMedia: {{ auto_play_media }},
|
||||
|
||||
// Global override for preloading lazy-loaded iframes
|
||||
// - null: Iframes with data-src AND data-preload will be loaded when within
|
||||
// the viewDistance, iframes with only data-src will be loaded when visible
|
||||
// - true: All iframes with data-src will be loaded when within the viewDistance
|
||||
// - false: All iframes with data-src will be loaded only when visible
|
||||
preloadIframes: {{ preload_iframes }},
|
||||
|
||||
// Can be used to globally disable auto-animation
|
||||
autoAnimate: {{ auto_animate }},
|
||||
|
||||
// Optionally provide a custom element matcher that will be
|
||||
// used to dictate which elements we can animate between.
|
||||
autoAnimateMatcher: {{ auto_animate_matcher }},
|
||||
|
||||
// Default settings for our auto-animate transitions, can be
|
||||
// overridden per-slide or per-element via data arguments
|
||||
autoAnimateEasing: {{ auto_animate_easing }},
|
||||
autoAnimateDuration: {{ auto_animate_duration }},
|
||||
autoAnimateUnmatched: {{ auto_animate_unmatched }},
|
||||
|
||||
// CSS properties that can be auto-animated. Position & scale
|
||||
// is matched separately so there's no need to include styles
|
||||
// like top/right/bottom/left, width/height or margin.
|
||||
autoAnimateStyles: {{ auto_animate_styles }},
|
||||
|
||||
// Controls automatic progression to the next slide
|
||||
// - 0: Auto-sliding only happens if the data-autoslide HTML attribute
|
||||
// is present on the current slide or fragment
|
||||
// - 1+: All slides will progress automatically at the given interval
|
||||
// - false: No auto-sliding, even if data-autoslide is present
|
||||
autoSlide: {{ auto_slide }},
|
||||
|
||||
// Stop auto-sliding after user input
|
||||
autoSlideStoppable: {{ auto_slide_stoppable }},
|
||||
|
||||
// Use this method for navigation when auto-sliding (defaults to navigateNext)
|
||||
autoSlideMethod: {{ auto_slide_method }},
|
||||
|
||||
// Specify the average time in seconds that you think you will spend
|
||||
// presenting each slide. This is used to show a pacing timer in the
|
||||
// speaker view
|
||||
defaultTiming: {{ default_timing }},
|
||||
|
||||
// Enable slide navigation via mouse wheel
|
||||
mouseWheel: {{ mouse_wheel }},
|
||||
|
||||
// Opens links in an iframe preview overlay
|
||||
// Add `data-preview-link` and `data-preview-link="false"` to customize each link
|
||||
// individually
|
||||
previewLinks: {{ preview_links }},
|
||||
|
||||
// Exposes the reveal.js API through window.postMessage
|
||||
postMessage: {{ post_message }},
|
||||
|
||||
// Dispatches all reveal.js events to the parent window through postMessage
|
||||
postMessageEvents: {{ post_message_events }},
|
||||
|
||||
// Focuses body when page changes visibility to ensure keyboard shortcuts work
|
||||
focusBodyOnPageVisibilityChange: {{ focus_body_on_page_visibility_change }},
|
||||
|
||||
// Transition style
|
||||
transition: {{ transition }}, // none/fade/slide/convex/concave/zoom
|
||||
|
||||
// Transition speed
|
||||
transitionSpeed: {{ transition_speed }}, // default/fast/slow
|
||||
|
||||
// Transition style for full page slide backgrounds
|
||||
backgroundTransition: {{ background_transition }}, // none/fade/slide/convex/concave/zoom
|
||||
|
||||
// The maximum number of pages a single slide can expand onto when printing
|
||||
// to PDF, unlimited by default
|
||||
pdfMaxPagesPerSlide: {{ pdf_max_pages_per_slide }},
|
||||
|
||||
// Prints each fragment on a separate slide
|
||||
pdfSeparateFragments: {{ pdf_separate_fragments }},
|
||||
|
||||
// Offset used to reduce the height of content within exported PDF pages.
|
||||
// This exists to account for environment differences based on how you
|
||||
// print to PDF. CLI printing options, like phantomjs and wkpdf, can end
|
||||
// on precisely the total height of the document whereas in-browser
|
||||
// printing has to end one pixel before.
|
||||
pdfPageHeightOffset: {{ pdf_page_height_offset }},
|
||||
|
||||
// Number of slides away from the current that are visible
|
||||
viewDistance: {{ view_distance }},
|
||||
|
||||
// Number of slides away from the current that are visible on mobile
|
||||
// devices. It is advisable to set this to a lower number than
|
||||
// viewDistance in order to save resources.
|
||||
mobileViewDistance: {{ mobile_view_distance }},
|
||||
|
||||
// The display mode that will be used to show slides
|
||||
display: {{ display }},
|
||||
|
||||
// Hide cursor if inactive
|
||||
hideInactiveCursor: {{ hide_inactive_cursor }},
|
||||
|
||||
// Time before the cursor is hidden (in ms)
|
||||
hideCursorTime: {{ hide_cursor_time }}
|
||||
});
|
||||
{% if one_file %}
|
||||
// Fix found by @t-fritsch and @Rapsssito on GitHub
|
||||
// see: https://github.com/hakimel/reveal.js/discussions/3362#discussioncomment-11733074.
|
||||
function setVideoBase64(video) {
|
||||
const sources = video.querySelectorAll('source');
|
||||
// Update the source of the video
|
||||
sources.forEach((source, i) => {
|
||||
const src = source.getAttribute('src');
|
||||
if(src.match(/^data:video.*;base64$/)) {
|
||||
const nextSrc = sources[i+1]?.getAttribute('src');
|
||||
video.setAttribute('src', `${src},${nextSrc}`);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
{% if data_uri %}
|
||||
// Fix found by @t-fritsch on GitHub
|
||||
// see: https://github.com/hakimel/reveal.js/discussions/3362#discussioncomment-6651475.
|
||||
function fixBase64VideoBackground(event) {
|
||||
// event.previousSlide, event.currentSlide, event.indexh, event.indexv
|
||||
if (event.currentSlide.getAttribute('data-background-video')) {
|
||||
const background = Reveal.getSlideBackground(event.indexh, event.indexv),
|
||||
video = background.querySelector('video'),
|
||||
sources = video.querySelectorAll('source');
|
||||
|
||||
sources.forEach((source, i) => {
|
||||
const src = source.getAttribute('src');
|
||||
if(src.match(/^data:video.*;base64$/)) {
|
||||
const nextSrc = sources[i+1]?.getAttribute('src');
|
||||
video.setAttribute('src', `${src},${nextSrc}`);
|
||||
function fixBase64VideoBackground(event) {
|
||||
// Analyze all slides backgrounds
|
||||
for (const slide of Reveal.getBackgroundsElement().querySelectorAll('.slide-background')) {
|
||||
// Get the slide video and its sources for each background
|
||||
const video = slide.querySelector('video');
|
||||
if (video) {
|
||||
setVideoBase64(video);
|
||||
} else {
|
||||
// Listen to the creation of the video element
|
||||
const observer = new MutationObserver((mutationsList) => {
|
||||
for (const mutation of mutationsList) {
|
||||
if (mutation.type === 'childList') {
|
||||
for (const addedNode of mutation.addedNodes) {
|
||||
if (addedNode.tagName === 'VIDEO') {
|
||||
setVideoBase64(addedNode);
|
||||
observer.disconnect(); // Stop observing once the video is handled
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
observer.observe(slide, { childList: true, subtree: true });
|
||||
}
|
||||
}
|
||||
Reveal.on( 'ready', fixBase64VideoBackground );
|
||||
Reveal.on( 'slidechanged', fixBase64VideoBackground );
|
||||
}
|
||||
// Setup base64 videos
|
||||
Reveal.on( 'ready', fixBase64VideoBackground );
|
||||
{% endif %}
|
||||
</script>
|
||||
|
||||
|
@ -30,9 +30,11 @@ extensions = [
|
||||
# Additional
|
||||
"nbsphinx",
|
||||
"myst_parser",
|
||||
"sphinxcontrib.programoutput",
|
||||
"sphinxext.opengraph",
|
||||
"sphinx_click",
|
||||
"sphinx_copybutton",
|
||||
"sphinx_design",
|
||||
# Custom
|
||||
"manim_slides.docs.manim_slides_directive",
|
||||
]
|
||||
|
@ -24,25 +24,30 @@ the repository, and clone it locally.
|
||||
|
||||
As for every Python project, using virtual environment is recommended to avoid
|
||||
conflicts between modules.
|
||||
For this project, we use [Rye](https://rye.astral.sh/) to easily manage project
|
||||
For this project, we use [uv](https://github.com/astral-sh/uv) to easily manage project
|
||||
and development dependencies. If not already, please install this tool.
|
||||
|
||||
## Installing Python modules
|
||||
|
||||
With Rye, installation becomes straightforward:
|
||||
With uv, installation becomes straightforward:
|
||||
|
||||
```bash
|
||||
rye sync --all-features
|
||||
uv sync --all-extras
|
||||
```
|
||||
|
||||
:::{note}
|
||||
You still need the same dependencies as to install Manim and ManimGL,
|
||||
so please check their respective installation guides.
|
||||
:::
|
||||
|
||||
## Running commands
|
||||
|
||||
Because modules are installed in a new Python environment,
|
||||
you cannot use them directly in the shell.
|
||||
Instead, you either need to prepend `rye run` to any command, e.g.:
|
||||
Instead, you either need to prepend `uv run` to any command, e.g.:
|
||||
|
||||
```bash
|
||||
rye run manim-slides wizard
|
||||
uv run manim-slides wizard
|
||||
```
|
||||
|
||||
## Testing your code
|
||||
@ -51,7 +56,7 @@ Most of the tests are done with GitHub actions, thus not on your computer.
|
||||
The only command you should run locally is:
|
||||
|
||||
```bash
|
||||
rye run pre-commit run --all-files
|
||||
uv run pre-commit run --all-files
|
||||
```
|
||||
|
||||
This runs a few linter and formatter to make sure the code quality and style stay
|
||||
@ -61,7 +66,7 @@ If a warning or an error is displayed, please fix it before going to next step.
|
||||
For testing your code, simply run:
|
||||
|
||||
```bash
|
||||
rye run pytest
|
||||
uv run pytest
|
||||
```
|
||||
|
||||
## Building the documentation
|
||||
@ -73,7 +78,7 @@ To generate the documentation, run the following:
|
||||
|
||||
```bash
|
||||
cd docs
|
||||
rye run make html
|
||||
uv run make html
|
||||
```
|
||||
|
||||
Then, the output index file is located at `docs/build/html/index.html` and
|
||||
|
@ -29,13 +29,8 @@ ManimGL support is only guaranteed to work
|
||||
on a very minimal set of versions, because it differs quite a lot from ManimCE,
|
||||
and its development is not very active.
|
||||
|
||||
The typical issues are that (1) ManimGL needs an outdated NumPy version
|
||||
and (2) ManimGL **should not** be installed from the GitHub repository,
|
||||
at least not from the `main` branch, but from a version released to PyPI.
|
||||
|
||||
To solve the NumPy issue, you can safely downgrade NumPy to a version supported
|
||||
by ManimGL,
|
||||
while ignoring the possible *conflicting dependencies* messages from `pip` (or else).
|
||||
The typical issue is that ManimGL `<1.7.1` needs an outdated NumPy version, but
|
||||
can be resolved by manually downgrading NumPy, or upgrading ManimGL (**recommended**).
|
||||
|
||||
### Presenting
|
||||
|
||||
@ -54,9 +49,12 @@ with ManimCE or ManimGL.
|
||||
### Slides go black when video finishes
|
||||
|
||||
This is an issue with Qt,
|
||||
which cannot be solve on all platforms and Python versions,
|
||||
which cannot be solved on all platforms and Python versions,
|
||||
see [#293](https://github.com/jeertmans/manim-slides/issues/293).
|
||||
|
||||
Recent version of Manim Slides, i.e., `manim-slides>5.1.7`, come
|
||||
with a fix that should work fine.
|
||||
|
||||
### How to increase quality on Windows
|
||||
|
||||
On Windows platform, one may encounter a lower image resolution than expected.
|
||||
@ -104,7 +102,7 @@ Questions related to `manim-slides convert [SCENES]... output.html`.
|
||||
|
||||
### I moved my `.html` file and it stopped working
|
||||
|
||||
If you did not specify `-cdata_uri=true` when converting,
|
||||
If you did not specify `--one-file` (or `-cone_file=true`) when converting,
|
||||
then Manim Slides generated a folder containing all
|
||||
the video files, in the same folder as the HTML
|
||||
output. As the path to video files is a relative path,
|
||||
@ -120,3 +118,7 @@ This issue is (probably) caused by PowerPoint never freeing
|
||||
memory, causing memory allocation errors, and can be partially
|
||||
solved by reducing the video quality or the number of slides,
|
||||
see [#392](https://github.com/jeertmans/manim-slides/issues/392).
|
||||
|
||||
Another solution, suggested by [@Azercoco](https://github.com/Azercoco) in
|
||||
[#392 (comment)](https://github.com/jeertmans/manim-slides/issues/392#issuecomment-2368198106),
|
||||
is to disable hardware/GPU acceleration.
|
||||
|
@ -23,10 +23,10 @@ using Manim Slides presentations.
|
||||
|
||||
Daniel publishes his presentations on *Cosmology, String Theory and related*
|
||||
topics on his
|
||||
[personal website](https://panopepino.github.io/Web_Page/main_page/slides.html). https://panopepino.github.io/Web_Page/main_page/slides.html
|
||||
[personal website](https://panopepino.github.io/web_page/main_page/slides.html). https://panopepino.github.io/web_page/main_page/slides.html
|
||||
|
||||
For example, below are the slides of a seminar he gave titled
|
||||
[Our Universe on a (Dark) Bubble](https://panopepino.github.io/Web_Page/main_page/presentations/2023_11_long/LS.html).
|
||||
[Our Universe on a (Dark) Bubble](https://panopepino.github.io/web_page/main_page/presentations/2023_11_long/LS.html).
|
||||
|
||||
<div style="position:relative;padding-bottom:56.25%;">
|
||||
<iframe
|
||||
@ -37,12 +37,12 @@ For example, below are the slides of a seminar he gave titled
|
||||
height="100%"
|
||||
allowfullscreen
|
||||
allow="autoplay"
|
||||
src="https://panopepino.github.io/Web_Page/main_page/presentations/2023_11_long/LS.html">
|
||||
src="https://panopepino.github.io/web_page/main_page/presentations/2023_11_long/LS.html">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
He also shares his code on a public
|
||||
[GitHub repository](https://github.com/PanoPepino/Manim_Theoretical).
|
||||
[GitHub repository](https://github.com/PanoPepino/mtheoretical).
|
||||
|
||||
### Jérome Eertmans
|
||||
|
||||
|
@ -29,19 +29,6 @@ please refer to their specific installation guidelines:
|
||||
- [Manim](https://docs.manim.community/en/stable/installation.html)
|
||||
- [ManimGL](https://3b1b.github.io/manim/getting_started/installation.html)
|
||||
|
||||
:::{warning}
|
||||
If you install Manim from its git repository, as suggested by ManimGL,
|
||||
make sure to first check out a supported version (e.g., `git checkout tags/v1.6.1`
|
||||
for ManimGL), otherwise it might install an unsupported version of Manim!
|
||||
See [#314](https://github.com/jeertmans/manim-slides/issues/314).
|
||||
|
||||
Also, note that ManimGL uses outdated dependencies, and may
|
||||
not work out-of-the-box. One example is NumPy: ManimGL
|
||||
does not specify any restriction on this package, but
|
||||
only `numpy<1.25` will work, see
|
||||
[#2053](https://github.com/3b1b/manim/issues/2053).
|
||||
:::
|
||||
|
||||
<!-- end deps -->
|
||||
|
||||
## Pip Install
|
||||
@ -113,10 +100,7 @@ using optional dependencies:
|
||||
and does not work with ManimGL;
|
||||
- `manim` and `manimgl`, for installing the corresponding
|
||||
dependencies;
|
||||
- `pyqt6` to include PyQt6 Qt bindings. Those bindings are available
|
||||
on most platforms and Python version, but produce a weird black
|
||||
screen between slide with `manim-slides present`,
|
||||
see [#QTBUG-118501](https://bugreports.qt.io/browse/QTBUG-118501);
|
||||
- `pyqt6` to include PyQt6 Qt bindings;
|
||||
- `pyqt6-full` to include `full` and `pyqt6`;
|
||||
- `pyside6` to include PySide6 Qt bindings. Those bindings are available
|
||||
on most platforms and Python version, except on Python 3.12[^2];
|
||||
@ -140,12 +124,12 @@ Manim Slides is distributed under Nixpkgs >=24.05.
|
||||
If you are using Nix or NixOS, you can find Manim Slides under:
|
||||
|
||||
- `nixpkgs.manim-slides`, which is meant to be a stand alone application and
|
||||
includes pyqt6 (see above);
|
||||
includes PyQt6 (see above);
|
||||
- `nixpkgs.python3Packages.manim-slides`, which is meant to be used as a
|
||||
module (for notebook magics), and includes IPython but not does not include
|
||||
any Qt bindings.
|
||||
module (for notebook magics), and includes IPython but does not include
|
||||
any Qt binding.
|
||||
|
||||
You can try out the Manim Slides package with
|
||||
You can try out the Manim Slides package with:
|
||||
|
||||
```sh
|
||||
nix-shell -p manim ffmpeg manim-slides
|
||||
@ -163,7 +147,7 @@ nix-shell -p manim ffmpeg "python3.withPackages(ps: with ps; [ manim-slides, ...
|
||||
or bundle this into [your Nix environment](https://wiki.nixos.org/wiki/Python).
|
||||
|
||||
:::{note}
|
||||
Nix current does not support `manimgl`.
|
||||
Nix does not currently support `manimgl`.
|
||||
:::
|
||||
|
||||
## When you need a Qt backend
|
||||
|
@ -18,6 +18,8 @@ use, not the methods used internally when rendering.
|
||||
next_section,
|
||||
next_slide,
|
||||
remove_from_canvas,
|
||||
start_skip_animations,
|
||||
stop_skip_animations,
|
||||
wait_time_between_slides,
|
||||
wipe,
|
||||
zoom,
|
||||
|
@ -8,3 +8,30 @@ This page contains an exhaustive list of all the commands available with `manim-
|
||||
:prog: manim-slides
|
||||
:nested: full
|
||||
```
|
||||
|
||||
## All config options
|
||||
|
||||
Each converter has its own configuration options, which are listed below.
|
||||
|
||||
::::{dropdown} HTML
|
||||
```{program-output} manim-slides convert --to=html --show-config
|
||||
```
|
||||
::::
|
||||
|
||||
::::{dropdown} Zip
|
||||
:::{note}
|
||||
The Zip converter inherits from the HTML converter.
|
||||
:::
|
||||
```{program-output} manim-slides convert --to=zip --show-config
|
||||
```
|
||||
::::
|
||||
|
||||
::::{dropdown} PDF
|
||||
```{program-output} manim-slides convert --to=pdf --show-config
|
||||
```
|
||||
::::
|
||||
|
||||
::::{dropdown} HTML
|
||||
```{program-output} manim-slides convert --to=pdf --show-config
|
||||
```
|
||||
::::
|
||||
|
@ -78,9 +78,9 @@
|
||||
],
|
||||
"metadata": {
|
||||
"kernelspec": {
|
||||
"display_name": "manim-slides",
|
||||
"display_name": ".venv",
|
||||
"language": "python",
|
||||
"name": "manim-slides"
|
||||
"name": "python3"
|
||||
},
|
||||
"language_info": {
|
||||
"codemirror_mode": {
|
||||
@ -92,7 +92,7 @@
|
||||
"name": "python",
|
||||
"nbconvert_exporter": "python",
|
||||
"pygments_lexer": "ipython3",
|
||||
"version": "3.10.6"
|
||||
"version": "3.11.8"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
|
@ -137,9 +137,10 @@ and it there to preserve the original aspect ratio (16:9).
|
||||
|
||||
### Sharing ONE HTML file
|
||||
|
||||
If you set the `data_uri` option to `true` (with `-cdata_uri=true`),
|
||||
all animations will be data URI encoded, making the HTML a self-contained
|
||||
presentation file that can be shared on its own.
|
||||
If you set the `--one-file` flag, all animations will be data URI encoded,
|
||||
making the HTML a self-contained presentation file that can be shared
|
||||
on its own. If you also set the `--offline` flag, the JS and CSS files will
|
||||
be included in the HTML file as well.
|
||||
|
||||
### Over the internet
|
||||
|
||||
@ -166,7 +167,7 @@ Pages. Please refer to the template page for usage instructions.
|
||||
|
||||
### With PowerPoint (*EXPERIMENTAL*)
|
||||
|
||||
A recent conversion feature is to the PowerPoint format, thanks to the
|
||||
A convenient conversion feature is to the PowerPoint format, thanks to the
|
||||
`python-pptx` package. Even though it is fully working,
|
||||
it is still considered in an *EXPERIMENTAL* status because we do not
|
||||
exactly know what versions of PowerPoint (or LibreOffice Impress) are supported.
|
||||
|
Reference in New Issue
Block a user