Make twitch/youtube chat widget
This commit is contained in:
parent
de2f9cccb7
commit
0842dccf73
22 changed files with 3787 additions and 45 deletions
197
DISTRIBUTION.md
Normal file
197
DISTRIBUTION.md
Normal file
|
|
@ -0,0 +1,197 @@
|
|||
# Distribution Guide
|
||||
|
||||
## How the Config System Works with PyInstaller
|
||||
|
||||
### Architecture Overview
|
||||
|
||||
The application uses a **two-location** file system:
|
||||
|
||||
1. **Bundled Files (Read-Only)** - Inside the .exe
|
||||
- Python source code
|
||||
- Web assets (`app/assets/web/`)
|
||||
- Everything compiled into the executable
|
||||
|
||||
2. **User Data Directory (Read-Write)** - User's local machine
|
||||
- Configuration: `%LOCALAPPDATA%\StreamerWidgets\config.json`
|
||||
- OAuth Tokens: `%LOCALAPPDATA%\StreamerWidgets\tokens.json`
|
||||
- Album Art: `%LOCALAPPDATA%\StreamerWidgets\art\`
|
||||
|
||||
### Why This Works Well
|
||||
|
||||
**Benefits:**
|
||||
- ✅ **No hardcoded credentials** in the .exe
|
||||
- ✅ **Survives updates** - User config persists when you release new versions
|
||||
- ✅ **User-specific** - Each user has their own OAuth credentials
|
||||
- ✅ **Secure** - Credentials never in source control or distributed executable
|
||||
- ✅ **Easy to find** - Standard Windows application data location
|
||||
|
||||
**User Experience:**
|
||||
1. User downloads and runs `streamer-widgets.exe`
|
||||
2. App creates `config.json` automatically on first run
|
||||
3. User visits http://127.0.0.1:8765/config
|
||||
4. Clicks "Open Config Directory" button
|
||||
5. Edits `config.json` with their OAuth credentials
|
||||
6. Restarts the app
|
||||
7. OAuth authentication works!
|
||||
|
||||
## Building the Executable
|
||||
|
||||
### Build Command
|
||||
|
||||
```bash
|
||||
uv sync --group build
|
||||
pyinstaller --noconsole --onefile --name streamer-widgets ^
|
||||
--add-data "app/assets/web;app/assets/web" ^
|
||||
run_tray.py
|
||||
```
|
||||
|
||||
### What Gets Bundled
|
||||
|
||||
- All Python code
|
||||
- `app/assets/web/` directory (HTML, CSS, JS for widgets)
|
||||
- Python dependencies
|
||||
|
||||
### What Does NOT Get Bundled
|
||||
|
||||
- `config.json` - Created at runtime in user directory
|
||||
- `tokens.json` - Created when user authenticates
|
||||
- `config.example.json` - Template file (not needed in .exe)
|
||||
|
||||
## Distribution Checklist
|
||||
|
||||
When distributing the application:
|
||||
|
||||
- [ ] Build the executable with PyInstaller
|
||||
- [ ] Test the .exe on a clean machine (no Python installed)
|
||||
- [ ] Verify config directory creation works
|
||||
- [ ] Test "Open Config Directory" button in web UI
|
||||
- [ ] Include `CHAT_SETUP.md` or link to documentation
|
||||
- [ ] Provide example OAuth setup instructions
|
||||
|
||||
## User Setup Instructions (for README/docs)
|
||||
|
||||
### For End Users
|
||||
|
||||
**First Run:**
|
||||
|
||||
1. Run `streamer-widgets.exe`
|
||||
2. The app creates a configuration file automatically
|
||||
3. Open http://127.0.0.1:8765/config in your browser
|
||||
|
||||
**Setting Up Chat Authentication:**
|
||||
|
||||
1. In the config UI, you'll see a warning if OAuth is not configured
|
||||
2. Click the **"📁 Open Config Directory"** button
|
||||
3. This opens: `C:\Users\YourName\AppData\Local\StreamerWidgets\`
|
||||
4. Edit `config.json` with your OAuth credentials:
|
||||
- Get Twitch credentials from https://dev.twitch.tv/console/apps
|
||||
- Get YouTube credentials from https://console.cloud.google.com/
|
||||
5. Save the file
|
||||
6. **Restart the application**
|
||||
7. Return to http://127.0.0.1:8765/config and click "Login with Twitch/YouTube"
|
||||
|
||||
**Example config.json:**
|
||||
|
||||
```json
|
||||
{
|
||||
"twitch_oauth": {
|
||||
"client_id": "your_twitch_client_id_here",
|
||||
"client_secret": "your_twitch_client_secret_here",
|
||||
"redirect_uri": "http://localhost:8765/auth/twitch/callback"
|
||||
},
|
||||
"youtube_oauth": {
|
||||
"client_id": "your_youtube_client_id.apps.googleusercontent.com",
|
||||
"client_secret": "your_youtube_client_secret_here",
|
||||
"redirect_uri": "http://localhost:8765/auth/youtube/callback"
|
||||
},
|
||||
"server_host": "127.0.0.1",
|
||||
"server_port": 8765
|
||||
}
|
||||
```
|
||||
|
||||
## Troubleshooting for Users
|
||||
|
||||
### "I can't find the config file"
|
||||
|
||||
1. Visit http://127.0.0.1:8765/config
|
||||
2. The warning box shows the exact path
|
||||
3. Or click "Open Config Directory" to open it directly
|
||||
|
||||
### "OAuth isn't working"
|
||||
|
||||
1. Check that `client_id` and `client_secret` are filled in (not placeholders)
|
||||
2. Make sure you **restarted the app** after editing config.json
|
||||
3. Verify the redirect URIs match in both:
|
||||
- Your Twitch/YouTube developer console
|
||||
- The `config.json` file
|
||||
|
||||
### "Config directory won't open"
|
||||
|
||||
The path is always: `%LOCALAPPDATA%\StreamerWidgets\`
|
||||
|
||||
In Windows:
|
||||
1. Press `Win + R`
|
||||
2. Type: `%LOCALAPPDATA%\StreamerWidgets`
|
||||
3. Press Enter
|
||||
|
||||
## Updates and Versioning
|
||||
|
||||
When you release a new version:
|
||||
|
||||
1. Users download the new `.exe`
|
||||
2. **Config persists** - No need to reconfigure OAuth
|
||||
3. **Tokens persist** - Users stay authenticated
|
||||
4. Just replace the old .exe with the new one
|
||||
|
||||
The config directory is **separate from the executable**, so updates are seamless.
|
||||
|
||||
## Security Considerations
|
||||
|
||||
**What's Safe:**
|
||||
- Distribute `streamer-widgets.exe` publicly
|
||||
- Share the source code on GitHub
|
||||
- Include `config.example.json` as a template
|
||||
|
||||
**What to NEVER Distribute:**
|
||||
- Actual `config.json` with real credentials
|
||||
- `tokens.json` files
|
||||
- Real OAuth Client IDs/Secrets
|
||||
|
||||
**User Responsibility:**
|
||||
- Users must obtain their own OAuth credentials
|
||||
- Credentials are stored locally on their machine only
|
||||
- Never share `config.json` or `tokens.json` files
|
||||
|
||||
## Advantages Over Alternatives
|
||||
|
||||
### Why Not Environment Variables?
|
||||
❌ Hard for non-technical users
|
||||
❌ Doesn't work well with PyInstaller .exe
|
||||
❌ Difficult to edit and manage
|
||||
|
||||
### Why Not Hardcoded Credentials?
|
||||
❌ Security risk
|
||||
❌ Every user would use the same credentials
|
||||
❌ Would hit OAuth rate limits
|
||||
❌ Can't distribute publicly
|
||||
|
||||
### Why Config File in User Directory?
|
||||
✅ Standard practice for desktop apps
|
||||
✅ Survives application updates
|
||||
✅ User-specific credentials
|
||||
✅ Easy to locate and edit
|
||||
✅ Secure (local machine only)
|
||||
✅ Works perfectly with PyInstaller
|
||||
|
||||
## Summary
|
||||
|
||||
The config system is **production-ready for distribution**:
|
||||
|
||||
1. **No code changes needed** by end users
|
||||
2. **Auto-creates config** on first run
|
||||
3. **Easy to find** via UI button
|
||||
4. **Persists across updates**
|
||||
5. **Secure** - no credentials in .exe
|
||||
6. **User-friendly** - clear instructions in UI
|
||||
|
||||
Just build the .exe and distribute it. Users will be guided through the setup process by the web UI.
|
||||
Loading…
Add table
Add a link
Reference in a new issue