Move generated sphinx /sphinx/_build/html folder to root, rename to “docs”
80 |
Add .nojekyll file to new docs folder
81 |
82 |
83 |
84 |
85 |
86 |
87 |
101 |
102 |
103 |
104 |
105 |
110 |
111 |
112 |
--------------------------------------------------------------------------------
/docs/_static/js/theme.js:
--------------------------------------------------------------------------------
1 | !function(n){var e={};function t(i){if(e[i])return e[i].exports;var o=e[i]={i:i,l:!1,exports:{}};return n[i].call(o.exports,o,o.exports,t),o.l=!0,o.exports}t.m=n,t.c=e,t.d=function(n,e,i){t.o(n,e)||Object.defineProperty(n,e,{enumerable:!0,get:i})},t.r=function(n){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})},t.t=function(n,e){if(1&e&&(n=t(n)),8&e)return n;if(4&e&&"object"==typeof n&&n&&n.__esModule)return n;var i=Object.create(null);if(t.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:n}),2&e&&"string"!=typeof n)for(var o in n)t.d(i,o,function(e){return n[e]}.bind(null,o));return i},t.n=function(n){var e=n&&n.__esModule?function(){return n.default}:function(){return n};return t.d(e,"a",e),e},t.o=function(n,e){return Object.prototype.hasOwnProperty.call(n,e)},t.p="",t(t.s=0)}([function(n,e,t){t(1),n.exports=t(3)},function(n,e,t){(function(){var e="undefined"!=typeof window?window.jQuery:t(2);n.exports.ThemeNav={navBar:null,win:null,winScroll:!1,winResize:!1,linkScroll:!1,winPosition:0,winHeight:null,docHeight:null,isRunning:!1,enable:function(n){var t=this;void 0===n&&(n=!0),t.isRunning||(t.isRunning=!0,e((function(e){t.init(e),t.reset(),t.win.on("hashchange",t.reset),n&&t.win.on("scroll",(function(){t.linkScroll||t.winScroll||(t.winScroll=!0,requestAnimationFrame((function(){t.onScroll()})))})),t.win.on("resize",(function(){t.winResize||(t.winResize=!0,requestAnimationFrame((function(){t.onResize()})))})),t.onResize()})))},enableSticky:function(){this.enable(!0)},init:function(n){n(document);var e=this;this.navBar=n("div.wy-side-scroll:first"),this.win=n(window),n(document).on("click","[data-toggle='wy-nav-top']",(function(){n("[data-toggle='wy-nav-shift']").toggleClass("shift"),n("[data-toggle='rst-versions']").toggleClass("shift")})).on("click",".wy-menu-vertical .current ul li a",(function(){var t=n(this);n("[data-toggle='wy-nav-shift']").removeClass("shift"),n("[data-toggle='rst-versions']").toggleClass("shift"),e.toggleCurrent(t),e.hashChange()})).on("click","[data-toggle='rst-current-version']",(function(){n("[data-toggle='rst-versions']").toggleClass("shift-up")})),n("table.docutils:not(.field-list,.footnote,.citation)").wrap(""),n("table.docutils.footnote").wrap(""),n("table.docutils.citation").wrap(""),n(".wy-menu-vertical ul").not(".simple").siblings("a").each((function(){var t=n(this);expand=n(''),expand.on("click",(function(n){return e.toggleCurrent(t),n.stopPropagation(),!1})),t.prepend(expand)}))},reset:function(){var n=encodeURI(window.location.hash)||"#";try{var e=$(".wy-menu-vertical"),t=e.find('[href="'+n+'"]');if(0===t.length){var i=$('.document [id="'+n.substring(1)+'"]').closest("div.section");0===(t=e.find('[href="#'+i.attr("id")+'"]')).length&&(t=e.find('[href="#"]'))}if(t.length>0){$(".wy-menu-vertical .current").removeClass("current").attr("aria-expanded","false"),t.addClass("current").attr("aria-expanded","true"),t.closest("li.toctree-l1").parent().addClass("current").attr("aria-expanded","true");for(let n=1;n<=10;n++)t.closest("li.toctree-l"+n).addClass("current").attr("aria-expanded","true");t[0].scrollIntoView()}}catch(n){console.log("Error expanding nav for anchor",n)}},onScroll:function(){this.winScroll=!1;var n=this.win.scrollTop(),e=n+this.winHeight,t=this.navBar.scrollTop()+(n-this.winPosition);n<0||e>this.docHeight||(this.navBar.scrollTop(t),this.winPosition=n)},onResize:function(){this.winResize=!1,this.winHeight=this.win.height(),this.docHeight=$(document).height()},hashChange:function(){this.linkScroll=!0,this.win.one("hashchange",(function(){this.linkScroll=!1}))},toggleCurrent:function(n){var e=n.closest("li");e.siblings("li.current").removeClass("current").attr("aria-expanded","false"),e.siblings().find("li.current").removeClass("current").attr("aria-expanded","false");var t=e.find("> ul li");t.length&&(t.removeClass("current").attr("aria-expanded","false"),e.toggleClass("current").attr("aria-expanded",(function(n,e){return"true"==e?"false":"true"})))}},"undefined"!=typeof window&&(window.SphinxRtdTheme={Navigation:n.exports.ThemeNav,StickyNav:n.exports.ThemeNav}),function(){for(var n=0,e=["ms","moz","webkit","o"],t=0;t 50:
40 | return
41 |
42 | client.queue(
43 | PrinterText("-" * 20),
44 | PrinterText(f"@{event.user.uniqueId}", bold=True),
45 | PrinterText("Thank you for the likes!! <3<3")
46 | )
47 |
48 |
49 | @client.on("join")
50 | async def on_join(event: JoinEvent):
51 | # Check if valid
52 | if not event.user:
53 | return
54 |
55 | # Only do this if the viewer count is less than 20
56 | if client.viewer_count and client.viewer_count > 20:
57 | return
58 |
59 | client.queue(
60 | PrinterText("-" * 20),
61 | PrinterText(f"@{event.user.uniqueId}", bold=True),
62 | PrinterText("Welcome to the LIVE!")
63 | )
64 |
65 |
66 | @client.on("follow")
67 | async def on_follow(event: FollowEvent):
68 | # Check if valid
69 | if not event.user:
70 | return
71 |
72 | # Only do this if the viewer count is less than 20
73 | if client.viewer_count and client.viewer_count > 20:
74 | return
75 |
76 | client.queue(
77 | PrinterText("-" * 20),
78 | PrinterText(f"@{event.user.uniqueId}", bold=True),
79 | PrinterText("Thank you for the follow!!!")
80 | )
81 |
82 |
83 | @client.on("gift")
84 | async def on_gift(event: GiftEvent):
85 | # Check if valid
86 | if not event.user:
87 | return
88 |
89 | # If it's type 1 and the streak is over
90 | if not ((event.gift.gift_type == 1 and event.gift.repeat_end == 1) or event.gift.gift_type != 1):
91 | return
92 |
93 | diamonds: int = event.gift.extended_gift.diamond_count * event.gift.repeatCount
94 |
95 | # If less than 5 diamonds (CHEAP)
96 | if diamonds < 5:
97 | client.queue(
98 | PrinterText("-" * 20),
99 | PrinterText(f"Thank you so much!! :D"),
100 | PrinterText(f"@{event.user.uniqueId}", bold=True),
101 | PrinterText(f"For sending {event.gift.repeatCount}x {event.gift.extended_gift.name}")
102 | )
103 |
104 | return
105 |
106 | # If between 5 & 10 diamonds (SEMI-EXPENSIVE)
107 | if 5 <= diamonds <= 10:
108 | client.queue(
109 | PrinterImage(
110 | # Download the gift image and print it
111 | await TikTokMedia.gift_image(event.gift)
112 | ),
113 | PrinterImage(
114 | # Get a custom special image :)
115 | client.get_semi_expensive(event.user.uniqueId, event.gift.extended_gift.name, event.gift.repeatCount)
116 | )
117 | )
118 |
119 | return
120 |
121 | # If diamonds are greater than 10
122 | client.queue(
123 |
124 | PrinterImage(
125 | # Get a custom special image :)
126 | client.get_semi_expensive(event.user.uniqueId, event.gift.giftDetails.giftName, event.gift.repeatCount)
127 | ),
128 |
129 | PrinterImage(
130 | # Download the gift image and print it
131 | await TikTokMedia.gift_image(event.gift)
132 | ),
133 |
134 | PrinterImage(
135 | # Download the user image and print it
136 | await TikTokMedia.user_image(event.user)
137 | ),
138 |
139 | VoiceText(
140 | # Say thanks for the gift
141 | random.choice([
142 | f"Woah, hotshot! Thanks {event.user.uniqueId} for the {event.gift.repeatCount} {event.gift.giftDetails.giftName}",
143 | f"Woah, thanks {event.user.uniqueId} for the {event.gift.repeatCount} {event.gift.giftDetails.giftName}",
144 | f"You're on fire! Thanks {event.user.uniqueId} for the {event.gift.repeatCount} {event.gift.giftDetails.giftName}",
145 | f"That's freaking insane! Thanks {event.user.uniqueId} for the {event.gift.repeatCount} {event.gift.giftDetails.giftName}",
146 | ])
147 | )
148 | )
149 |
150 |
151 | if __name__ == '__main__':
152 | """
153 | Receiving an Invalid Endpoint error with a USB printer?
154 |
155 | Try adding “in_ep = 0x81, out_ep = 0x03" to the create_usb function!
156 | If you are not receiving this error, do not add the additional parameters!
157 | If you continue to receive this error, try doing out_ep = 0x02.
158 |
159 | If that still doesn't work, make a ticket & we will handle it together!
160 |
161 | """
162 |
163 | client.run()
164 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | TikTokPrinter - Thermal Printer Software (Abandoned)
2 | ==================
3 | A Python library to print to thermal printers from TikTokLive.
4 |
5 | [](https://www.linkedin.com/in/isaac-kogan-5a45b9193/ )
6 | [](http://hits.dwyl.com/isaackogan/TikTokLive)
7 | 
8 | 
9 | [](https://discord.gg/4Mbw58w5Qx)
10 |
11 | Welcome to the public GitHub information page for the number one best-selling, most customizable & professional-grade tool for thermal printing on TikTok.
12 |
13 | ### **BUY HERE: https://discord.gg/4Mbw58w5Qx**
14 |
15 | Thermal printing is a very recent, very exciting trend on TikTok. It is also a very **complex** one. Not because the topic is difficult in and of itself, but because people want so many different things.
16 |
17 | That's why I developed an all-encompassing, multithreaded thermal printing program that does... everything, including a comprehensive [video tutorial](https://www.youtube.com/watch?v=NeapS5Jn_oo) on how to use it, made by me.
18 |
19 | No subscription unlike many virtual printer services. One-time, life-time purchase. Can be installed in python via pip. Includes access to all future releases/updates to the project.
20 |
21 | ## ❤️ [Get It Now](#purchase-now) ❤️
22 |
23 | ### YouTube Showcase & Tutorial
24 |
25 | If you want to see just how powerful this library is (and easy to use), we made a video tutorial & showcase
26 | that goes through the basics of how to get started using it. Click the thumbnail below to warp.
27 |
28 | [](https://www.youtube.com/watch?v=NeapS5Jn_oo)
29 |
30 | ### Auto-Select
31 |
32 | Automatically find & use your USB printer.
33 |
34 | 
35 |
36 | ### Purchase Details (Cost, Pricing Logic, etc.)
37 |
38 | The cost is a flat `$25.90 USD`.
39 |
40 | This library is the most advanced, most purchased printer script on the market. Not only does it have an insane number of features, it was made by the person that _created_
41 | the TikTokLive library. That gives you a benefit of ensuring that it is not only guaranteed to work, but guaranteed to be the best of the best you will possibly find.
42 |
43 | The price is set at what it is because of the ridiculous amount of time spent learning to program, creating the TikTokLive library, figuring out how to print on Windows, MacOS and Linux, creating guides, building the
44 | highly complex script itself, learning all the ways it can go wrong and fixing them, dealing with customer issues and so much more.
45 |
46 | Purchasing this script is an investment that you can make thousands of dollars off of. At this price-point, that's a hell of a deal. You are recommended to have basic Python knowledge to use this library.
47 |
48 | ### [Purchase Now](https://discord.gg/4Mbw58w5Qx)
49 |
50 | To buy this library, create a ticket in the `#tickets` channel in https://discord.gg/4Mbw58w5Qx.
51 |
52 | Type the message "Printer Magic" in the ticket and I will immediately get you started so that you can get to printing as fast as possible!
53 |
54 | ### Printer Library Example
55 |
56 | Here's a sample of what you can do with this library in less than 30 lines of code:
57 |
58 | 
59 |
60 | To show you just how advanced the library is, here we can print a profile picture, play a sound, and do text-to-speech... in just 3 "true" lines of code. This is insane.
61 |
62 | ```py
63 | @client.on("comment")
64 | async def on_comment(event: CommentEvent):
65 | client.queue(
66 |
67 | # Divier Text
68 | PrinterText("-" * 20),
69 |
70 | # Speak the comment
71 | VoiceText(event.user.uniqueId + " said " + event.comment),
72 |
73 | # Print the comment to printer
74 | PrinterText(event.user.uniqueId + " -> " + event.comment),
75 |
76 | # Play a sound
77 | SoundFile("enchanted.wav"),
78 |
79 | # Download their avatar and print the image
80 | PrinterImage(await TikTokMedia.user_image(event.user, circle=False))
81 |
82 | )
83 | ```
84 |
85 | ### Feature List (30+ Features)
86 |
87 | #### Primary Features
88 |
89 | - Ready-to-go script included for non-programmers (basic knowledge still recommended) that has everything you need, already put together
90 | - Automatically find your printer device
91 | - Print ANY Message
92 | - Print Profile Pictures, Gift Images, Custom Images
93 | - CUSTOM Text to Speech (perhaps when someone gifts?)
94 | - Play Sounds (perhaps when someone gifts?)
95 | - Support for ALL Serial, USB, and Network ESC-POS printers
96 | - Automatic setup script
97 | - Support for MacOS, Windows, Linux
98 | - Fully documented API
99 | - Quick-install with PIP
100 | - Access to future releases/updates
101 | - Video Set-Up Tutorial
102 | - Made to be easy to use for newbies
103 | - Access to private discord chat for clients
104 |
105 | ### Additional Features
106 |
107 | - Download and print TikTok user avatars, gifts
108 | - Extremely high level API (There is zero need to touch anything low-level, I've got it covered)
109 | - 100% Asynchronous Programming
110 | - Bold messages
111 | - Left, Right, Center Adjust
112 | - Newline character support
113 | - Print backwards (flip the input!)
114 | - Insert items at the start of the print queue (priority)
115 | - Insert items at the end of the print queue
116 | - Insert items at any index in the print queue
117 | - Custom errors built on top of the API describing what went wrong when it happens
118 | - Errors do not kill the script. Even if a part of a message breaks, the rest still prints!
119 | - Send messages to the TikTok LIVE Chat (chat-bot)
120 | - How-to example on basic usage (using formatting, text-to-speech, sounds, images, etc.)
121 | - How-to example on using gifts
122 | - How-to example on using commands
123 | - How-to example on other features
124 | - Automatically find in_ep and out_ep values
125 |
126 |
--------------------------------------------------------------------------------
/docs/modules.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | TikTokPrinter — TikTokPrinter documentation
8 |
9 |
10 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
Copyright (C) Isaac Kogan, Inc - All Rights Reserved
128 | Unauthorized copying of this project, via any medium is strictly prohibited
129 | Proprietary work of Isaac Kogan
130 | Written by Isaac Kogan <isaacikogan@gmail.com>, April 2022
131 |
You are permitted to use this project commercially so long as it was purchased firsthand from Isaac Kogan.
132 | Distributing secondhand copies to others is strictly prohibited & is illegal.
133 |
You can do anything with this project except redistribute it.
134 |
135 |
136 |
137 |
138 |
139 |
140 |
157 |
158 |
159 |
160 |
161 |
166 |
167 |
168 |
--------------------------------------------------------------------------------
/docs/searchindex.js:
--------------------------------------------------------------------------------
1 | Search.setIndex({docnames:["README","TikTokPrinter","TikTokPrinter.client","TikTokPrinter.client.engines","TikTokPrinter.client.printer","TikTokPrinter.tiktok","TikTokPrinter.types","index","modules"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":5,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":3,"sphinx.domains.rst":2,"sphinx.domains.std":2,sphinx:56},filenames:["README.md","TikTokPrinter.rst","TikTokPrinter.client.rst","TikTokPrinter.client.engines.rst","TikTokPrinter.client.printer.rst","TikTokPrinter.tiktok.rst","TikTokPrinter.types.rst","index.rst","modules.rst"],objects:{"":[[1,0,0,"-","TikTokPrinter"]],"TikTokPrinter.client":[[2,0,0,"-","client"],[3,0,0,"-","engines"],[4,0,0,"-","printer"]],"TikTokPrinter.client.client":[[2,1,1,"","TikTokPrinterClient"]],"TikTokPrinter.client.client.TikTokPrinterClient":[[2,2,1,"","image"],[2,2,1,"","queue"],[2,2,1,"","run"],[2,2,1,"","sound"],[2,2,1,"","start"],[2,2,1,"","text"],[2,2,1,"","voice"]],"TikTokPrinter.client.engines":[[3,0,0,"-","console"],[3,0,0,"-","escpos"],[3,0,0,"-","sound"],[3,0,0,"-","voice"]],"TikTokPrinter.client.engines.console":[[3,1,1,"","Console"]],"TikTokPrinter.client.engines.console.Console":[[3,2,1,"","image"],[3,2,1,"","set"],[3,2,1,"","text"]],"TikTokPrinter.client.engines.escpos":[[3,1,1,"","EscposEngine"],[3,1,1,"","EscposEngineGenerator"]],"TikTokPrinter.client.engines.escpos.EscposEngineGenerator":[[3,2,1,"","create_console"],[3,2,1,"","create_network"],[3,2,1,"","create_serial"],[3,2,1,"","create_usb"]],"TikTokPrinter.client.engines.sound":[[3,1,1,"","SoundEngine"]],"TikTokPrinter.client.engines.sound.SoundEngine":[[3,2,1,"","play"]],"TikTokPrinter.client.engines.voice":[[3,1,1,"","VoiceEngine"]],"TikTokPrinter.client.engines.voice.VoiceEngine":[[3,3,1,"","QUEUE_INTERVAL"],[3,2,1,"","speak"],[3,2,1,"","start"],[3,2,1,"","stop"]],"TikTokPrinter.client.printer":[[4,0,0,"-","engine"],[4,0,0,"-","interface"]],"TikTokPrinter.client.printer.engine":[[4,1,1,"","PrinterEngine"]],"TikTokPrinter.client.printer.engine.PrinterEngine":[[4,2,1,"","image"],[4,2,1,"","sound"],[4,2,1,"","text"],[4,2,1,"","voice"]],"TikTokPrinter.client.printer.interface":[[4,1,1,"","PrinterInterface"]],"TikTokPrinter.client.printer.interface.PrinterInterface":[[4,3,1,"","QUEUE_INTERVAL"],[4,2,1,"","image"],[4,2,1,"","queue"],[4,2,1,"","sound"],[4,2,1,"","start"],[4,2,1,"","stop"],[4,2,1,"","text"],[4,2,1,"","voice"]],"TikTokPrinter.tiktok":[[5,0,0,"-","http"],[5,0,0,"-","media"]],"TikTokPrinter.tiktok.http":[[5,1,1,"","GiftImage"],[5,1,1,"","ProfileImage"]],"TikTokPrinter.tiktok.http.GiftImage":[[5,4,1,"","url"]],"TikTokPrinter.tiktok.http.ProfileImage":[[5,3,1,"","DEFAULT_REQUEST_HEADERS"],[5,2,1,"","generate_device_id"],[5,2,1,"","to_bytes"],[5,2,1,"","to_download"],[5,4,1,"","url"]],"TikTokPrinter.tiktok.media":[[5,1,1,"","TikTokMedia"]],"TikTokPrinter.tiktok.media.TikTokMedia":[[5,2,1,"","gift_image"],[5,2,1,"","mask_circle_transparent"],[5,2,1,"","remove_transparency"],[5,2,1,"","user_image"]],"TikTokPrinter.types":[[6,0,0,"-","errors"],[6,0,0,"-","objects"]],"TikTokPrinter.types.errors":[[6,5,1,"","InvalidImageObject"],[6,5,1,"","InvalidPrinterObject"],[6,5,1,"","MissingPrinterDriver"],[6,5,1,"","NoDevicesFound"],[6,5,1,"","SetupMonkeyPatch"]],"TikTokPrinter.types.objects":[[6,1,1,"","CollectionItem"],[6,1,1,"","PrinterCollection"],[6,1,1,"","PrinterImage"],[6,1,1,"","PrinterText"],[6,1,1,"","SoundFile"],[6,1,1,"","VoiceText"]],"TikTokPrinter.types.objects.PrinterCollection":[[6,3,1,"","content"]],"TikTokPrinter.types.objects.PrinterImage":[[6,3,1,"","content"],[6,3,1,"","padding"]],"TikTokPrinter.types.objects.PrinterText":[[6,3,1,"","bold"],[6,3,1,"","content"]],"TikTokPrinter.types.objects.SoundFile":[[6,3,1,"","file_path"]],"TikTokPrinter.types.objects.VoiceText":[[6,3,1,"","content"]],TikTokPrinter:[[2,0,0,"-","client"],[5,0,0,"-","tiktok"],[6,0,0,"-","types"]]},objnames:{"0":["py","module","Python module"],"1":["py","class","Python class"],"2":["py","method","Python method"],"3":["py","attribute","Python attribute"],"4":["py","property","Python property"],"5":["py","exception","Python exception"]},objtypes:{"0":"py:module","1":"py:class","2":"py:method","3":"py:attribute","4":"py:property","5":"py:exception"},terms:{"0":[3,4,5],"0x03":3,"0x81":3,"1":[2,3,5],"10":5,"100":7,"1000":3,"129":[],"20":7,"200":5,"2022":[1,2,3,4,5,6],"255":5,"3":[5,7],"36":5,"4692":5,"5":[4,5],"50":7,"537":5,"60":3,"8":3,"9":5,"9100":3,"9600":3,"97":5,"99":5,"break":7,"byte":5,"class":[2,3,4,5,6],"default":5,"do":[1,2,3,4,5,6,7],"float":[3,4],"int":[2,3,4,5],"long":[1,2,3,4,5,6],"new":[0,5],"public":7,"return":[2,3,4,5],"static":[3,5],"true":[3,5,6,7],A:[2,6,7],At:7,For:3,If:[3,5,7],It:7,No:[6,7],Not:7,One:7,That:[3,7],The:[2,3,4,5,7],There:7,To:[3,6,7],__init__:3,_build:0,abov:7,abstracteventloop:[3,4],accept:5,access:7,action:6,ad:6,add:[0,5,6],address:3,adjust:7,advanc:7,ag:5,agent:5,aliv:5,all:[1,2,3,4,5,6,7],alreadi:7,also:7,amount:7,an:[2,3,4,5,6,7],ani:[1,2,3,4,5,6,7],anyth:[1,2,3,4,5,6,7],api:7,apidoc:0,append:6,applewebkit:5,applic:5,april:[1,2,3,4,5,6],ar:[1,2,3,4,5,6,7],area:5,arg:3,argument:3,around:5,async:[2,4,5,7],asynchron:[2,7],asyncio:[3,4],author:5,auto:3,auto_find:3,autodoc:0,automat:[3,7],avatar:7,await:[3,7],background:5,backward:7,base:[2,3,4,5,6],basic:7,baudrat:3,becaus:7,befor:6,below:7,benefit:7,best:7,between:3,block:2,blur:5,blur_radiu:5,bold:[2,4,6,7],bool:[2,3,4,5,6],bot:7,bui:7,build:7,built:7,bytes:3,c:[1,2,3,4,5,6],cach:5,can:[1,2,3,4,5,6,7],cd:0,center:7,channel:7,charact:7,chat:7,cheap:7,check:6,chrome:5,circl:[5,7],circle_blur_radiu:5,classmethod:[3,5],click:7,client:[1,7,8],code:7,collect:[2,4,6],collectionitem:6,colour:5,com:[1,2,3,4,5,6],command:[0,2,3,4,7],comment:7,commentev:7,commerci:[1,2,3,4,5,6],complet:0,complex:7,comprehens:7,connect:[2,5,6],consecut:[2,4],consol:[1,2],contain:4,content:[7,8],control:[4,5],copi:[1,2,3,4,5,6],copyright:[1,2,3,4,5,6],cor:5,could:6,cover:7,creat:[3,7],create_consol:3,create_network:3,create_seri:3,create_usb:3,crop:5,custom:[3,5,7],custom_head:5,customiz:7,deal:7,def:7,default_request_head:5,deflat:5,describ:7,desir:4,dest:5,detail:[],detect:3,dev:3,develop:7,devfil:3,devic:[3,6],device_id:5,dict:5,differ:7,difficult:7,discord:7,distribut:[1,2,3,4,5,6],divier:7,doc:0,document:7,doe:7,dollar:7,download:[3,5,7],driver:6,dsrdtr:3,dummi:3,easi:7,empti:5,en:[3,5],enchant:7,encod:5,encompass:7,end:7,endpoint:3,engin:[1,2],ensur:7,error:[1,3,7,8],esc:7,escpo:[1,2,4],escposengin:[2,3,4],escposenginegener:3,etc:4,even:7,event:[3,4,7],everyth:[4,7],except:[1,2,3,4,5,6],excit:7,ext:0,extra:3,extrem:7,fals:[2,3,4,6,7],fast:7,fetch:5,figur:7,file:[0,2,3,4,5,6],file_path:[2,3,4,6],find:[3,7],firsthand:[1,2,3,4,5,6],fix:[3,7],flat:7,flip:7,folder:0,follow:3,forc:0,format:[2,3,4,5,7],found:[3,6],from:[1,2,3,4,5,6,7],fulli:7,futur:7,gcp:5,gecko:5,gener:[0,3,5],generate_device_id:5,get:[5,6,7],gg:7,gift:[5,7],gift_imag:5,giftimag:5,github:7,give:7,given:[3,5],gmail:[1,2,3,4,5,6],go:7,goe:7,got:7,grade:7,guarante:7,guid:7,gzip:5,h8m3c6jsf4:7,ha:7,handl:4,happen:7,have:7,header:5,hell:7,here:7,hex:3,high:7,highli:7,host:3,hostnam:3,how:[3,7],html:[0,5],http:[1,3,7,8],i:7,id:[2,3],ignor:3,illeg:[1,2,3,4,5,6],imag:[2,3,4,5,6,7],img_sourc:3,immedi:7,in_ep:3,in_ep_overrid:3,inc:[1,2,3,4,5,6],includ:7,index:[2,4,5,7],inform:[3,7],initi:3,inner:4,input:7,insan:7,insert:[2,4,7],instal:[6,7],intens:5,interact:2,interfac:[1,2],interv:4,invalid:[3,6],invalidimageobject:6,invalidprinterobject:6,invest:7,io:3,isaac:[1,2,3,4,5,6],isaacikogan:[1,2,3,4,5,6],issu:7,item:[6,7],itself:7,jeanm:[2,3,4,5,6],json:5,just:7,keep:5,khtml:5,kill:7,knowledg:7,kogan:[1,2,3,4,5,6],kwarg:3,languag:5,latest:3,learn:7,left:7,less:7,level:7,lib:[2,3,4,5,6],life:7,like:[5,6],line:7,linux:7,list:[2,3,5,6],live:7,look:5,loop:[3,4],loud:4,low:7,m:5,maco:7,made:7,magic:7,main:2,make:[0,2,4,5,7],mani:7,market:7,mask_circle_transpar:5,max:5,me:[5,7],media:[1,8],medium:[1,2,3,4,5,6],messag:[2,3,4,7],method:3,might:3,miss:6,missingprinterdriv:[3,6],mode:5,modul:[7,8],monkei:6,more:[3,6,7],most:7,mostli:3,move:0,mozilla:5,much:7,multipl:[2,4],multithread:7,n:3,necessari:5,need:7,network:[3,7],newbi:7,newlin:7,nicer:5,nkmk:5,nodevicesfound:6,nojekyl:0,non:7,none:[2,3,4,5,6],nonetyp:6,note:5,nt:5,number:7,o:0,object:[1,3,4,5,8],off:7,offset:5,on_com:7,onc:[2,4],one:[3,5,7],onli:7,option:[2,3,5],origin:5,other:[1,2,3,4,5,6,7],out:[4,7],out_ep:3,out_ep_overrid:3,overrid:[2,3,4],packag:[7,8],pad:6,page:7,paramet:[2,3,4,5],pariti:3,part:7,pass:[3,6],patch:6,path:[2,3,4,5,6],peopl:7,perform:[2,4,6],perhap:7,permit:[1,2,3,4,5,6],person:7,pick:5,pictur:[5,7],pil:[2,3,4,5,6],pillow:[5,6],pip:7,plai:[2,3,4,6,7],plain:5,pleas:6,po:7,point:7,port:3,possibl:[3,7],power:7,prevent:6,print:[2,3,4,6,7],printer:[1,2,3,6],printercollect:[4,6],printerengin:4,printerimag:[4,6,7],printerinterfac:4,printertext:[4,6,7],printertwo:[2,3,4,5,6],prioriti:7,privat:7,product:3,product_id:3,profession:7,profil:[5,7],profileimag:5,program:7,programm:7,prohibit:[1,2,3,4,5,6],project:[1,2,3,4,5,6,7],properti:5,proprietari:[1,2,3,4,5,6],protobuf:5,provid:5,proxi:5,purchas:[1,2,3,4,5,6],put:7,py:[2,3,4,5,6],pycharmproject:[2,3,4,5,6],python:[3,5,7],q:5,queue:[2,3,4,6,7],queue_interv:[3,4],quick:7,radiu:5,rais:3,random:5,readi:7,readthedoc:3,receiv:3,recent:7,recommend:7,redistribut:[1,2,3,4,5,6],refer:5,releas:7,remov:5,remove_transpar:5,renam:0,repres:6,request:5,requir:6,reserv:[1,2,3,4,5,6],rest:7,rgba:5,ridicul:7,right:[1,2,3,4,5,6,7],root:0,run:2,runtimeerror:6,s:[3,5,7],safari:5,said:7,sampl:7,scheme:5,scrape:5,script:7,sec:5,secondhand:[1,2,3,4,5,6],see:7,select:3,sell:7,send:[2,4,7],sent:[2,4],serial:[3,7],servic:7,session:2,session_id:2,set:[2,3,4,7],setup:[6,7],setupmonkeypatch:6,show:[3,7],singl:2,site:[2,3,4,5,6],size:5,so:[1,2,3,4,5,6,7],someon:7,song:3,sound:[1,2,4,7],soundengin:[2,3,4],soundfil:[4,6,7],speak:[3,4,6,7],speech:[3,4,6,7],spent:7,sphinx:0,squar:5,start:[2,3,4,7],still:7,stop:[3,4],stopbit:3,str:[2,3,4,5,6],strictli:[1,2,3,4,5,6],string:[3,6],submodul:[1,8],subpackag:[7,8],subscript:7,successfulli:5,support:7,synchron:2,system:6,task:4,text:[2,3,4,6,7],than:[6,7],thei:2,them:7,thermal:3,thi:[1,2,3,4,5,6,7],thing:7,thousand:7,thread:2,through:7,thu:6,thumbnail:[5,7],ticket:7,tiktok:[1,7,8],tiktokl:[2,5,7],tiktoklivecli:2,tiktokmedia:[5,7],tiktokprint:0,tiktokprintercli:2,time:7,timeout:3,to_byt:5,to_download:5,togeth:7,tool:7,top:7,topic:7,touch:7,transform:5,transpar:5,tree:7,trend:7,ttys0:3,tupl:5,turn:5,tutori:[],txt:3,type:[1,2,4,5,7,8],unauthor:[1,2,3,4,5,6],underli:2,union:3,unique_id:2,uniqueid:7,unlik:7,up:7,updat:7,url:5,us:[1,2,3,4,5,6,7],usag:7,usb:[3,6,7],usbdeview:3,usd:7,user:[2,3,4,5,6,7],user_imag:[5,7],util:5,utter:3,valid:5,valu:3,variou:[4,5,6],ve:7,vendor:3,vendor_id:3,venv:[2,3,4,5,6],veri:7,via:[1,2,3,4,5,6,7],video:7,view:7,virtual:7,visit:3,voic:[1,2,4],voiceengin:[2,3,4],voicetext:[4,6,7],wa:[1,2,3,4,5,6,7],wai:7,wait:3,want:[2,7],warp:7,wav:7,we:7,welcom:7,went:7,what:7,when:[2,7],whether:[2,4,5],which:4,why:7,win64:5,window:[5,6,7],without:2,work:[1,2,3,4,5,6,7],written:[1,2,3,4,5,6],wrong:7,www:5,x64:5,xonxoff:3,you:[1,2,3,4,5,6,7],your:[3,4,6,7],zero:7},titles:["How To Build","TikTokPrinter package","TikTokPrinter.client package","TikTokPrinter.client.engines package","TikTokPrinter.client.printer package","TikTokPrinter.tiktok package","TikTokPrinter.types package","TikTokPrinter Docs","TikTokPrinter"],titleterms:{"30":7,To:0,addit:7,auto:7,build:0,client:[2,3,4],consol:3,content:[1,2,3,4,5,6],cost:7,detail:7,doc:7,engin:[3,4],error:6,escpo:3,etc:7,exampl:7,featur:7,how:0,http:5,interfac:4,librari:7,list:7,logic:7,media:5,modul:[1,2,3,4,5,6],now:7,object:6,packag:[1,2,3,4,5,6],price:7,primari:7,printer:[4,7],purchas:7,select:7,showcas:7,softwar:7,sound:3,submodul:[2,3,4,5,6],subpackag:[1,2],thermal:7,tiktok:5,tiktokprint:[1,2,3,4,5,6,7,8],tutori:7,type:6,voic:3,youtub:7}})
--------------------------------------------------------------------------------
/docs/_static/language_data.js:
--------------------------------------------------------------------------------
1 | /*
2 | * language_data.js
3 | * ~~~~~~~~~~~~~~~~
4 | *
5 | * This script contains the language-specific data used by searchtools.js,
6 | * namely the list of stopwords, stemmer, scorer and splitter.
7 | *
8 | * :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS.
9 | * :license: BSD, see LICENSE for details.
10 | *
11 | */
12 |
13 | var stopwords = ["a","and","are","as","at","be","but","by","for","if","in","into","is","it","near","no","not","of","on","or","such","that","the","their","then","there","these","they","this","to","was","will","with"];
14 |
15 |
16 | /* Non-minified version is copied as a separate JS file, is available */
17 |
18 | /**
19 | * Porter Stemmer
20 | */
21 | var Stemmer = function() {
22 |
23 | var step2list = {
24 | ational: 'ate',
25 | tional: 'tion',
26 | enci: 'ence',
27 | anci: 'ance',
28 | izer: 'ize',
29 | bli: 'ble',
30 | alli: 'al',
31 | entli: 'ent',
32 | eli: 'e',
33 | ousli: 'ous',
34 | ization: 'ize',
35 | ation: 'ate',
36 | ator: 'ate',
37 | alism: 'al',
38 | iveness: 'ive',
39 | fulness: 'ful',
40 | ousness: 'ous',
41 | aliti: 'al',
42 | iviti: 'ive',
43 | biliti: 'ble',
44 | logi: 'log'
45 | };
46 |
47 | var step3list = {
48 | icate: 'ic',
49 | ative: '',
50 | alize: 'al',
51 | iciti: 'ic',
52 | ical: 'ic',
53 | ful: '',
54 | ness: ''
55 | };
56 |
57 | var c = "[^aeiou]"; // consonant
58 | var v = "[aeiouy]"; // vowel
59 | var C = c + "[^aeiouy]*"; // consonant sequence
60 | var V = v + "[aeiou]*"; // vowel sequence
61 |
62 | var mgr0 = "^(" + C + ")?" + V + C; // [C]VC... is m>0
63 | var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$"; // [C]VC[V] is m=1
64 | var mgr1 = "^(" + C + ")?" + V + C + V + C; // [C]VCVC... is m>1
65 | var s_v = "^(" + C + ")?" + v; // vowel in stem
66 |
67 | this.stemWord = function (w) {
68 | var stem;
69 | var suffix;
70 | var firstch;
71 | var origword = w;
72 |
73 | if (w.length < 3)
74 | return w;
75 |
76 | var re;
77 | var re2;
78 | var re3;
79 | var re4;
80 |
81 | firstch = w.substr(0,1);
82 | if (firstch == "y")
83 | w = firstch.toUpperCase() + w.substr(1);
84 |
85 | // Step 1a
86 | re = /^(.+?)(ss|i)es$/;
87 | re2 = /^(.+?)([^s])s$/;
88 |
89 | if (re.test(w))
90 | w = w.replace(re,"$1$2");
91 | else if (re2.test(w))
92 | w = w.replace(re2,"$1$2");
93 |
94 | // Step 1b
95 | re = /^(.+?)eed$/;
96 | re2 = /^(.+?)(ed|ing)$/;
97 | if (re.test(w)) {
98 | var fp = re.exec(w);
99 | re = new RegExp(mgr0);
100 | if (re.test(fp[1])) {
101 | re = /.$/;
102 | w = w.replace(re,"");
103 | }
104 | }
105 | else if (re2.test(w)) {
106 | var fp = re2.exec(w);
107 | stem = fp[1];
108 | re2 = new RegExp(s_v);
109 | if (re2.test(stem)) {
110 | w = stem;
111 | re2 = /(at|bl|iz)$/;
112 | re3 = new RegExp("([^aeiouylsz])\\1$");
113 | re4 = new RegExp("^" + C + v + "[^aeiouwxy]$");
114 | if (re2.test(w))
115 | w = w + "e";
116 | else if (re3.test(w)) {
117 | re = /.$/;
118 | w = w.replace(re,"");
119 | }
120 | else if (re4.test(w))
121 | w = w + "e";
122 | }
123 | }
124 |
125 | // Step 1c
126 | re = /^(.+?)y$/;
127 | if (re.test(w)) {
128 | var fp = re.exec(w);
129 | stem = fp[1];
130 | re = new RegExp(s_v);
131 | if (re.test(stem))
132 | w = stem + "i";
133 | }
134 |
135 | // Step 2
136 | re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/;
137 | if (re.test(w)) {
138 | var fp = re.exec(w);
139 | stem = fp[1];
140 | suffix = fp[2];
141 | re = new RegExp(mgr0);
142 | if (re.test(stem))
143 | w = stem + step2list[suffix];
144 | }
145 |
146 | // Step 3
147 | re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/;
148 | if (re.test(w)) {
149 | var fp = re.exec(w);
150 | stem = fp[1];
151 | suffix = fp[2];
152 | re = new RegExp(mgr0);
153 | if (re.test(stem))
154 | w = stem + step3list[suffix];
155 | }
156 |
157 | // Step 4
158 | re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/;
159 | re2 = /^(.+?)(s|t)(ion)$/;
160 | if (re.test(w)) {
161 | var fp = re.exec(w);
162 | stem = fp[1];
163 | re = new RegExp(mgr1);
164 | if (re.test(stem))
165 | w = stem;
166 | }
167 | else if (re2.test(w)) {
168 | var fp = re2.exec(w);
169 | stem = fp[1] + fp[2];
170 | re2 = new RegExp(mgr1);
171 | if (re2.test(stem))
172 | w = stem;
173 | }
174 |
175 | // Step 5
176 | re = /^(.+?)e$/;
177 | if (re.test(w)) {
178 | var fp = re.exec(w);
179 | stem = fp[1];
180 | re = new RegExp(mgr1);
181 | re2 = new RegExp(meq1);
182 | re3 = new RegExp("^" + C + v + "[^aeiouwxy]$");
183 | if (re.test(stem) || (re2.test(stem) && !(re3.test(stem))))
184 | w = stem;
185 | }
186 | re = /ll$/;
187 | re2 = new RegExp(mgr1);
188 | if (re.test(w) && re2.test(w)) {
189 | re = /.$/;
190 | w = w.replace(re,"");
191 | }
192 |
193 | // and turn initial Y back to y
194 | if (firstch == "y")
195 | w = firstch.toLowerCase() + w.substr(1);
196 | return w;
197 | }
198 | }
199 |
200 |
201 |
202 |
203 | var splitChars = (function() {
204 | var result = {};
205 | var singles = [96, 180, 187, 191, 215, 247, 749, 885, 903, 907, 909, 930, 1014, 1648,
206 | 1748, 1809, 2416, 2473, 2481, 2526, 2601, 2609, 2612, 2615, 2653, 2702,
207 | 2706, 2729, 2737, 2740, 2857, 2865, 2868, 2910, 2928, 2948, 2961, 2971,
208 | 2973, 3085, 3089, 3113, 3124, 3213, 3217, 3241, 3252, 3295, 3341, 3345,
209 | 3369, 3506, 3516, 3633, 3715, 3721, 3736, 3744, 3748, 3750, 3756, 3761,
210 | 3781, 3912, 4239, 4347, 4681, 4695, 4697, 4745, 4785, 4799, 4801, 4823,
211 | 4881, 5760, 5901, 5997, 6313, 7405, 8024, 8026, 8028, 8030, 8117, 8125,
212 | 8133, 8181, 8468, 8485, 8487, 8489, 8494, 8527, 11311, 11359, 11687, 11695,
213 | 11703, 11711, 11719, 11727, 11735, 12448, 12539, 43010, 43014, 43019, 43587,
214 | 43696, 43713, 64286, 64297, 64311, 64317, 64319, 64322, 64325, 65141];
215 | var i, j, start, end;
216 | for (i = 0; i < singles.length; i++) {
217 | result[singles[i]] = true;
218 | }
219 | var ranges = [[0, 47], [58, 64], [91, 94], [123, 169], [171, 177], [182, 184], [706, 709],
220 | [722, 735], [741, 747], [751, 879], [888, 889], [894, 901], [1154, 1161],
221 | [1318, 1328], [1367, 1368], [1370, 1376], [1416, 1487], [1515, 1519], [1523, 1568],
222 | [1611, 1631], [1642, 1645], [1750, 1764], [1767, 1773], [1789, 1790], [1792, 1807],
223 | [1840, 1868], [1958, 1968], [1970, 1983], [2027, 2035], [2038, 2041], [2043, 2047],
224 | [2070, 2073], [2075, 2083], [2085, 2087], [2089, 2307], [2362, 2364], [2366, 2383],
225 | [2385, 2391], [2402, 2405], [2419, 2424], [2432, 2436], [2445, 2446], [2449, 2450],
226 | [2483, 2485], [2490, 2492], [2494, 2509], [2511, 2523], [2530, 2533], [2546, 2547],
227 | [2554, 2564], [2571, 2574], [2577, 2578], [2618, 2648], [2655, 2661], [2672, 2673],
228 | [2677, 2692], [2746, 2748], [2750, 2767], [2769, 2783], [2786, 2789], [2800, 2820],
229 | [2829, 2830], [2833, 2834], [2874, 2876], [2878, 2907], [2914, 2917], [2930, 2946],
230 | [2955, 2957], [2966, 2968], [2976, 2978], [2981, 2983], [2987, 2989], [3002, 3023],
231 | [3025, 3045], [3059, 3076], [3130, 3132], [3134, 3159], [3162, 3167], [3170, 3173],
232 | [3184, 3191], [3199, 3204], [3258, 3260], [3262, 3293], [3298, 3301], [3312, 3332],
233 | [3386, 3388], [3390, 3423], [3426, 3429], [3446, 3449], [3456, 3460], [3479, 3481],
234 | [3518, 3519], [3527, 3584], [3636, 3647], [3655, 3663], [3674, 3712], [3717, 3718],
235 | [3723, 3724], [3726, 3731], [3752, 3753], [3764, 3772], [3774, 3775], [3783, 3791],
236 | [3802, 3803], [3806, 3839], [3841, 3871], [3892, 3903], [3949, 3975], [3980, 4095],
237 | [4139, 4158], [4170, 4175], [4182, 4185], [4190, 4192], [4194, 4196], [4199, 4205],
238 | [4209, 4212], [4226, 4237], [4250, 4255], [4294, 4303], [4349, 4351], [4686, 4687],
239 | [4702, 4703], [4750, 4751], [4790, 4791], [4806, 4807], [4886, 4887], [4955, 4968],
240 | [4989, 4991], [5008, 5023], [5109, 5120], [5741, 5742], [5787, 5791], [5867, 5869],
241 | [5873, 5887], [5906, 5919], [5938, 5951], [5970, 5983], [6001, 6015], [6068, 6102],
242 | [6104, 6107], [6109, 6111], [6122, 6127], [6138, 6159], [6170, 6175], [6264, 6271],
243 | [6315, 6319], [6390, 6399], [6429, 6469], [6510, 6511], [6517, 6527], [6572, 6592],
244 | [6600, 6607], [6619, 6655], [6679, 6687], [6741, 6783], [6794, 6799], [6810, 6822],
245 | [6824, 6916], [6964, 6980], [6988, 6991], [7002, 7042], [7073, 7085], [7098, 7167],
246 | [7204, 7231], [7242, 7244], [7294, 7400], [7410, 7423], [7616, 7679], [7958, 7959],
247 | [7966, 7967], [8006, 8007], [8014, 8015], [8062, 8063], [8127, 8129], [8141, 8143],
248 | [8148, 8149], [8156, 8159], [8173, 8177], [8189, 8303], [8306, 8307], [8314, 8318],
249 | [8330, 8335], [8341, 8449], [8451, 8454], [8456, 8457], [8470, 8472], [8478, 8483],
250 | [8506, 8507], [8512, 8516], [8522, 8525], [8586, 9311], [9372, 9449], [9472, 10101],
251 | [10132, 11263], [11493, 11498], [11503, 11516], [11518, 11519], [11558, 11567],
252 | [11622, 11630], [11632, 11647], [11671, 11679], [11743, 11822], [11824, 12292],
253 | [12296, 12320], [12330, 12336], [12342, 12343], [12349, 12352], [12439, 12444],
254 | [12544, 12548], [12590, 12592], [12687, 12689], [12694, 12703], [12728, 12783],
255 | [12800, 12831], [12842, 12880], [12896, 12927], [12938, 12976], [12992, 13311],
256 | [19894, 19967], [40908, 40959], [42125, 42191], [42238, 42239], [42509, 42511],
257 | [42540, 42559], [42592, 42593], [42607, 42622], [42648, 42655], [42736, 42774],
258 | [42784, 42785], [42889, 42890], [42893, 43002], [43043, 43055], [43062, 43071],
259 | [43124, 43137], [43188, 43215], [43226, 43249], [43256, 43258], [43260, 43263],
260 | [43302, 43311], [43335, 43359], [43389, 43395], [43443, 43470], [43482, 43519],
261 | [43561, 43583], [43596, 43599], [43610, 43615], [43639, 43641], [43643, 43647],
262 | [43698, 43700], [43703, 43704], [43710, 43711], [43715, 43738], [43742, 43967],
263 | [44003, 44015], [44026, 44031], [55204, 55215], [55239, 55242], [55292, 55295],
264 | [57344, 63743], [64046, 64047], [64110, 64111], [64218, 64255], [64263, 64274],
265 | [64280, 64284], [64434, 64466], [64830, 64847], [64912, 64913], [64968, 65007],
266 | [65020, 65135], [65277, 65295], [65306, 65312], [65339, 65344], [65371, 65381],
267 | [65471, 65473], [65480, 65481], [65488, 65489], [65496, 65497]];
268 | for (i = 0; i < ranges.length; i++) {
269 | start = ranges[i][0];
270 | end = ranges[i][1];
271 | for (j = start; j <= end; j++) {
272 | result[j] = true;
273 | }
274 | }
275 | return result;
276 | })();
277 |
278 | function splitQuery(query) {
279 | var result = [];
280 | var start = -1;
281 | for (var i = 0; i < query.length; i++) {
282 | if (splitChars[query.charCodeAt(i)]) {
283 | if (start !== -1) {
284 | result.push(query.slice(start, i));
285 | start = -1;
286 | }
287 | } else if (start === -1) {
288 | start = i;
289 | }
290 | }
291 | if (start !== -1) {
292 | result.push(query.slice(start));
293 | }
294 | return result;
295 | }
296 |
297 |
298 |
--------------------------------------------------------------------------------
/docs/_static/doctools.js:
--------------------------------------------------------------------------------
1 | /*
2 | * doctools.js
3 | * ~~~~~~~~~~~
4 | *
5 | * Sphinx JavaScript utilities for all documentation.
6 | *
7 | * :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS.
8 | * :license: BSD, see LICENSE for details.
9 | *
10 | */
11 |
12 | /**
13 | * select a different prefix for underscore
14 | */
15 | $u = _.noConflict();
16 |
17 | /**
18 | * make the code below compatible with browsers without
19 | * an installed firebug like debugger
20 | if (!window.console || !console.firebug) {
21 | var names = ["log", "debug", "info", "warn", "error", "assert", "dir",
22 | "dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace",
23 | "profile", "profileEnd"];
24 | window.console = {};
25 | for (var i = 0; i < names.length; ++i)
26 | window.console[names[i]] = function() {};
27 | }
28 | */
29 |
30 | /**
31 | * small helper function to urldecode strings
32 | *
33 | * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent#Decoding_query_parameters_from_a_URL
34 | */
35 | jQuery.urldecode = function(x) {
36 | if (!x) {
37 | return x
38 | }
39 | return decodeURIComponent(x.replace(/\+/g, ' '));
40 | };
41 |
42 | /**
43 | * small helper function to urlencode strings
44 | */
45 | jQuery.urlencode = encodeURIComponent;
46 |
47 | /**
48 | * This function returns the parsed url parameters of the
49 | * current request. Multiple values per key are supported,
50 | * it will always return arrays of strings for the value parts.
51 | */
52 | jQuery.getQueryParameters = function(s) {
53 | if (typeof s === 'undefined')
54 | s = document.location.search;
55 | var parts = s.substr(s.indexOf('?') + 1).split('&');
56 | var result = {};
57 | for (var i = 0; i < parts.length; i++) {
58 | var tmp = parts[i].split('=', 2);
59 | var key = jQuery.urldecode(tmp[0]);
60 | var value = jQuery.urldecode(tmp[1]);
61 | if (key in result)
62 | result[key].push(value);
63 | else
64 | result[key] = [value];
65 | }
66 | return result;
67 | };
68 |
69 | /**
70 | * highlight a given string on a jquery object by wrapping it in
71 | * span elements with the given class name.
72 | */
73 | jQuery.fn.highlightText = function(text, className) {
74 | function highlight(node, addItems) {
75 | if (node.nodeType === 3) {
76 | var val = node.nodeValue;
77 | var pos = val.toLowerCase().indexOf(text);
78 | if (pos >= 0 &&
79 | !jQuery(node.parentNode).hasClass(className) &&
80 | !jQuery(node.parentNode).hasClass("nohighlight")) {
81 | var span;
82 | var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg");
83 | if (isInSVG) {
84 | span = document.createElementNS("http://www.w3.org/2000/svg", "tspan");
85 | } else {
86 | span = document.createElement("span");
87 | span.className = className;
88 | }
89 | span.appendChild(document.createTextNode(val.substr(pos, text.length)));
90 | node.parentNode.insertBefore(span, node.parentNode.insertBefore(
91 | document.createTextNode(val.substr(pos + text.length)),
92 | node.nextSibling));
93 | node.nodeValue = val.substr(0, pos);
94 | if (isInSVG) {
95 | var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect");
96 | var bbox = node.parentElement.getBBox();
97 | rect.x.baseVal.value = bbox.x;
98 | rect.y.baseVal.value = bbox.y;
99 | rect.width.baseVal.value = bbox.width;
100 | rect.height.baseVal.value = bbox.height;
101 | rect.setAttribute('class', className);
102 | addItems.push({
103 | "parent": node.parentNode,
104 | "target": rect});
105 | }
106 | }
107 | }
108 | else if (!jQuery(node).is("button, select, textarea")) {
109 | jQuery.each(node.childNodes, function() {
110 | highlight(this, addItems);
111 | });
112 | }
113 | }
114 | var addItems = [];
115 | var result = this.each(function() {
116 | highlight(this, addItems);
117 | });
118 | for (var i = 0; i < addItems.length; ++i) {
119 | jQuery(addItems[i].parent).before(addItems[i].target);
120 | }
121 | return result;
122 | };
123 |
124 | /*
125 | * backward compatibility for jQuery.browser
126 | * This will be supported until firefox bug is fixed.
127 | */
128 | if (!jQuery.browser) {
129 | jQuery.uaMatch = function(ua) {
130 | ua = ua.toLowerCase();
131 |
132 | var match = /(chrome)[ \/]([\w.]+)/.exec(ua) ||
133 | /(webkit)[ \/]([\w.]+)/.exec(ua) ||
134 | /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) ||
135 | /(msie) ([\w.]+)/.exec(ua) ||
136 | ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) ||
137 | [];
138 |
139 | return {
140 | browser: match[ 1 ] || "",
141 | version: match[ 2 ] || "0"
142 | };
143 | };
144 | jQuery.browser = {};
145 | jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true;
146 | }
147 |
148 | /**
149 | * Small JavaScript module for the documentation.
150 | */
151 | var Documentation = {
152 |
153 | init : function() {
154 | this.fixFirefoxAnchorBug();
155 | this.highlightSearchWords();
156 | this.initIndexTable();
157 | this.initOnKeyListeners();
158 | },
159 |
160 | /**
161 | * i18n support
162 | */
163 | TRANSLATIONS : {},
164 | PLURAL_EXPR : function(n) { return n === 1 ? 0 : 1; },
165 | LOCALE : 'unknown',
166 |
167 | // gettext and ngettext don't access this so that the functions
168 | // can safely bound to a different name (_ = Documentation.gettext)
169 | gettext : function(string) {
170 | var translated = Documentation.TRANSLATIONS[string];
171 | if (typeof translated === 'undefined')
172 | return string;
173 | return (typeof translated === 'string') ? translated : translated[0];
174 | },
175 |
176 | ngettext : function(singular, plural, n) {
177 | var translated = Documentation.TRANSLATIONS[singular];
178 | if (typeof translated === 'undefined')
179 | return (n == 1) ? singular : plural;
180 | return translated[Documentation.PLURALEXPR(n)];
181 | },
182 |
183 | addTranslations : function(catalog) {
184 | for (var key in catalog.messages)
185 | this.TRANSLATIONS[key] = catalog.messages[key];
186 | this.PLURAL_EXPR = new Function('n', 'return +(' + catalog.plural_expr + ')');
187 | this.LOCALE = catalog.locale;
188 | },
189 |
190 | /**
191 | * add context elements like header anchor links
192 | */
193 | addContextElements : function() {
194 | $('div[id] > :header:first').each(function() {
195 | $('\u00B6').
196 | attr('href', '#' + this.id).
197 | attr('title', _('Permalink to this headline')).
198 | appendTo(this);
199 | });
200 | $('dt[id]').each(function() {
201 | $('\u00B6').
202 | attr('href', '#' + this.id).
203 | attr('title', _('Permalink to this definition')).
204 | appendTo(this);
205 | });
206 | },
207 |
208 | /**
209 | * workaround a firefox stupidity
210 | * see: https://bugzilla.mozilla.org/show_bug.cgi?id=645075
211 | */
212 | fixFirefoxAnchorBug : function() {
213 | if (document.location.hash && $.browser.mozilla)
214 | window.setTimeout(function() {
215 | document.location.href += '';
216 | }, 10);
217 | },
218 |
219 | /**
220 | * highlight the search words provided in the url in the text
221 | */
222 | highlightSearchWords : function() {
223 | var params = $.getQueryParameters();
224 | var terms = (params.highlight) ? params.highlight[0].split(/\s+/) : [];
225 | if (terms.length) {
226 | var body = $('div.body');
227 | if (!body.length) {
228 | body = $('body');
229 | }
230 | window.setTimeout(function() {
231 | $.each(terms, function() {
232 | body.highlightText(this.toLowerCase(), 'highlighted');
233 | });
234 | }, 10);
235 | $('
A Python library to print to thermal printers from TikTokLive.
87 |
88 |
89 |
90 |
91 |
92 |
Welcome to the public GitHub information page for the number one best-selling, most customizable & professional-grade tool for thermal printing on TikTok.
93 |
Thermal printing is a very recent, very exciting trend on TikTok. It is also a very complex one. Not because the topic is difficult in and of itself, but because people want so many different things.
94 |
That’s why I developed an all-encompassing, multithreaded thermal printing program that does… everything, including a comprehensive video tutorial on how to use it, made by me.
95 |
No subscription unlike many virtual printer services. One-time, life-time purchase. Can be installed in python via pip. Includes access to all future releases/updates to the project.
If you want to see just how powerful this library is (and easy to use), we made a video tutorial & showcase
101 | that goes through the basics of how to get started using it. Click the thumbnail below to warp.
This library is the most advanced, most purchased printer script on the market. Not only does it have an insane number of features, it was made by the person that created
113 | the TikTokLive library. That gives you a benefit of ensuring that it is not only guaranteed to work, but guaranteed to be the best of the best you will possibly find.
114 |
The price is set at what it is because of the ridiculous amount of time spent learning to program, creating the TikTokLive library, figuring out how to print on Windows, MacOS and Linux, creating guides, building the
115 | highly complex script itself, learning all the ways it can go wrong and fixing them, dealing with customer issues and so much more.
116 |
Purchasing this script is an investment that you can make thousands of dollars off of. At this price-point, that’s a hell of a deal. You are recommended to have basic Python knowledge to use this library.
Here’s a sample of what you can do with this library in less than 30 lines of code:
126 |
127 |
To show you just how advanced the library is, here we can print a profile picture, play a sound, and do text-to-speech… in just 3 “true” lines of code. This is insane.
128 |
@client.on("comment")
129 | asyncdefon_comment(event:CommentEvent):
130 | client.queue(
131 |
132 | # Divier Text
133 | PrinterText("-"*20),
134 |
135 | # Speak the comment
136 | VoiceText(event.user.uniqueId+" said "+event.comment),
137 |
138 | # Print the comment to printer
139 | PrinterText(event.user.uniqueId+" -> "+event.comment),
140 |
141 | # Play a sound
142 | SoundFile("enchanted.wav"),
143 |
144 | # Download their avatar and print the image
145 | PrinterImage(awaitTikTokMedia.user_image(event.user,circle=False))
146 |
147 | )
148 |