Skip to content

Commit

Permalink
Refactor image conversion (#163)
Browse files Browse the repository at this point in the history
* Refactor image conversion

* Docs
  • Loading branch information
iBicha authored Oct 7, 2023
1 parent 7818f77 commit 508306c
Show file tree
Hide file tree
Showing 26 changed files with 300 additions and 85 deletions.
6 changes: 4 additions & 2 deletions config/bsconfig.base.json
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,8 @@
"source/**",
"components/**",
"images/**",
"!images/vector/**",
"!**/*.svg",
"!**/*.svg.meta.json5",
"fonts/**",
"config/**",
"lib/**",
Expand All @@ -48,7 +49,8 @@
"../tools/bs-plugins/track-transpiled-plugin.ts",
"../tools/bs-plugins/json-yaml-plugin.ts",
"../tools/bs-plugins/validation-plugin.ts",
"../tools/bs-plugins/logger-plugin.ts"
"../tools/bs-plugins/logger-plugin.ts",
"../tools/bs-plugins/image-gen-plugin.ts"
],
"retainStagingDir": true,
"require": [
Expand Down
6 changes: 4 additions & 2 deletions config/bsconfig.tests.base.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@
"source/**",
"components/**",
"images/**",
"!images/vector/**",
"!**/*.svg",
"!**/*.svg.meta.json5",
"fonts/**",
"config/**",
"lib/**",
Expand All @@ -24,7 +25,8 @@
"../tools/bs-plugins/track-transpiled-plugin.ts",
"../tools/bs-plugins/json-yaml-plugin.ts",
"../tools/bs-plugins/validation-plugin.ts",
"../tools/bs-plugins/logger-plugin.ts"
"../tools/bs-plugins/logger-plugin.ts",
"../tools/bs-plugins/image-gen-plugin.ts"
],
"rooibos": {
"logLevel": 2,
Expand Down
16 changes: 16 additions & 0 deletions docs/plugins.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
# Playlet Brighterscript Plugins

- [Json5/Yaml support](#json5yaml-support)
- [Convert images](#convert-images)
- [Manifest editing](#manifest-editing)
- [Validation](#validation)
- [Includes](#includes)
Expand All @@ -27,6 +28,21 @@ Brightscript can only parse json natively using [ParseJson](https://developer.ro

At the end of the build, the plugin scans for certain files (`jsonc`, `json`, `json5` and `yaml`), and converts them to plain json, while keeping the original file name. That way they are all parsable by the [ParseJson](https://developer.roku.com/en-ca/docs/references/brightscript/language/global-utility-functions.md#parsejsonjsonstring-as-string-flags---as-string-as-object) function, even though their original format is not compatible.

## Convert images

**[Source](/tools/bs-plugins/image-gen-plugin.ts)**

This plugin allows us to convert svg files to png files.

### Why

This is used to convert splash screen, app poster, as well as icons in the app. Having svg images (or vector images in general) as the source of truth is better, in case images need to be modified or resized. Since Roku can't load them, we convert them to png.

### How

Each `.svg` file found will have an associated `.svg.meta.json5` file, which will contain the hash (MD5) of the svg, conversion paramters, and the hash of the output files. This allows us to hash existing files and see if a conversion is needed.
Notice how each `.svg` file can be configured to generate multiple png files. This is especially the case to generate the app artwork (splash screen/poster) with different sizes from the same logo `.svg` file.

## Manifest editing

**[Source](/tools/bs-plugins/manifest-edit-plugin.ts)**
Expand Down
14 changes: 14 additions & 0 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
"description": "Unofficial Youtube client for Roku",
"devDependencies": {
"@rokucommunity/bslint": "^0.8.10",
"@types/crypto-js": "^4.1.2",
"@types/fs-extra": "^11.0.2",
"@types/node": "^20.7.2",
"@types/xml2js": "^0.4.12",
Expand All @@ -12,6 +13,7 @@
"brighterscript-formatter": "^1.6.33",
"convert-svg-to-png": "^0.6.4",
"cross-fetch": "^4.0.0",
"crypto-js": "^4.1.1",
"dotenv": "^16.3.1",
"express": "^4.18.2",
"fs-extra": "^11.1.1",
Expand Down Expand Up @@ -52,7 +54,6 @@
"test:build:app": "cd playlet-app && npm run test:build",
"test:lib": "cd playlet-lib && npm run test",
"test:build:lib": "cd playlet-lib && npm run test:build",
"generate-images": "node tools/generate-images.js",
"version-sync": "node tools/version-sync.js",
"manifest-git-hash": "node tools/update-manifest-git-hash.js",
"sign-package": "node tools/sign-package.js",
Expand Down
26 changes: 26 additions & 0 deletions playlet-app/src/images/vector/logo-dark.svg.meta.json5
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
{
inputHash: '0536f51fa72c2e4e368ea0e901aadfc1',
outputs: [
{
outputFilePath: 'src/images/splash-screen_fhd.jpg',
outputHash: 'b15f3a3f1ccc459cbca12cb828b78d16',
width: 1920,
height: 1080,
background: '#242424',
},
{
outputFilePath: 'src/images/splash-screen_hd.jpg',
outputHash: '25e9c4220f8a42101d6333e548e33aa8',
width: 1280,
height: 720,
background: '#242424',
},
{
outputFilePath: 'src/images/splash-screen_sd.jpg',
outputHash: 'c54a2f7fa65f443263806962450f2c04',
width: 720,
height: 480,
background: '#242424',
},
],
}
4 changes: 4 additions & 0 deletions playlet-app/src/images/vector/logo-fav.svg.meta.json5
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
inputHash: "d61131ccc714d8df0b4514ca76883494",
outputs: [],
}
26 changes: 26 additions & 0 deletions playlet-app/src/images/vector/logo-light.svg.meta.json5
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
{
inputHash: '3452c6ea1c84f59aedf5530bf86a7a51',
outputs: [
{
outputFilePath: 'src/images/channel-poster_fhd.png',
outputHash: 'd644a0db84deed0bcc41a41d08a4ef75',
width: 540,
height: 405,
background: '#FFFFFF',
},
{
outputFilePath: 'src/images/channel-poster_hd.png',
outputHash: 'd07a4ffaa021b55528bee91710f4e9d2',
width: 290,
height: 218,
background: '#FFFFFF',
},
{
outputFilePath: 'src/images/channel-poster_sd.png',
outputHash: '66a311c639f89ff009e4624468282b2f',
width: 246,
height: 140,
background: '#FFFFFF',
},
],
}
2 changes: 1 addition & 1 deletion playlet-app/src/manifest
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ ui_resolutions=hd

## Channel Assets
### Main Menu Icons / Channel Poster Artwork
#### Image sizes are FHD: 540x405px | HD: 290x218px | SD: 214x144px
#### Image sizes are FHD: 540x405px | HD: 290x218px | SD: 246x140px
mm_icon_focus_fhd=pkg:/images/channel-poster_fhd.png
mm_icon_focus_hd=pkg:/images/channel-poster_hd.png
mm_icon_focus_sd=pkg:/images/channel-poster_sd.png
Expand Down
11 changes: 11 additions & 0 deletions playlet-lib/src/images/icons/filters-black.svg.meta.json5
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
inputHash: 'b88a05052cd01cb7a89bd6802418d79e',
outputs: [
{
outputFilePath: 'src/images/icons/filters-black.png',
outputHash: 'f0a7539ae840c00a2d91292f993bb75e',
width: 64,
height: 64,
},
],
}
11 changes: 11 additions & 0 deletions playlet-lib/src/images/icons/filters-white.svg.meta.json5
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
inputHash: 'df7918a3b43642f707cc0d9fcfd2d9ee',
outputs: [
{
outputFilePath: 'src/images/icons/filters-white.png',
outputHash: '914e2c8da9772c23c24bebbd39c918f2',
width: 64,
height: 64,
},
],
}
File renamed without changes
11 changes: 11 additions & 0 deletions playlet-lib/src/images/icons/home.svg.meta.json5
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
inputHash: '788d5e9ddc5a26953392afa17a85a05c',
outputs: [
{
outputFilePath: 'src/images/icons/home.png',
outputHash: '3da3ed864137ace837ef2f96a4e5e13d',
width: 64,
height: 64,
},
],
}
File renamed without changes
11 changes: 11 additions & 0 deletions playlet-lib/src/images/icons/info.svg.meta.json5
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
inputHash: '92a5720049ca36c38c695969534c2bb5',
outputs: [
{
outputFilePath: 'src/images/icons/info.png',
outputHash: '31b5c5c342ded1bc99b3466c2fbaaf09',
width: 64,
height: 64,
},
],
}
File renamed without changes
11 changes: 11 additions & 0 deletions playlet-lib/src/images/icons/phone.svg.meta.json5
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
inputHash: 'e6318f56ce4c0cc637cf0cc3180a2013',
outputs: [
{
outputFilePath: 'src/images/icons/phone.png',
outputHash: '2d7ece94b64fa5a725adeea5a313cbcf',
width: 64,
height: 64,
},
],
}
File renamed without changes
11 changes: 11 additions & 0 deletions playlet-lib/src/images/icons/search.svg.meta.json5
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
inputHash: 'dede98d4bf3c835836c82c485600108c',
outputs: [
{
outputFilePath: 'src/images/icons/search.png',
outputHash: '5b5fb4128202a1e074b04ee570bbcf69',
width: 64,
height: 64,
},
],
}
File renamed without changes
11 changes: 11 additions & 0 deletions playlet-lib/src/images/icons/settings.svg.meta.json5
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
inputHash: '11d4a0bfa1ae239216088d825851ec4a',
outputs: [
{
outputFilePath: 'src/images/icons/settings.png',
outputHash: '1b6d024df95af8b002e469453e29a632',
width: 64,
height: 64,
},
],
}
Loading

0 comments on commit 508306c

Please sign in to comment.