jpunie

jpunie

Hello,

While testing the scenic example in combination with Nerves on a RPi3 with a touchscreen, it became clear that the images where not rendering. At first I thought it would be related to the Scenic RPI driver, but this was not the case. Debugging of the path variables resulted in a clear path resolving issue at compile time.

When looking a the default splash.ex the parrot image is loaded as follows:

 @parrot_path :code.priv_dir(:scenic_example)
               |> Path.join("/static/images/scenic_parrot.png")
 @parrot_hash Scenic.Cache.Support.Hash.file!(@parrot_path, :sha)

:code.priv_dir(:scenic_example) will result with a path on my local file system, not on the target.

I had to fix/change this path issue with a config, but maybe this can be done in a more elegant way. My current workaround:

config/config.exs:

config :scenic_example, :priv_dir, "./_build/dev/lib/scenic_example/priv/"

config/rpi3.exs:

config :scenic_example, :priv_dir, "/srv/erlang/lib/scenic_example-0.1.0/priv"

splash.ex:

@parrot_file "/static/images/scenic_parrot.png"
@parrot_path Application.get_env(:scenic_example, :priv_dir)
               |> Path.join(@parrot_file)
@parrot_hash_path :code.priv_dir(:scenic_example)
               |> Path.join(@parrot_file)
@parrot_hash Scenic.Cache.Support.Hash.file!(@parrot_hash_path, :sha)

The hash has to be calculated at compile time using the file on my local filesystem, hence the double paths.

What would be a more elegant solution to solve this?
Also when the application will be versioned, the path in rpi3.exs has to be changed also, which could be an issue in the future.
Removing the static definitions is always an option, but I think in general the static definitions will work better and easier in the future.

Showing Posts 1 to 3

axelson

axelson

Scenic Core Team

Hi @jpunie, indeed that is a known issue/annoyance when working with Scenic, especially when also using Nerves. I wouldn’t worry too much about an elegant way to solve this because Scenic 0.11 is coming soon and how assets work is being re-written, in part because of this specific issue.

Here’s some relevant info:

Hey all. Just pushed an update to v0.11 that refactors the way static assets are built. The main change you will need to make is that most of the config is now moved into the assets.ex module itself.The main benefit is that you can now have multiple asset sources that are merged into the final library. This allows deps to have assets that get pulled into the final application. While I was there, the library format is now a struct and accessing the contents has simplified and has more descriptive function names. The main one you will need to update is that Static.fetch is now Static.meta, which is a better name since it retrieves the metadata. Fetch was ambiguous.Now that we can have multiple asset sources, roboto.ttf and roboto_mono.ttf are moved back into scenic itself and don’t need to be carried by the apps.

defmodule Example.Assets do
  use Scenic.Assets.Static,
    otp_app: :poncho_scenic,
    sources: [
      "assets",
      {:scenic, "apps/scenic/assets"}
    ],
    alias: [
      parrot: "images/parrot.jpg"
    ]
end

The sources: list above will point to your local assets folder and the scenic assets by default if you don’t include it.The required config is now just

config :scenic, :assets, module: PonchoScenic.Assets

I believe @boydm is also actively looking for feedback on the assets setup for 0.11, although he may almost be ready to wrap up that portion of work.

jpunie

jpunie OP

Hi @axelson,

Great and very valuable feedback. I will look further into the provided info. Also a welcome reminder to keep following the Elixir Slack.

Looking forward to the v0.11 release.

Thank you for all the effort you put into your projects and the support given.

axelson

axelson

Scenic Core Team

You’re welcome! And the #scenic channel of the elixir slack has really been picking up recently, there was even a remote scenic meetup last month. Also, I feel that I should note that I’m not a maintainer of Scenic, just a happy user. Although I am giving a Scenic-related talk at ElixirConf this year :tada:

— All posts loaded —

Where Next? Top

Trending in Questions Top

katta
I having some trouble figuring out if I have set myself too strict of standards for my production server. Currently I can handle 75% of r...
New
brecabral
Documentation While reading the Scoped Routes section, I noticed that the documentation currently refers to a problem without explainin...
New
achenet
Hello, I’m trying to build a basic Phoenix web-app, and I’d like to use Tailwind. However, when I launch mix phx.server, I get an error...
New
kpanic
Hi everyone, I am toying with the idea of building a “match maker” for giving personal help to people that wants to start coding. I sta...
New
Cxx-mlr
I’m working on a small exercise involving update_in/3, and I came up with this solution: data = %{ name: "Periodic Table", category:...
New
ChrisAmelia
I’ve got trouble wrapping my head around the order in which functions are called in this snippet (from Phoenix’s authentication): toke...
New
dillonoconnor
Is there any way to avoid the Hologram compiler running when using iex? It seems like the front-end code could potentially be disregarded...
New

Other Trending Topics Top

GenericJam
Edit: 2026 May 15 - This post is archived. Mob is alive!! Main docs: mob v0.7.11 — Documentation A bit of explanation for the slightly c...
New
mudasobwa
I am happy to introduce the very α version of the new programming language compiled to BEAM. Welcome Cure. It has literally three kille...
New
garrison
Hobbes is a low-level distributed database for the Elixir programming language. Hobbes provides a simple, safe, and scalable storage lay...
New
budgie
A little off-topic, but I feel like people here have a good head on their shoulders. I used to be quite good at making software. Was luc...
New
KristerV
Hey. Is there anyone here who creates agents in their apps? Not talking about using agents, but creating them. I’m finding it pretty diff...
New
mcass19
ExRatatui lets you cook up rich terminal UIs in Elixir, powered by Rust’s ratatui via Rustler NIFs. Build interactive terminal applicatio...
New

We're in Beta

About us Mission Statement

Options

Thread Display Mode




Thread Preview

Skip Thread Previews