Download the PHP package scalecommerce/videooptimizer-sulu without Composer
On this page you can find all versions of the php package scalecommerce/videooptimizer-sulu. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download scalecommerce/videooptimizer-sulu
More information about scalecommerce/videooptimizer-sulu
Files in scalecommerce/videooptimizer-sulu
Package videooptimizer-sulu
Short Description Integrates ScaleCommerce VideoOptimizer into the Sulu 3.0 admin: pick, upload and manage CDN-delivered videos without a separate VideoOptimizer login.
License MIT
Homepage https://videooptimizer.eu/
Informations about the package videooptimizer-sulu
Give your editorial team adaptive, CDN-streamed video without ever leaving Sulu. This bundle adds a
video_optimizer content field, a selection & upload dialog, library management, and four
ready-to-use content blocks to the Sulu 3.0 admin β while the organization's API token stays on the
server, encrypted at rest. Editors just pick a video and hit publish.
Built and maintained by ScaleCommerce GmbH, the team behind VideoOptimizer. Part of the
scalecommerce/videooptimizer-<platform>plugin family.
β¨ Highlights
- π₯
video_optimizerfield type β drop it into any page, snippet or article template. - ποΈ Media-style admin β browse libraries as folder tiles, videos as a thumbnail grid, with title search and a "ready only" filter.
- β¬οΈ Big-file uploads β presigned multipart upload straight from the browser to storage, with live processing status. Or ingest from a remote URL.
- πΌοΈ Full asset control β pick auto-generated thumbnails, upload a custom poster (from disk or the Sulu media library), edit titles and player options, delete videos.
- π§± Four content blocks β
media split,background hero,spotlightand avideo grid, with facade / lightbox / direct presentation modes. - π Token never touches the browser β stored server-side, encrypted with libsodium; all API calls are proxied.
- β‘ Core-Web-Vitals friendly β lazy poster loading,
IntersectionObserver-gated players,above-the-foldpriority hint, and a single lightweight embed per video. - π Global CDN delivery β adaptive-bitrate HLS, edge-cached worldwide, resilient under traffic spikes.
Why deliver video through VideoOptimizer's CDN?
Compared to serving `.mp4` files from your own origin: - **Fast, global playback** β cached on edge servers near each viewer, so streams start quickly with minimal buffering, worldwide. - **Adaptive bitrate (HLS)** β every upload is transcoded into a resolution ladder; the player serves the right quality for the connection and device. - **Scales under load** β the CDN absorbs traffic spikes, so campaigns or viral pages never overload your CMS origin, and you avoid origin bandwidth costs on every view. - **Resilient** β multiple edge locations mean high availability; one node or origin outage doesn't break playback. - **Effortless for editors** β upload once and posters, thumbnails and renditions are generated automatically; embedding is a single lightweight iframe that keeps heavy media off the page's critical path (better Core Web Vitals & SEO).Requirements
| PHP | β₯ 8.2 with ext-sodium |
| Sulu | ^3.0 |
| Symfony | ^6.4 || ^7.0 |
| A VideoOptimizer account | grab an API token at videooptimizer.eu β Account β API Tokens |
π Quick start
TL;DR (with Symfony Flex, which registers the bundle for you):
Then open Settings β VideoOptimizer in the admin and paste your API token. That's it. The detailed steps follow.
1. Install
2. Register the bundle. Symfony Flex does this automatically on composer require. Only if you run
without Flex, add it to config/bundles.php yourself:
3. Run the installer. The bundle ships a console command that does the steps a plain
composer require cannot β it imports the admin API routes, wires its (pre-compiled) admin JS into
assets/admin, and creates the settings table:
The installer is idempotent (safe to re-run) and only fills in what's missing; add --dry-run to
preview. The cache:clear is a separate command on purpose β clearing the cache from inside the
running installer would delete the cache it is still using.
What it does β or set it up by hand instead
- **Admin API routes** β creates `config/routes/scale_videooptimizer_admin.yaml`: - **Admin JS wiring** β adds the dependency to `assets/admin/package.json` and imports it in `assets/admin/app.js` (the JS ships pre-compiled, so no `webpack.config.js` change is needed): - **Settings table** β creates `vo_settings` from the `VideoOptimizerSettings` entity. If your team tracks schema through migrations, run `bin/adminconsole doctrine:migrations:diff` then `:migrate` instead.4. Build the admin frontend:
This is Sulu's standard admin build β the admin is a webpack app compiled in your project, so it's a
plain npm run build (use npm run watch while developing). bin/console sulu:build is unrelated β it
builds the data layer (database/content), not the admin JS.
Do not use
sulu:admin:update-buildto install this bundle. That command syncsassets/adminwith the official Sulu skeleton (it either downloads the pre-built skeleton assets β which do not include this bundle's JS β or offers to overwrite yourassets/adminfiles). Its default forpackage.jsonis to overwrite, which would strip thevideooptimizer-suludependency thatscale:videooptimizer:installadded. Always build the admin JS withcd assets/admin && npm install && npm run build.After updating the bundle, hard-reload the admin (the build hash changes) so the browser doesn't run the stale bundle.
5. Add your token. In the Sulu admin, open Settings β VideoOptimizer and paste your vp_β¦ API
token. It's stored encrypted and never returned to the browser. Done β editors can now pick videos. π
6. See the blocks in action (optional). Run bin/console assets:install, then create a page with the
"VideoOptimizer showcase" template (shipped by the bundle, no setup) β it already has all four
content blocks wired up and renders them on a self-contained page. See Content blocks.
Optional: a Symfony Flex recipe is included that can register the bundle (step 2) automatically.
Optional: zero-config install with Symfony Flex
A Symfony Flex recipe is included in the repository
under .recipe/. It is not published to
symfony/recipes-contrib β the steps above are the
supported path. If you want a Flex-enabled project to register the bundle in config/bundles.php and
import the admin routes on composer require, you can submit the recipe yourself; see
.recipe/README.md. The scale:videooptimizer:install command still handles the
admin JS wiring and the settings table.
Troubleshooting
| Symptom | Cause | Fix |
|---|---|---|
| The VideoOptimizer navigation appears but clicking does nothing / no view opens | The admin JS was not wired into the build | Run bin/adminconsole scale:videooptimizer:install, then cd assets/admin && npm run build, then hard-reload the admin |
| Views open but show "β¦admin API is not reachable (404)" | The proxy routes are not imported, or the cache is stale | Run bin/adminconsole scale:videooptimizer:install (imports the routes) then bin/adminconsole cache:clear |
| A view says "No VideoOptimizer token is configured yet" | No API token stored | Open Settings β VideoOptimizer and save your vp_β¦ token |
| Settings shows an error but the form is still usable | Expected on a fresh/misconfigured install β the form never blocks so you can always enter the token | Enter the token and save; fix routes if the error mentions 404 |
Upgrading
Because this package follows semantic versioning, the ^1.0 constraint written by composer require
receives every 1.x feature and fix automatically β updating is a one-liner plus a rebuild:
Then hard-reload the admin in your browser (the build hash changes, so a normal reload may serve
the old bundle). Skipping step 2 leaves stale frontend assets in public/; skipping step 3 or 4 makes
new admin labels show their raw translation key.
Check the CHANGELOG before upgrading across a minor version β it lists every notable change, and any manual follow-up (e.g. a new config option or a migration) is called out there. To pin a specific version instead of tracking
^1.0, set the exact constraint in yourcomposer.json(e.g."scalecommerce/videooptimizer-sulu": "1.5.2").
Configuration (optional)
The API and embed base URLs default to VideoOptimizer's production hosts. Override them (e.g. to point
at a staging API) under the scale_video_optimizer key:
Frontend assets load automatically
Once the bundle assets are published (bin/console assets:install), the frontend CSS/JS load
automatically on any page that renders a VideoOptimizer surface β no template edit required. A
kernel.response listener injects the stylesheet before </head> and the deferred script before
</body>, only when the page actually contains a VideoOptimizer block or embed, and never twice.
Set auto_inject_assets: false to opt out (e.g. strict CSP or ESI setups where you need full control
over the <head>), then load the assets yourself from a page view's {% block stylesheets %}:
Uninstalling
Removes the route import and admin-JS wiring and drops the vo_settings table (which holds the
encrypted token, so it asks for confirmation first; --dry-run previews). Afterwards remove the bundle
from config/bundles.php and run composer remove scalecommerce/videooptimizer-sulu.
Usage
Add the field to a template (config/templates/pages/*.xml):
Render the CDN player in Twig:
The stored value is { uuid, libraryId, title, posterUrl }; the embed points at
https://videooptimizer.eu/embed/<uuid>.
π§± Content blocks
Beyond the single field, the bundle ships four ready-to-use Sulu content blocks for richer video-driven pages β each delivered as an XML template fragment plus a matching Twig view, so there's nothing to copy-paste.
| Block type | Purpose | Twig view |
|---|---|---|
vo_media_split |
Video beside text, side left/right |
blocks/vo_media_split.html.twig |
vo_background_hero |
Full-bleed native <video> HLS background |
blocks/vo_background_hero.html.twig |
vo_spotlight |
Poster that opens the video in a lightbox | blocks/vo_spotlight.html.twig |
vo_video_grid |
Repeatable grid of videos, each opening a lightbox | blocks/vo_video_grid.html.twig |
Fastest path: the shipped showcase template
The bundle ships a ready-to-use "VideoOptimizer showcase" page template with all four blocks already
wired in and a self-contained view. It is registered automatically β nothing to copy. After
bin/console assets:install, pick it when creating a page, add blocks, publish, and you're done.
Use this to explore the blocks immediately, or as a reference for wiring them into your own templates (below).
Wiring blocks into your own templates
Prefer your own theme/template? The bundle registers its block directory globally, so all four blocks
are available as referenceable block types in every page and snippet template β no XInclude, no
file paths to juggle. Add one <type ref="β¦"/> line per block wherever you define a block property:
The ref keys (vo_media_split, vo_background_hero, vo_spotlight, vo_video_grid) match the
blocks' <key> values. In the admin block picker they show up prefixed with [VO] so editors can tell
they come from this bundle. Because the block types are registered globally (via the bundle's DI
prepend()), there is nothing to copy and the same ref works in any template.
Want the blocks available in all templates? Sulu has no single switch for that β each template lists its own block types. Add the four
<type ref="β¦"/>lines to every page/snippet template that should offer the VideoOptimizer blocks.