An image hosting service on top of the LBRY protocol.
spee.ch provides a user-friendly, custom-designed, image and video hosting site backed by a decentralized network and blockchain (LBRY). Via just a small set of config files, you can spin your an entire spee.ch site back up including assets.
Please note: the spee.ch code base and setup instructions are no longer actively maintained now that we have lbry.tv. Proceed at your own caution. Setup will require dev ops skills.
For a completely open, unrestricted example of a spee.ch site, check out https://www.spee.ch.
For a closed, custom-hosted and branded example, check out https://lbry.theantimedia.com/.
Step-by-step Ubuntu Install Guide
mysql> `ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'yourpassword';`
./lbrynet commands
gets a list of commands./lbrynet account_balance
gets your balance (initially 0.0)./lbrynet address_list
gets addresses you can use to recieve LBC$ git clone -b release https://github.com/lbryio/spee.ch.git
$ git clone https://github.com/lbryio/spee.ch.git
$ cd spee.ch
$ npm install
Make sure lbrynet is running in the background before proceeding.
note: If you are opt to run a local chainquery, such as from lbry-docker/chainquery you will need to specify connection details at this time in: ~/spee.ch/docs/setup/conf/speech/chainqueryConfig.json
$ npm run configure
$ npm run build
$ npm run start
Check out the customization guide to change your app's appearance and components
site/custom/src/
site/custom/scss
Instructions are coming at [lbry-docker] to install your own chainquery instance using docker-compose. This will require 50GB of preferably SSD space and at least 10 minutes to download, possibly much longer.
There are a number of settings available for customizing the behavior of your installation.
Here is some documentation on them.
method: POST
example:
curl -F 'name=MyPictureName' -F 'file=@/path/to/myPicture.jpeg' https://spee.ch/api/claim/publish
Parameters:
name
(required, must be unique across the instance)file
(required) (must be type .mp4, .jpeg, .jpg, .gif, or .png)nsfw
(optional)license
(optional)title
(optional)description
(optional)thumbnail
URL to thumbnail image, for .mp4 uploads only (optional)channelName
channel to publish too (optional)channelPassword
password for channel to publish too (optional, but required if channelName
is provided)response:
{
"success": <bool>,
"message": <string>,
"data": {
"name": <string>,
"claimId": <string>,
"url": <string>,
"showUrl": <string>,
"serveUrl": <string>,
"lbryTx": {
"claim_address": <string>,
"claim_id": <string>,
"fee": <number>,
"nout": <number>,
"tx": <string>,
"value": <number>
}
}
}
method: GET
example:
curl https://spee.ch/api/claim/availability/doitlive
response:
{
"success": <bool>, // `true` if spee.ch successfully checked the claim availability
"data": <bool>, // `true` if claim is available, false if it is not available
"message": <string> // human readable message of whether claim was available or not
}
The spee.ch stack is MySQL, Express.js, Node.js, and React.js. Spee.ch also runs lbrynet
on its server, and it uses the lbrynet
API to make requests -- such as publish
, create_channel
, and get
-- on the LBRY
network.
Spee.ch also runs a sync tool, which decodes blocks from the LBRY
blockchain as they are mined, and stores the information in MySQL. It stores all claims in the Claims
table, and all channel claims in the Certificates
table.
cli/
contains the code for the CLI tool. Running the tool will create .json
config files and place them in the site/config/
folder
configure.js
is the entry point for the CLI toolcli/defaults/
holds default config filescli/questions/
holds the questions that the CLI tool asks to build the config filesclient/
contains all of the client code
React
and Redux
client/src/index.js
is the entry point for the client side js. It checks for preloaded state, creates the store, and places the <App />
component in the document.client/src/app.js
holds the <App />
component, which contains the routes for react-router-dom
client/src/
contains all of the JSX code for the app. When the app is built, the content of this folder is transpiled into the client/build/
folder.
actions/
reducers/
and selectors/
containers/
(components that pull props directly from the Redux store), components/
('dumb' components), and pages/
sagas/
folders and channels/
client/scss/
contains the CSS for the project *site/custom
is a folder which can be used to override the default components in client/
client/
foldersite/custom/src/
and site/custom/scss
folders.server/
contains all of the server code
index.js
is the entry point for the server. It creates the express app, requires the routes, syncs the database, and starts the server listening on the PORT
designated in the config files.server/routes/
contains all of the routes for the express appserver/controllers/
contains all of the controllers for all of the routesserver/models/
contains all of the models which the app uses to interact with the MySQL
database.
tests/
holds the end-to-end tests for this project
mocha
with the chai
assertion libraryxxxx.test.js
file namemocha
with chai
for testing.testingConfig.js
file in devConfig/
by copying testingConfig.example.js
npm test
npm run test:no-lbc
Spee.ch has a few types of URL formats that return different assets from the LBRY network. Below is a list of all possible URLs for the content on spee.ch. You can learn more about LBRY URLs here.
LBRY
claim:
claim
claim
.ext
(serve)claim
.ext
&querystring
(serve transformed)LBRY
claim:
claim_id
/claim
claim_id
/claim
.ext
(serve)claim_id
/claim
.ext
&querystring
(serve transformed)LBRY
channel
@channel
LBRY
channel
@channel
:channel_id
LBRY
channel
@channel
/claim
@channel
/claim
.ext
(serve)@channel
/claim
.ext
&querystring
(serve)LBRY
channel
@channel
:channel_id
/claim
@channel
:channel_id
/claim
.ext
(serve)@channel
:channel_id
/claim
.ext
&querystring
(serve)querystring
can include the following transformation values separated by &
number
(defines height)number
(defines width)crop
or stretch
(defines transformation - missing implies constrained proportions)Spee.ch depends on two other lbry technologies:
If you find a bug or experience a problem, please report your issue here on GitHub and find us in the lbry discord!
This project is MIT licensed. For the full license, see LICENSE.
We take security seriously. Please contact [email protected] regarding any security issues. Our GPG key is here if you need it.
The primary contact for this project is @jessopb.