3 ms·
Here's a vibe-coded "servo-shot" CLI tool which uses this crate to render an image of a web page: https://github.com/simonw/research/tree/main/servo-crate-explo
by simonw 7mo ago
Here's a vibe-coded "servo-shot" CLI tool which uses this crate to render an image of a web page: https://github.com/simonw/research/tree/main/servo-crate-exploration/servo-shot https://github.com/simonw/research/tree/main/servo-crate-exp...
git clone https://github.com/simonw/research
cd research/servo-crate-exploration/servo-shot
cargo build
./target/debug/servo-shot https://news.ycombinator.com/
Here's the image it generated: https://gist.github.com/simonw/c2cb4fcb15b0837bbc4540c3d398c65d?permalink_comment_id=6096875#gistcomment-6096875 https://gist.github.com/simonw/c2cb4fcb15b0837bbc4540c3d398c...
- echelon 7mo agoThis is super useful! I have immediate use for this. Do you know if Servo is 100% Rust with no external system dependencies? (ie, can get away with rustls only?) Can this do Javascript? (Edit: Rendering SPAs / Javascript-only UX would be useful.) Edit 2: Can it do WebGL? Same rationale for ThreeJS-style apps and 3D renders. (This in particular is right up my use case's alley.)
- simonw 7mo agoIt depends on stuff like SpiderMonkey so not pure Rust. It should be able to render JavaScript but I've seen it throw bugs on simple pages, no doubt because my vibe-coded thing is crap not because Servo itself can't handle them.
- minimaxir 7mo agoI have been building/vibecoding a similar tool and unfortunately came to the conclusion that in practice, there are just too many features dependent on the full Chrome stack that it's just more pragmatic to use a real Chromium installation despite the file size. Performance/image generation speed is still fine, though. In Rust, the chromiumoxide crate is a performant way to interface with it for screenshots: https://crates.io/crates/chromiumoxide https://crates.io/crates/chromiumoxide
- mnutt 7mo agoI think you could in theory have a similar webkit-based stripped down headless crate that might have a good tradeoff of features, performance, and size.
- ospider 7mo ago> there are just too many features dependent on the full Chrome stack Do you mind elaborating on what features are missing?
- lastontheboat 7mo agoServo does execute JS and does support webgl (and some but not all of webgl2 if you enable the feature: https://book.servo.org/design-documentation/experimental-features.html https://book.servo.org/design-documentation/experimental-fea...).
- scrame 7mo agoThat's pretty cool. I'm guessing it would need some tweaking to handle things like cookies, or does it just need a pointer to the cookiejar? I'm not too familiar with servo,
- simonw 7mo agoIt's a VERY simple initial demo, I expect things like cookies would require quite a lot more work.
- mrbonner 7mo agoCool! I checked the source and noticed that even LLM prefers simplified, high level Rust coding styles: use value types such as String, use smart pointers such as reference counting, clone liberally, etc… instead of fighting the borrow checker gatekeepers. It is the style I prefer to use Rust for. Coming from Python, Typescript and even Java, even with this high level Rust, it yields incredible improvement already.
- andrepd 7mo ago> Cool! I checked the source and noticed that even LLM prefers simplified, high level Rust coding styles: use value types such as String, use smart pointers such as reference counting, clone liberally, etc… instead of fighting the borrow checker gatekeepers. Yeah that tracks because the AI is dumb as a bag of bricks. It can apply patterns off stackoverflow, but can hardly understand the borrow checker.
- ghusbands 7mo agoI wonder why most of the "g" characters are cropped.
- stefs 7mo agogood catch
- RyujiYasukochi 7mo ago[dead]