Hacker News new | comments | show | ask | jobs | submit login
STL File Viewing (github.com)
153 points by bencevans on Apr 9, 2013 | hide | past | web | favorite | 60 comments

This is really cool, but I always feel kind of dirty putting my STL (or any other binary) files into a git repository.

I hope GitHub adds support for scad files soon. In theory it should be pretty easy since they already support STL -- have openscad generate an STL from the scad files on the fly.

STL has an ascii variant if you like. But the real issue is placing derived files under source control. There's no good answer here. If the STL is the output of, say, a script engine that generates parametrized parts, then of course it shouldn't be in git. If it's the output of a manual process in an interactive tool (e.g. a CAD program) then the distinction is fuzzier. It's not really the "editable source", but then neither can it be automatically derived by a build system.

> If it's the output of a manual process in an interactive tool (e.g. a CAD program) then the distinction is fuzzier. It's not really the "editable source", but then neither can it be automatically derived by a build system.

It sounds like what you'd really want, in that case, would be an ASCII-encoded log-structured manipulation-history format--sort of similar to a Redis Append-Only File.

Github amazes me all the time with the sheer number of features they ship over a given time period. Major props! The STL rendering is an awesome feature.

It would be great if they could setup something like this in github:


This model is a combination of stl or dae files, created with a script file that puts the coordinates of the individual stl files. I'm waiting for the day that maybe github could host full simulations and we test them out in the browser. (Now that would be cool).

Yo github... while you're bothering, here are some other things that would be handy:

* Visual STL diffs, maybe by coloring deleted/added triangles. Possibly with a viewer on gh-pages or on the /:username/:reponame/commits/:branchname endpoint?

* DXF sucks, but yeah DXF rendering.

* Maybe consider thingiview.js (which does not use WebGL) or possibly a WebGL equivalent viewer. Controlled rotation, zooming, camera repositioning, etc. It seems that most of these features are implemented:



* openscad rendering- I know this is a pain in the butt, especially since openscad still requires xserver. But at least it feels more like source code. There are some other options other than openscad that could be easier to render without an xserver, which would be fine in my book, I am not particularly attached to openscad.

* Other scripting/rendering options... maybe implicitcad, pythonocc (opencascade/python bindings), HeeksCAD/python, FreeCAD/python, OpenJSCAD, something like that. The problem with STL is that it's like transmitting compiled binaries to other developers, but what developers really want to work with is the source code. Having to commit STL is like having to commit compiled binaries.

* UI widgets for committing from SolidWorks, Pro/Engineer, CATIA, AutoCAD, HeeksCAD, FreeCAD, and other front-ends would be really useful. I would be happy to use github.com while working on my next fighter jet project.

* Upverter claims to support git, but really it's just a link to a remote git repository and you can't push your schematics to Upverter. Please feel free to eat their lying lunches. Maybe also circuitlab's (although they have never claimed to have git integration). So yeah, schematics.

* Some projects require thousands of parts that need to be included when rendering, especially in assemblies. It would be nice to be able to see a fully rendered image of a version of the repository contents. This quickly devolves into a mess of file format hell, which I imagine is not something you want to tackle. But maybe this could be done through continuous integration hooks or something?

For whatever it's worth, here's a terrible post-receive bash script I wrote in 2010 for scad rendering on a git server:


* It would be exceedingly awesome if you could get the RepRap project to jump ship from svn to git. RepRap is the largest, most well organized open source hardware project, and I think it would be a great community to work with to show how strong git is for distributed hardware development.

There are already some really excellent RepRap projects in git repositories on github:



Wow. That's a stupidly large amount of work, barfed out with seeming ignorance to the cost of implementation.

> Wow. That's a stupidly large amount of work, barfed out with seeming ignorance to the cost of implementation.

Actually, I implemented a lot of this on a private project in 2010-2011 that I never launched. There are a lot of other competitors trying to be "GitHub for Hardware"- but a lot of them fail to bother to implement git support. I think it's great that GitHub is moving in this direction.

Ah, cool. I was in the CAD space for a while, so your list made me twitch a bit. :)

Is your project open-source?

No, sorry. But the commit hook in the other post should be useful in terms of openscad file rendering..

CAD is a really interesting industry from an open source perspective. BRLCAD has done some really excellent work. "Something" needs to come in and bulldoze the mess that OpenCASCADE has left. It turns out that writing NURBS intersection code is really not a cake walk.. go figure. Not sure what that "something" is going to be yet.

Btw, I would love to talk with you about your industry experience. We could mutually complain about how terrible ISO 10303 is!

Sure. I wasn't in for a super long time, but worked on space-planning and other AEC software. Shoot me an email and we'll take it from there.

LOL you talk about such features as if they're simple add-ons! Each is a huuuuge commitment from dev to maintenance. But yea, it'd be nice.

GrabCAD is about as close to this as you get as far as implementing solid CAD stuff.

The maintenance commitment cannot be understated. If you add some kind of processing to a file format, people are going to expect it to always be there, and always work, so you're taking on an eternal renderer maintenance workload. That said, we'd love to cleverly render all sorts of formats. The limitation is the time and developer energy to do it right and keep it updated.

Why not allow third parties to develop plugins, if you don't want to maintain the feature yourself?

Totally - especially because these are hard to maintain if they go wild I assume.

> LOL you talk about such features as if they're simple add-ons! Each is a huuuuge commitment from dev to maintenance.

Nick, you and I have met, we've talked about this before. I'm really surprised that you think that I think they are simple add-ons. We've talked for hours about these things, how the heck could you get that impression from me!

Yea, I know Sir Bishop, so don't get offended. It just seems your post made it seem easy. This would be a massive change in direction for GitHub; it's massive technical complexity when they probably don't feel they fully know what's going on with 3D / CAD. We'll get there.

Somewhat serious: why not apply for a job at Github?

> Somewhat serious: why not apply for a job at Github?

Feel free to send me an offer :)



Github is not going to support backend rendering of 3d files.

Seems like the smart thing would be pushing rendering to the client. This is already done in real-time for coarse and simple models like PDB.

> smart thing would be pushing rendering to the client

They seem to be doing precisely that:

"This viewer is powered by Three.js and uses WebGL when available, but will fall back to the slower canvas renderer."

Yea, but good luck having a browser-based B-Rep kernel or some such. Seems like GrabCAD, etc. are doing back-end processing -> polygons in the browser using three.js, etc.

Shapesmith is also doing backend nurbs (OpenCASCADE + erlang server) with front-end rendering.

I think it would be possible to implement nurbs (or brep) in javascript, once there's an open source (and maintainable/legible) library that actually does nurbs intersection.

OpenNURBS doesn't count because Rhino has kept all the interesting bits to themselves. BRLCAD has had people from GSoC implement some of the remaining closed-source parts of the OpenNURBS library, so maybe they have had some recent progress on this front?

OpenCASCADE doesn't count because trying to extract just what you need is like trying to rewrite the multiple decades of software piled up in there..

Edit: Nick, didn't we have this exact conversation before in some HN comments like two years ago? I feel like we did and I feel bad for not remembering the url. Maybe this?


They also don't do backend testing, but there are still service hooks for it anyway.

I'm surprised nobody has mentioned https://sketchfab.com/, which does this for pretty much any 3D file.

Getting the following error when loading an STL file on GitHub:

    Invalid 'X-Frame-Options' header encountered when loading 'https://render.github.com/view/3d/?url=https%3A%2F%2Fraw.github.com%2FEmmanuelG%2FFoldaRap2%2Fmaster%2Fstl%2Flower-corners.stl': 'ALLOW-FROM: https://github.com/' is not a recognized directive. The header will be ignored.
(from https://github.com/EmmanuelG/FoldaRap2/blob/master/stl/lower...)

Running Chrome stable. Looks like a malformed cross-origin directive?

EDIT: The error is still here but it works from time to time. Some of the time I get a "Something went wrong? Reload" message, the rest of the time, the 3D model actually appears.

Chrome doesn't have support for the `ALLOW-FROM` `X-Frame-Options` option, and just complains about it when it sees it.

See: https://developer.mozilla.org/en-US/docs/HTTP/X-Frame-Option...

Is the source for this STL Three.JS viewer available on GitHub?

It's be nice if, when you sign in, you could change which viewer was associated with which file type. Then I could fork their viewer, add my own features, and use that.

Strange- I just pushed an STL file from a Lynx camera that was taken of me at SXSW and it won't view. Any ideas what's wrong?


The error here is the blob is too big, so GitHub isn't serving it. If you try to view the raw blob, you'll hit the issue: https://raw.github.com/tibbon/my-3d-models/master/me-in-3d.s...

A better error message would go a long way here :)

Your file is 11MB :(

Oh, that might do it. I didn't realize how big of files the Lynx creates...

There's also a huge market for scientific collaboration. GitHub has lots of space to grow. https://www.scigit.com

There's already a github for 3D models, it's called Sketchfab (http://sketchfab.com) and it rocks.

> There's already a github for 3D models, it's called Sketchfab

Sketchfab doesn't have native support for git repositories. You could upload a tarball of a git repository, but that's seriously missing the point.

Cool, it works pretty well.

Next step: support Wavefront's .OBJ files.

Implementations would no doubt be similar, but here they are targeting hardware/manufacturing, not gaming/graphics.

You wrote this comment in multiple places, but it's wrong. All 3D printing services I am aware of accept OBJ. Many printer softwares accept it. In fact, as soon as you want to print in color, you have to move away from STL and OBJ would be a good choice.

Only a matter of time before someone writes a service hook for automatic 3-D printing of a model after each push....

That or Thingiverse integration.

GitHub's Make Me project might be close to what you're looking for. https://github.com/blog/1368-releasing-make-me

Is the blog post broken for anybody else using Firefox? The font is completely messed up for me. Both in Nightly and 20.0.

I'm on Aurora, it's not here.

I remember a few years ago Collada was quite the popular 3D file format. What are the latest trends in that field now?

Different fields. Collada was for 3D graphics (and I don't know what's going on in that field).

STL is for manufacturing. STL has long been popular for commercial FDMs and CNC machines, and it is also what hobbyists use for their FDMs ("3D printers").

Ah, this is for 3D printers, no wonder it got popular enough for GitHub to add support for visualizing it. Thanks!

The new hot kids of 3D graphics formats are http://alembic.io and http://openvdb.org.

Finally people are moving forward from the twenty-year-old OBJ and the horrorshow that is FBX...

It's not used for most CNC machines - you want a solid CAD model like STEP/IGES for this.

That's neat, thanks for sharing. :)

For mechanical stuff, it's in a B-Rep model such as STEP or IGES which can be exported from SolidWorks, etc.

wow. I built a STL file viewer and showed it to hacker news a few days ago and got absolutely no response. (www.supercuber.com). It was a different account though. I realize that this is quite a bit different than supercuber but its amazing how different the traffic to two similar links can be.

Collada support pls.

Fuck. That.

Here, here's the specs for that pile of offal:


It's a shitty, bad, bloated, slow, rubbish XML format. It has accumulated so much garbage in the name of interop that it is overkill for >95% of applications, and parsing/generating it is really annoying. It's a solution in search of a problem.

Why STL? I'd wager OBJ is a much more common interchange format for 3D models.

OBJ is for 3D graphics, STL is for 3D manufacturing.

Though it's trial to convert between them sans color loss from OBJ to STL 1.0

Wasn't really my point.

Well, github is targeting users of 3D printers, not game/graphics developers.

We grabbed a 3D printer for the office a while ago.

Guidelines | FAQ | Support | API | Security | Lists | Bookmarklet | Legal | Apply to YC | Contact