]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blame - support/doc/tools.md
video: add video stranscoding_failed state
[github/Chocobozzz/PeerTube.git] / support / doc / tools.md
CommitLineData
c141f68b
RK
1# CLI tools guide
2
12b119c0
RK
3<!-- START doctoc generated TOC please keep comment here to allow auto update -->
4<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
1f8ac024 5**Table of Contents**
c141f68b 6
c141f68b
RK
7- [Remote Tools](#remote-tools)
8 - [Dependencies](#dependencies)
9 - [Installation](#installation)
d639c3bf
C
10 - [CLI wrapper](#cli-wrapper)
11 - [peertube-import-videos.js](#peertube-import-videosjs)
12 - [peertube-upload.js](#peertube-uploadjs)
8dd2d050 13 - [peertube-plugins.js](#peertube-pluginsjs)
e669ff58 14 - [peertube-redundancy.js](#peertube-redundancyjs)
c141f68b
RK
15- [Server tools](#server-tools)
16 - [parse-log](#parse-log)
c2bd7a6f 17 - [regenerate-thumbnails.js](#regenerate-thumbnailsjs)
c141f68b
RK
18 - [create-transcoding-job.js](#create-transcoding-jobjs)
19 - [create-import-video-file-job.js](#create-import-video-file-jobjs)
e1ab52d7 20 - [create-move-video-storage-job.js](#create-move-video-storage-jobjs)
c141f68b 21 - [prune-storage.js](#prune-storagejs)
c141f68b 22 - [update-host.js](#update-hostjs)
31b48aad 23 - [reset-password.js](#reset-passwordjs)
13126d99 24 - [plugin install/uninstall](#plugin-installuninstall)
12b119c0
RK
25
26<!-- END doctoc generated TOC please keep comment here to allow auto update -->
27
d639c3bf
C
28## Remote Tools
29
30You need at least 512MB RAM to run the script.
31Scripts can be launched directly from a PeerTube server, or from a separate server, even a desktop PC.
32You need to follow all the following steps even if you are on a PeerTube server (including cloning the git repository in a different directory than your production installation because the scripts utilize non-production dependencies).
33
34### Dependencies
35
7e9d3f25 36Install the [PeerTube dependencies](dependencies.md) except PostgreSQL and Redis.
d639c3bf
C
37
38### Installation
39
40Clone the PeerTube repo to get the latest version (even if you are on your PeerTube server):
41
c83af8f9 42```bash
d639c3bf
C
43$ git clone https://github.com/Chocobozzz/PeerTube.git
44$ CLONE="$(pwd)/PeerTube"
d639c3bf 45$ cd ${CLONE}
d639c3bf
C
46```
47
7e9d3f25
C
48Install dependencies and build CLI tools:
49
c83af8f9 50```bash
7e9d3f25
C
51$ NOCLIENT=1 yarn install --pure-lockfile
52$ npm run setup:cli
d639c3bf
C
53```
54
55### CLI wrapper
8704acf4 56
bb8f7872
C
57The wrapper provides a convenient interface to the following scripts.
58You can access it as `peertube` via an alias in your `.bashrc` like `alias peertube="cd /your/peertube/directory/ && node ./dist/server/tools/peertube.js"` (you have to keep the `cd` command):
8704acf4
RK
59
60```
61 Usage: peertube [command] [options]
62
63 Options:
64
65 -v, --version output the version number
66 -h, --help output usage information
67
68 Commands:
69
70 auth [action] register your accounts on remote instances to use them with other commands
71 upload|up upload a video
72 import-videos|import import a video from a streaming platform
e669ff58
C
73 plugins|p [action] manage instance plugins
74 redundancy|r [action] manage video redundancies
8704acf4
RK
75 help [cmd] display help for [cmd]
76```
77
78The wrapper can keep track of instances you have an account on. We limit to one account per instance for now.
79
80```bash
5b036b8e 81$ peertube auth add -u 'PEERTUBE_URL' -U 'PEERTUBE_USER' --password 'PEERTUBE_PASSWORD'
8704acf4
RK
82$ peertube auth list
83┌──────────────────────────────┬──────────────────────────────┐
84│ instance │ login │
85├──────────────────────────────┼──────────────────────────────┤
5b036b8e 86│ 'PEERTUBE_URL' │ 'PEERTUBE_USER' │
8704acf4
RK
87└──────────────────────────────┴──────────────────────────────┘
88```
89
90You can now use that account to upload videos without feeding the same parameters again.
91
92```bash
93$ peertube up <videoFile>
94```
95
9b474844
C
96To list, install, uninstall dynamically plugins/themes of an instance:
97
98```bash
99$ peertube plugins list
100$ peertube plugins install --path /local/plugin/path
101$ peertube plugins install --npm-name peertube-plugin-myplugin
102$ peertube plugins uninstall --npm-name peertube-plugin-myplugin
103```
104
d639c3bf 105#### peertube-import-videos.js
358770db 106
1f8ac024 107You can use this script to import videos from all [supported sites of youtube-dl](https://rg3.github.io/youtube-dl/supportedsites.html) into PeerTube.
358770db 108Be sure you own the videos or have the author's authorization to do so.
2519d9fe 109
a5f0521f 110```sh
8704acf4 111$ node dist/server/tools/peertube-import-videos.js \
5b036b8e
C
112 -u 'PEERTUBE_URL' \
113 -U 'PEERTUBE_USER' \
9024bece 114 --password 'PEERTUBE_PASSWORD' \
8a08bc1e 115 --target-url 'TARGET_URL'
2519d9fe
L
116```
117
a5f0521f
RK
118* `PEERTUBE_URL` : the full URL of your PeerTube server where you want to import, eg: https://peertube.cpy.re
119* `PEERTUBE_USER` : your PeerTube account where videos will be uploaded
e8a739e8 120* `PEERTUBE_PASSWORD` : password of your PeerTube account (if `--password PEERTUBE_PASSWORD` is omitted, you will be prompted for it)
a5f0521f
RK
121* `TARGET_URL` : the target url you want to import. Examples:
122 * YouTube:
123 * Channel: https://www.youtube.com/channel/ChannelId
124 * User https://www.youtube.com/c/UserName or https://www.youtube.com/user/UserName
125 * Video https://www.youtube.com/watch?v=blabla
126 * Vimeo: https://vimeo.com/xxxxxx
127 * Dailymotion: https://www.dailymotion.com/xxxxx
2519d9fe 128
2186386c
C
129The script will get all public videos from Youtube, download them and upload to PeerTube.
130Already downloaded videos will not be uploaded twice, so you can run and re-run the script in case of crash, disconnection...
131
132Videos will be publicly available after transcoding (you can see them before that in your account on the web interface).
133
1f8ac024
F
134**NB**: If you want to synchronize a Youtube channel to your PeerTube instance (ensure you have the agreement from the author),
135you can add a [crontab rule](https://help.ubuntu.com/community/CronHowto) (or an equivalent of your OS) and insert
136these rules (ensure to customize them to your needs):
137
138```
139# Update youtube-dl every day at midnight
1400 0 * * * /usr/bin/npm rebuild youtube-dl --prefix /PATH/TO/PEERTUBE/
141
142# Synchronize the YT channel every sunday at 22:00 all the videos published since last monday included
1430 22 * * 0 /usr/bin/node /PATH/TO/PEERTUBE/dist/server/tools/peertube-import-videos.js -u '__PEERTUBE_URL__' -U '__USER__' --password '__PASSWORD__' --target-url 'https://www.youtube.com/channel/___CHANNEL__' --since $(date --date="-6 days" +%Y-%m-%d)
144```
145
146Also you may want to subscribe to the PeerTube channel in order to manually check the synchronization is successful.
358770db 147
d639c3bf 148#### peertube-upload.js
358770db
C
149
150You can use this script to import videos directly from the CLI.
151
2186386c
C
152Videos will be publicly available after transcoding (you can see them before that in your account on the web interface).
153
c83af8f9 154```bash
05e67d62 155$ cd ${CLONE}
8704acf4 156$ node dist/server/tools/peertube-upload.js --help
358770db 157```
a5f0521f 158
8dd2d050
C
159#### peertube-plugins.js
160
161Install/update/uninstall or list local or NPM PeerTube plugins:
162
c83af8f9 163```bash
8dd2d050
C
164$ cd ${CLONE}
165$ node dist/server/tools/peertube-plugins.js --help
166$ node dist/server/tools/peertube-plugins.js list --help
167$ node dist/server/tools/peertube-plugins.js install --help
168$ node dist/server/tools/peertube-plugins.js update --help
169$ node dist/server/tools/peertube-plugins.js uninstall --help
170
171$ node dist/server/tools/peertube-plugins.js install --path /my/plugin/path
172$ node dist/server/tools/peertube-plugins.js install --npm-name peertube-theme-example
173```
174
e669ff58
C
175#### peertube-redundancy.js
176
177Manage (list/add/remove) video redundancies:
178
179To list your videos that are duplicated by remote instances:
180
c83af8f9 181```bash
e669ff58
C
182$ node dist/server/tools/peertube.js redundancy list-remote-redundancies
183```
184
185To list remote videos that your instance duplicated:
186
c83af8f9 187```bash
e669ff58
C
188$ node dist/server/tools/peertube.js redundancy list-my-redundancies
189```
190
191To duplicate a specific video in your redundancy system:
192
c83af8f9 193```bash
e669ff58
C
194$ node dist/server/tools/peertube.js redundancy add --video 823
195```
196
197To remove a video redundancy:
198
c83af8f9 199```bash
e669ff58
C
200$ node dist/server/tools/peertube.js redundancy remove --video 823
201```
202
54a3a12e
C
203## Server tools
204
205These scripts should be run on the server, in `peertube-latest` directory.
a5f0521f 206
0ee02734
C
207### parse-log
208
209To parse PeerTube last log file:
210
c83af8f9 211```bash
cb6a78c2 212$ # Basic installation
c977fd3e 213$ cd /var/www/peertube/peertube-latest
0ee02734 214$ sudo -u peertube NODE_CONFIG_DIR=/var/www/peertube/config NODE_ENV=production npm run parse-log -- --level info
cb6a78c2
C
215
216$ # Docker installation
217$ cd /var/www/peertube-docker
218$ docker-compose exec -u peertube peertube npm run parse-log -- --level info
0ee02734
C
219```
220
221`--level` is optional and could be `info`/`warn`/`error`
222
cb6a78c2 223You can also remove SQL or HTTP logs using `--not-tags` (PeerTube >= 3.2):
7992c9e1 224
cb6a78c2
C
225```bash
226$ # Basic installation
7992c9e1
C
227$ cd /var/www/peertube/peertube-latest
228$ sudo -u peertube NODE_CONFIG_DIR=/var/www/peertube/config NODE_ENV=production npm run parse-log -- --level debug --not-tags http sql
cb6a78c2
C
229
230$ # Docker installation
231$ cd /var/www/peertube-docker
232$ docker-compose exec -u peertube peertube npm run parse-log -- --level debug --not-tags http sql
7992c9e1
C
233```
234
c2bd7a6f
C
235### regenerate-thumbnails.js
236
cb6a78c2
C
237**PeerTube >= 3.2**
238
c2bd7a6f
C
239Regenerating local video thumbnails could be useful because new PeerTube releases may increase thumbnail sizes:
240
cb6a78c2
C
241```bash
242$ # Basic installation
c2bd7a6f
C
243$ cd /var/www/peertube/peertube-latest
244$ sudo -u peertube NODE_CONFIG_DIR=/var/www/peertube/config NODE_ENV=production npm run regenerate-thumbnails
cb6a78c2
C
245
246$ # Docker installation
247$ cd /var/www/peertube-docker
248$ docker-compose exec -u peertube peertube npm run regenerate-thumbnails
c2bd7a6f
C
249```
250
a5f0521f
RK
251### create-transcoding-job.js
252
12b119c0 253You can use this script to force transcoding of an existing video. PeerTube needs to be running.
a5f0521f 254
c83af8f9 255To generate transcoding jobs depending on the instance configuration:
cb6a78c2 256
c83af8f9 257```bash
cb6a78c2 258$ # Basic installation
c977fd3e 259$ cd /var/www/peertube/peertube-latest
54a3a12e 260$ sudo -u peertube NODE_CONFIG_DIR=/var/www/peertube/config NODE_ENV=production npm run create-transcoding-job -- -v [videoUUID]
cb6a78c2
C
261
262$ # Docker installation
263$ cd /var/www/peertube-docker
264$ docker-compose exec -u peertube peertube npm run create-transcoding-job -- -v [videoUUID]
a5f0521f 265```
05623b90
F
266
267Or to transcode to a specific resolution:
cb6a78c2 268
c83af8f9 269```bash
cb6a78c2 270$ # Basic installation
c977fd3e 271$ cd /var/www/peertube/peertube-latest
05623b90 272$ sudo -u peertube NODE_CONFIG_DIR=/var/www/peertube/config NODE_ENV=production npm run create-transcoding-job -- -v [videoUUID] -r [resolution]
cb6a78c2
C
273
274$ # Docker installation
275$ cd /var/www/peertube-docker
276$ docker-compose exec -u peertube peertube npm run create-transcoding-job -- -v [videoUUID] -r [resolution]
05623b90 277```
cb6a78c2 278
1c5c31a1 279The resolution should be an integer (`1080`, `720`, `480`, etc.)
1f8ac024 280
8b7bd166
C
281To generate an HLS playlist for a video:
282
c83af8f9 283```bash
cb6a78c2 284$ # Basic installation
c977fd3e 285$ cd /var/www/peertube/peertube-latest
8b7bd166 286$ sudo -u peertube NODE_CONFIG_DIR=/var/www/peertube/config NODE_ENV=production npm run create-transcoding-job -- --generate-hls -v [videoUUID]
cb6a78c2
C
287
288$ # Docker installation
289$ cd /var/www/peertube-docker
290$ docker-compose exec -u peertube peertube npm run create-transcoding-job -- --generate-hls -v [videoUUID]
8b7bd166
C
291```
292
a5f0521f
RK
293### create-import-video-file-job.js
294
12b119c0 295You can use this script to import a video file to replace an already uploaded file or to add a new resolution to a video. PeerTube needs to be running.
a5f0521f 296
c83af8f9 297```bash
cb6a78c2 298$ # Basic installation
c977fd3e 299$ cd /var/www/peertube/peertube-latest
54a3a12e 300$ sudo -u peertube NODE_CONFIG_DIR=/var/www/peertube/config NODE_ENV=production npm run create-import-video-file-job -- -v [videoUUID] -i [videoFile]
cb6a78c2
C
301
302$ # Docker installation
303$ cd /var/www/peertube-docker
304$ docker-compose exec -u peertube peertube npm run create-import-video-file-job -- -v [videoUUID] -i [videoFile]
54a3a12e
C
305```
306
e1ab52d7 307### create-move-video-storage-job.js
308
9c391612
C
309**PeerTube >= 4.0**
310
e1ab52d7 311Use this script to move all video files or a specific video file to object storage.
312
313```bash
314$ # Basic installation
315$ cd /var/www/peertube/peertube-latest
316$ sudo -u peertube NODE_CONFIG_DIR=/var/www/peertube/config NODE_ENV=production npm run create-move-video-storage-job -- --to-object-storage -v [videoUUID]
317
318$ # Docker installation
319$ cd /var/www/peertube-docker
320$ docker-compose exec -u peertube peertube npm run create-move-video-storage-job -- --to-object-storage -v [videoUUID]
321```
322
323The script can also move all video files that are not already in object storage:
324
325```bash
326$ # Basic installation
327$ cd /var/www/peertube/peertube-latest
328$ sudo -u peertube NODE_CONFIG_DIR=/var/www/peertube/config NODE_ENV=production npm run create-move-video-storage-job -- --to-object-storage --all-videos
329
330$ # Docker installation
331$ cd /var/www/peertube-docker
332$ docker-compose exec -u peertube peertube npm run create-move-video-storage-job -- --to-object-storage --all-videos
333```
334
335
54a3a12e
C
336### prune-storage.js
337
338Some transcoded videos or shutdown at a bad time can leave some unused files on your storage.
7089e7b4 339Stop PeerTube and delete these files (a confirmation will be demanded first):
54a3a12e 340
c83af8f9 341```bash
c977fd3e 342$ cd /var/www/peertube/peertube-latest
7089e7b4 343$ sudo systemctl stop peertube && sudo -u peertube NODE_CONFIG_DIR=/var/www/peertube/config NODE_ENV=production npm run prune-storage
23687332
C
344```
345
edb4ffc7 346
23687332
C
347### update-host.js
348
fffc7c08 349**Changing the hostname is unsupported and may be a risky operation, especially if you have already federated.**
12b119c0
RK
350If you started PeerTube with a domain, and then changed it you will have
351invalid torrent files and invalid URLs in your database. To fix this, you have
fffc7c08 352to run the command below (keep in mind your follower instances will NOT update their URLs).
23687332 353
c83af8f9 354```bash
cb6a78c2 355$ # Basic installation
c977fd3e 356$ cd /var/www/peertube/peertube-latest
23687332 357$ sudo -u peertube NODE_CONFIG_DIR=/var/www/peertube/config NODE_ENV=production npm run update-host
cb6a78c2
C
358
359$ # Docker installation
360$ cd /var/www/peertube-docker
361$ docker-compose exec -u peertube peertube npm run update-host
ecf06378 362```
1e59ca3b 363
31b48aad
C
364### reset-password.js
365
366To reset a user password from CLI, run:
367
c83af8f9 368```bash
cb6a78c2 369$ # Basic installation
c977fd3e 370$ cd /var/www/peertube/peertube-latest
31b48aad 371$ sudo -u peertube NODE_CONFIG_DIR=/var/www/peertube/config NODE_ENV=production npm run reset-password -- -u target_username
cb6a78c2
C
372
373$ # Docker installation
374$ cd /var/www/peertube-docker
375$ docker-compose exec -u peertube peertube npm run reset-password -- -u target_username
31b48aad
C
376```
377
9b474844
C
378
379### plugin install/uninstall
380
381The difference with `peertube plugins` CLI is that these scripts can be used even if PeerTube is not running.
382If PeerTube is running, you need to restart it for the changes to take effect (whereas with `peertube plugins` CLI, plugins/themes are dynamically loaded on the server).
383
8dd2d050 384To install/update a plugin or a theme from the disk:
9b474844 385
c83af8f9 386```bash
c977fd3e 387$ cd /var/www/peertube/peertube-latest
e9bdf8b4 388$ sudo -u peertube NODE_CONFIG_DIR=/var/www/peertube/config NODE_ENV=production npm run plugin:install -- --plugin-path /local/plugin/path
cb6a78c2
C
389
390$ # Docker installation
391$ cd /var/www/peertube-docker
392$ docker-compose exec -u peertube peertube npm run plugin:install -- --plugin-path /local/plugin/path
9b474844
C
393```
394
395From NPM:
396
c83af8f9 397```bash
c977fd3e 398$ cd /var/www/peertube/peertube-latest
e9bdf8b4 399$ sudo -u peertube NODE_CONFIG_DIR=/var/www/peertube/config NODE_ENV=production npm run plugin:install -- --npm-name peertube-plugin-myplugin
cb6a78c2
C
400
401$ # Docker installation
402$ cd /var/www/peertube-docker
403$ docker-compose exec -u peertube peertube npm run plugin:install -- --npm-name peertube-plugin-myplugin
9b474844
C
404```
405
406To uninstall a plugin or a theme:
407
c83af8f9 408```bash
c977fd3e 409$ cd /var/www/peertube/peertube-latest
e9bdf8b4 410$ sudo -u peertube NODE_CONFIG_DIR=/var/www/peertube/config NODE_ENV=production npm run plugin:uninstall -- --npm-name peertube-plugin-myplugin
cb6a78c2
C
411
412$ # Docker installation
413$ cd /var/www/peertube-docker
414$ docker-compose exec -u peertube peertube npm run plugin:uninstall -- --npm-name peertube-plugin-myplugin
9b474844 415```