wirenote 0.1.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- wirenote/__init__.py +3 -0
- wirenote/calendar/__init__.py +2 -0
- wirenote/calendar/ics.py +236 -0
- wirenote/capture/__init__.py +2 -0
- wirenote/capture/recorder.py +304 -0
- wirenote/capture/wav.py +58 -0
- wirenote/cli.py +262 -0
- wirenote/config/__init__.py +2 -0
- wirenote/config/apps.py +158 -0
- wirenote/config/migrate.py +130 -0
- wirenote/config/perms.py +61 -0
- wirenote/config/secrets.py +98 -0
- wirenote/config/settings.py +176 -0
- wirenote/config/vocabulary.py +32 -0
- wirenote/data/wirenote-ui.service +15 -0
- wirenote/data/wirenote.desktop +10 -0
- wirenote/data/wirenote.service +15 -0
- wirenote/detector/__init__.py +2 -0
- wirenote/detector/core.py +115 -0
- wirenote/detector/daemon.py +743 -0
- wirenote/detector/graph.py +102 -0
- wirenote/detector/identity.py +205 -0
- wirenote/detector/streams.py +69 -0
- wirenote/detector/tracker.py +304 -0
- wirenote/net/__init__.py +2 -0
- wirenote/net/peer.py +101 -0
- wirenote/notify/__init__.py +2 -0
- wirenote/notify/clipboard.py +43 -0
- wirenote/notify/dbus.py +89 -0
- wirenote/process/__init__.py +2 -0
- wirenote/process/jobs.py +122 -0
- wirenote/process/merge.py +87 -0
- wirenote/process/models.py +57 -0
- wirenote/process/note.py +124 -0
- wirenote/process/speakers.py +295 -0
- wirenote/process/summarize.py +287 -0
- wirenote/process/transcribe.py +97 -0
- wirenote/process/worker.py +229 -0
- wirenote/tools/__init__.py +2 -0
- wirenote/tools/dump_streams.py +595 -0
- wirenote/tools/install.py +140 -0
- wirenote/tools/setup.py +338 -0
- wirenote/ui/__init__.py +2 -0
- wirenote/ui/data.py +783 -0
- wirenote/ui/launch.py +88 -0
- wirenote/ui/server.py +423 -0
- wirenote/ui/static/app.css +907 -0
- wirenote/ui/static/app.js +1267 -0
- wirenote/ui/static/fonts/OFL.txt +93 -0
- wirenote/ui/static/fonts/inter-latin-ext.woff2 +0 -0
- wirenote/ui/static/fonts/inter-latin.woff2 +0 -0
- wirenote/ui/static/icon.svg +1 -0
- wirenote/ui/static/icons.svg +31 -0
- wirenote/ui/static/index.html +57 -0
- wirenote/ui/static/login.html +19 -0
- wirenote-0.1.0.dist-info/METADATA +106 -0
- wirenote-0.1.0.dist-info/RECORD +60 -0
- wirenote-0.1.0.dist-info/WHEEL +4 -0
- wirenote-0.1.0.dist-info/entry_points.txt +2 -0
- wirenote-0.1.0.dist-info/licenses/LICENSE +661 -0
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
Google Inc.
|
|
2
|
+
|
|
3
|
+
This Font Software is licensed under the SIL Open Font License, Version 1.1.
|
|
4
|
+
This license is copied below, and is also available with a FAQ at:
|
|
5
|
+
http://scripts.sil.org/OFL
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
-----------------------------------------------------------
|
|
9
|
+
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
|
|
10
|
+
-----------------------------------------------------------
|
|
11
|
+
|
|
12
|
+
PREAMBLE
|
|
13
|
+
The goals of the Open Font License (OFL) are to stimulate worldwide
|
|
14
|
+
development of collaborative font projects, to support the font creation
|
|
15
|
+
efforts of academic and linguistic communities, and to provide a free and
|
|
16
|
+
open framework in which fonts may be shared and improved in partnership
|
|
17
|
+
with others.
|
|
18
|
+
|
|
19
|
+
The OFL allows the licensed fonts to be used, studied, modified and
|
|
20
|
+
redistributed freely as long as they are not sold by themselves. The
|
|
21
|
+
fonts, including any derivative works, can be bundled, embedded,
|
|
22
|
+
redistributed and/or sold with any software provided that any reserved
|
|
23
|
+
names are not used by derivative works. The fonts and derivatives,
|
|
24
|
+
however, cannot be released under any other type of license. The
|
|
25
|
+
requirement for fonts to remain under this license does not apply
|
|
26
|
+
to any document created using the fonts or their derivatives.
|
|
27
|
+
|
|
28
|
+
DEFINITIONS
|
|
29
|
+
"Font Software" refers to the set of files released by the Copyright
|
|
30
|
+
Holder(s) under this license and clearly marked as such. This may
|
|
31
|
+
include source files, build scripts and documentation.
|
|
32
|
+
|
|
33
|
+
"Reserved Font Name" refers to any names specified as such after the
|
|
34
|
+
copyright statement(s).
|
|
35
|
+
|
|
36
|
+
"Original Version" refers to the collection of Font Software components as
|
|
37
|
+
distributed by the Copyright Holder(s).
|
|
38
|
+
|
|
39
|
+
"Modified Version" refers to any derivative made by adding to, deleting,
|
|
40
|
+
or substituting -- in part or in whole -- any of the components of the
|
|
41
|
+
Original Version, by changing formats or by porting the Font Software to a
|
|
42
|
+
new environment.
|
|
43
|
+
|
|
44
|
+
"Author" refers to any designer, engineer, programmer, technical
|
|
45
|
+
writer or other person who contributed to the Font Software.
|
|
46
|
+
|
|
47
|
+
PERMISSION & CONDITIONS
|
|
48
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
|
49
|
+
a copy of the Font Software, to use, study, copy, merge, embed, modify,
|
|
50
|
+
redistribute, and sell modified and unmodified copies of the Font
|
|
51
|
+
Software, subject to the following conditions:
|
|
52
|
+
|
|
53
|
+
1) Neither the Font Software nor any of its individual components,
|
|
54
|
+
in Original or Modified Versions, may be sold by itself.
|
|
55
|
+
|
|
56
|
+
2) Original or Modified Versions of the Font Software may be bundled,
|
|
57
|
+
redistributed and/or sold with any software, provided that each copy
|
|
58
|
+
contains the above copyright notice and this license. These can be
|
|
59
|
+
included either as stand-alone text files, human-readable headers or
|
|
60
|
+
in the appropriate machine-readable metadata fields within text or
|
|
61
|
+
binary files as long as those fields can be easily viewed by the user.
|
|
62
|
+
|
|
63
|
+
3) No Modified Version of the Font Software may use the Reserved Font
|
|
64
|
+
Name(s) unless explicit written permission is granted by the corresponding
|
|
65
|
+
Copyright Holder. This restriction only applies to the primary font name as
|
|
66
|
+
presented to the users.
|
|
67
|
+
|
|
68
|
+
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
|
|
69
|
+
Software shall not be used to promote, endorse or advertise any
|
|
70
|
+
Modified Version, except to acknowledge the contribution(s) of the
|
|
71
|
+
Copyright Holder(s) and the Author(s) or with their explicit written
|
|
72
|
+
permission.
|
|
73
|
+
|
|
74
|
+
5) The Font Software, modified or unmodified, in part or in whole,
|
|
75
|
+
must be distributed entirely under this license, and must not be
|
|
76
|
+
distributed under any other license. The requirement for fonts to
|
|
77
|
+
remain under this license does not apply to any document created
|
|
78
|
+
using the Font Software.
|
|
79
|
+
|
|
80
|
+
TERMINATION
|
|
81
|
+
This license becomes null and void if any of the above conditions are
|
|
82
|
+
not met.
|
|
83
|
+
|
|
84
|
+
DISCLAIMER
|
|
85
|
+
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
86
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
|
|
87
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
|
|
88
|
+
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
|
|
89
|
+
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
|
90
|
+
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
|
|
91
|
+
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
92
|
+
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
|
|
93
|
+
OTHER DEALINGS IN THE FONT SOFTWARE.
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"><rect width="32" height="32" rx="8" fill="#1f8a5b"/><rect x="8" y="12" width="3" height="8" rx="1.5" fill="#fff"/><rect x="14.5" y="8" width="3" height="16" rx="1.5" fill="#fff"/><rect x="21" y="11" width="3" height="10" rx="1.5" fill="#fff"/></svg>
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round">
|
|
2
|
+
<symbol id="search" viewBox="0 0 24 24"><circle cx="11" cy="11" r="6.5"/><path d="m20 20-4.2-4.2"/></symbol>
|
|
3
|
+
<symbol id="play" viewBox="0 0 24 24"><path d="M8 5.5v13a.6.6 0 0 0 .9.5l10.2-6.5a.6.6 0 0 0 0-1L8.9 5a.6.6 0 0 0-.9.5Z" fill="currentColor" stroke="none"/></symbol>
|
|
4
|
+
<symbol id="pause" viewBox="0 0 24 24"><rect x="6.5" y="5" width="3.6" height="14" rx="1" fill="currentColor" stroke="none"/><rect x="13.9" y="5" width="3.6" height="14" rx="1" fill="currentColor" stroke="none"/></symbol>
|
|
5
|
+
<symbol id="back15" viewBox="0 0 24 24"><path d="M4 12a8 8 0 1 0 2.4-5.7"/><path d="M4 4v4h4"/><text x="12" y="15.2" font-size="7.2" text-anchor="middle" fill="currentColor" stroke="none" font-family="Inter, sans-serif" font-weight="600">15</text></symbol>
|
|
6
|
+
<symbol id="fwd15" viewBox="0 0 24 24"><path d="M20 12a8 8 0 1 1-2.4-5.7"/><path d="M20 4v4h-4"/><text x="12" y="15.2" font-size="7.2" text-anchor="middle" fill="currentColor" stroke="none" font-family="Inter, sans-serif" font-weight="600">15</text></symbol>
|
|
7
|
+
<symbol id="calendar" viewBox="0 0 24 24"><rect x="3.5" y="5" width="17" height="15" rx="2.5"/><path d="M3.5 10h17M8 3v4M16 3v4"/></symbol>
|
|
8
|
+
<symbol id="clock" viewBox="0 0 24 24"><circle cx="12" cy="12" r="8.5"/><path d="M12 7.5V12l3 2"/></symbol>
|
|
9
|
+
<symbol id="users" viewBox="0 0 24 24"><circle cx="9" cy="8.5" r="3.5"/><path d="M2.5 19.5c.8-3.3 3.4-5 6.5-5s5.7 1.7 6.5 5"/><path d="M16 5.2a3.5 3.5 0 0 1 0 6.6M18 14.6c1.8.7 3 2.4 3.5 4.9"/></symbol>
|
|
10
|
+
<symbol id="mic" viewBox="0 0 24 24"><rect x="9" y="3" width="6" height="11" rx="3"/><path d="M5.5 11a6.5 6.5 0 0 0 13 0M12 17.5V21"/></symbol>
|
|
11
|
+
<symbol id="video" viewBox="0 0 24 24"><rect x="3" y="6" width="13" height="12" rx="2.5"/><path d="m16 10.5 5-3v9l-5-3"/></symbol>
|
|
12
|
+
<symbol id="check" viewBox="0 0 24 24"><path d="m5 12.5 4.5 4.5L19 7.5"/></symbol>
|
|
13
|
+
<symbol id="more" viewBox="0 0 24 24"><circle cx="5.5" cy="12" r="1.3" fill="currentColor"/><circle cx="12" cy="12" r="1.3" fill="currentColor"/><circle cx="18.5" cy="12" r="1.3" fill="currentColor"/></symbol>
|
|
14
|
+
<symbol id="copy" viewBox="0 0 24 24"><rect x="8.5" y="8.5" width="12" height="12" rx="2.5"/><path d="M15.5 8.5V6a2.5 2.5 0 0 0-2.5-2.5H6A2.5 2.5 0 0 0 3.5 6v7A2.5 2.5 0 0 0 6 15.5h2.5"/></symbol>
|
|
15
|
+
<symbol id="sparkle" viewBox="0 0 24 24"><path d="M12 3.5c.5 3.9 2.6 6 6.5 6.5-3.9.5-6 2.6-6.5 6.5-.5-3.9-2.6-6-6.5-6.5 3.9-.5 6-2.6 6.5-6.5Z"/><path d="M18.5 15.5c.2 1.6 1 2.4 2.5 2.5-1.5.2-2.3 1-2.5 2.5-.2-1.5-1-2.3-2.5-2.5 1.5-.1 2.3-.9 2.5-2.5Z"/></symbol>
|
|
16
|
+
<symbol id="refresh" viewBox="0 0 24 24"><path d="M20 11a8 8 0 0 0-14.3-4.6L4 8.5"/><path d="M4 4v4.5h4.5"/><path d="M4 13a8 8 0 0 0 14.3 4.6l1.7-2.1"/><path d="M20 20v-4.5h-4.5"/></symbol>
|
|
17
|
+
<symbol id="trash" viewBox="0 0 24 24"><path d="M4 6.5h16M9.5 6.5V4.5h5v2M6 6.5l1 13a1.5 1.5 0 0 0 1.5 1.4h7a1.5 1.5 0 0 0 1.5-1.4l1-13"/></symbol>
|
|
18
|
+
<symbol id="file" viewBox="0 0 24 24"><path d="M13.5 3.5H7A2.5 2.5 0 0 0 4.5 6v12A2.5 2.5 0 0 0 7 20.5h10a2.5 2.5 0 0 0 2.5-2.5V9.5l-6-6Z"/><path d="M13.5 3.5v6h6M8.5 13.5h7M8.5 17h5"/></symbol>
|
|
19
|
+
<symbol id="folder" viewBox="0 0 24 24"><path d="M3.5 7A2.5 2.5 0 0 1 6 4.5h3.6l2 2.5H18A2.5 2.5 0 0 1 20.5 9.5v8A2.5 2.5 0 0 1 18 20H6a2.5 2.5 0 0 1-2.5-2.5V7Z"/></symbol>
|
|
20
|
+
<symbol id="send" viewBox="0 0 24 24"><path d="M12 19V5M6 11l6-6 6 6"/></symbol>
|
|
21
|
+
<symbol id="jump" viewBox="0 0 24 24"><path d="M7 17 17 7M9 7h8v8"/></symbol>
|
|
22
|
+
<symbol id="stop" viewBox="0 0 24 24"><rect x="6.5" y="6.5" width="11" height="11" rx="2" fill="currentColor" stroke="none"/></symbol>
|
|
23
|
+
<symbol id="audio-off" viewBox="0 0 24 24"><path d="M4 9.5v5h3.5L12 18.5v-13L7.5 9.5H4Z"/><path d="m16 9.5 5 5M21 9.5l-5 5"/></symbol>
|
|
24
|
+
<symbol id="edit" viewBox="0 0 24 24"><path d="M4.5 19.5h4l10-10a2.8 2.8 0 0 0-4-4l-10 10v4Z"/></symbol>
|
|
25
|
+
<symbol id="home" viewBox="0 0 24 24"><path d="M4 10.5 12 4l8 6.5V19a1.5 1.5 0 0 1-1.5 1.5H15v-6H9v6H5.5A1.5 1.5 0 0 1 4 19v-8.5Z"/></symbol>
|
|
26
|
+
<symbol id="check-square" viewBox="0 0 24 24"><rect x="4" y="4" width="16" height="16" rx="3.5"/><path d="m8.5 12.2 2.4 2.4 4.8-5"/></symbol>
|
|
27
|
+
<symbol id="settings" viewBox="0 0 24 24"><circle cx="12" cy="12" r="3"/><path d="M19 12a7 7 0 0 0-.1-1.2l2-1.5-2-3.4-2.3.9a7 7 0 0 0-2-1.2L14.2 3h-4.4l-.4 2.6a7 7 0 0 0-2 1.2l-2.3-.9-2 3.4 2 1.5a7 7 0 0 0 0 2.4l-2 1.5 2 3.4 2.3-.9a7 7 0 0 0 2 1.2l.4 2.6h4.4l.4-2.6a7 7 0 0 0 2-1.2l2.3.9 2-3.4-2-1.5c.1-.4.1-.8.1-1.2Z"/></symbol>
|
|
28
|
+
<symbol id="mail" viewBox="0 0 24 24"><rect x="3.5" y="5.5" width="17" height="13" rx="2.5"/><path d="m4.5 7 7.5 6 7.5-6"/></symbol>
|
|
29
|
+
<symbol id="pen" viewBox="0 0 24 24"><path d="M4.5 19.5h4l10-10a2.8 2.8 0 0 0-4-4l-10 10v4Z"/><path d="M13 7l4 4"/></symbol>
|
|
30
|
+
<symbol id="merge" viewBox="0 0 24 24"><path d="M7 4v5a5 5 0 0 0 5 5h5"/><path d="M14 11l3 3-3 3"/><path d="M7 20v-4"/></symbol>
|
|
31
|
+
</svg>
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
6
|
+
<meta name="wirenote-token" content="{{TOKEN}}">
|
|
7
|
+
<meta name="color-scheme" content="light dark">
|
|
8
|
+
<title>Wirenote</title>
|
|
9
|
+
<link rel="icon" href="/static/icon.svg" type="image/svg+xml">
|
|
10
|
+
<link rel="stylesheet" href="/static/app.css">
|
|
11
|
+
<script src="/static/app.js" defer></script>
|
|
12
|
+
</head>
|
|
13
|
+
<body>
|
|
14
|
+
<div class="app">
|
|
15
|
+
<aside class="sidebar">
|
|
16
|
+
<a class="brand" href="#/">
|
|
17
|
+
<span class="brand-mark" aria-hidden="true"></span>
|
|
18
|
+
<span>Wirenote</span>
|
|
19
|
+
</a>
|
|
20
|
+
<button id="record-btn" class="record-btn" type="button">
|
|
21
|
+
<span class="rec-dot" aria-hidden="true"></span><span id="record-label">Record a meeting</span>
|
|
22
|
+
</button>
|
|
23
|
+
<nav class="nav" aria-label="Sections">
|
|
24
|
+
<a class="nav-item" href="#/" data-nav="home"><svg class="icon"><use href="/static/icons.svg#home"/></svg>Home</a>
|
|
25
|
+
<a class="nav-item" href="#/ask" data-nav="ask"><svg class="icon"><use href="/static/icons.svg#sparkle"/></svg>Ask your meetings</a>
|
|
26
|
+
<a class="nav-item" href="#/tasks" data-nav="tasks"><svg class="icon"><use href="/static/icons.svg#check-square"/></svg>Action items<span id="tasks-count" class="nav-count"></span></a>
|
|
27
|
+
<a class="nav-item" href="#/settings" data-nav="settings"><svg class="icon"><use href="/static/icons.svg#settings"/></svg>Settings</a>
|
|
28
|
+
</nav>
|
|
29
|
+
<label class="search">
|
|
30
|
+
<svg class="icon" aria-hidden="true"><use href="/static/icons.svg#search"/></svg>
|
|
31
|
+
<input id="search" type="search" placeholder="Search meetings" autocomplete="off" spellcheck="false">
|
|
32
|
+
<kbd>Ctrl K</kbd>
|
|
33
|
+
</label>
|
|
34
|
+
<nav id="list" class="list" aria-label="Meetings"></nav>
|
|
35
|
+
<footer id="sidebar-status" class="sidebar-status"></footer>
|
|
36
|
+
<div class="about">Wirenote {{VERSION}} · AGPL-3.0 · <a href="https://github.com/knowhrishi/wirenote" target="_blank" rel="noopener noreferrer">Source</a></div>
|
|
37
|
+
</aside>
|
|
38
|
+
|
|
39
|
+
<div class="content">
|
|
40
|
+
<div id="banner" class="banner" hidden></div>
|
|
41
|
+
<main id="main" class="main" tabindex="-1"></main>
|
|
42
|
+
<div id="player" class="player" hidden>
|
|
43
|
+
<button class="btn-icon" id="p-back" title="Back 15 s (←)"><svg class="icon"><use href="/static/icons.svg#back15"/></svg></button>
|
|
44
|
+
<button class="btn-play" id="p-play" title="Play (Space)"><svg class="icon"><use href="/static/icons.svg#play"/></svg></button>
|
|
45
|
+
<button class="btn-icon" id="p-fwd" title="Forward 15 s (→)"><svg class="icon"><use href="/static/icons.svg#fwd15"/></svg></button>
|
|
46
|
+
<span class="p-time" id="p-time">0:00</span>
|
|
47
|
+
<input class="p-scrub" id="p-scrub" type="range" min="0" max="1000" value="0" aria-label="Position">
|
|
48
|
+
<span class="p-time" id="p-dur">0:00</span>
|
|
49
|
+
<button class="btn-chip" id="p-speed" title="Playback speed">1×</button>
|
|
50
|
+
<audio id="audio" preload="none"></audio>
|
|
51
|
+
</div>
|
|
52
|
+
</div>
|
|
53
|
+
</div>
|
|
54
|
+
<div id="toast" class="toast" role="status" aria-live="polite"></div>
|
|
55
|
+
<div id="modal" class="modal" hidden></div>
|
|
56
|
+
</body>
|
|
57
|
+
</html>
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
6
|
+
<meta name="color-scheme" content="light dark">
|
|
7
|
+
<title>Wirenote</title>
|
|
8
|
+
<link rel="icon" href="/static/icon.svg" type="image/svg+xml">
|
|
9
|
+
<link rel="stylesheet" href="/static/app.css">
|
|
10
|
+
</head>
|
|
11
|
+
<body>
|
|
12
|
+
<main class="login">
|
|
13
|
+
<img src="/static/icon.svg" alt="" width="48" height="48">
|
|
14
|
+
<h1>Open Wirenote from your app menu</h1>
|
|
15
|
+
<p>For your privacy, Wirenote only opens through its launcher. Start <b>Wirenote</b> from the app menu, or run <code>wirenote open</code> in a terminal.</p>
|
|
16
|
+
<p class="hint">A login link works once and for one minute.</p>
|
|
17
|
+
</main>
|
|
18
|
+
</body>
|
|
19
|
+
</html>
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
|
+
Name: wirenote
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Private meeting notes for Linux: detects calls, records, transcribes and summarizes locally.
|
|
5
|
+
Project-URL: Homepage, https://github.com/knowhrishi/wirenote
|
|
6
|
+
Project-URL: Issues, https://github.com/knowhrishi/wirenote/issues
|
|
7
|
+
Project-URL: Changelog, https://github.com/knowhrishi/wirenote/blob/main/CHANGELOG.md
|
|
8
|
+
Author: Hrishikesh Jadhav
|
|
9
|
+
License-Expression: AGPL-3.0-or-later
|
|
10
|
+
License-File: LICENSE
|
|
11
|
+
Keywords: linux,meeting notes,pipewire,privacy,transcription,whisper
|
|
12
|
+
Classifier: Development Status :: 3 - Alpha
|
|
13
|
+
Classifier: Environment :: No Input/Output (Daemon)
|
|
14
|
+
Classifier: Environment :: Web Environment
|
|
15
|
+
Classifier: Intended Audience :: End Users/Desktop
|
|
16
|
+
Classifier: Operating System :: POSIX :: Linux
|
|
17
|
+
Classifier: Programming Language :: Python :: 3
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
22
|
+
Classifier: Topic :: Multimedia :: Sound/Audio :: Speech
|
|
23
|
+
Classifier: Topic :: Office/Business
|
|
24
|
+
Requires-Python: <3.15,>=3.11
|
|
25
|
+
Requires-Dist: anthropic>=2.3.0
|
|
26
|
+
Requires-Dist: dbus-fast>=2.0
|
|
27
|
+
Requires-Dist: faster-whisper>=1.2.1
|
|
28
|
+
Requires-Dist: icalendar>=7.3.0
|
|
29
|
+
Requires-Dist: recurring-ical-events>=3.8.2
|
|
30
|
+
Requires-Dist: sherpa-onnx>=2.0.0
|
|
31
|
+
Description-Content-Type: text/markdown
|
|
32
|
+
|
|
33
|
+
# Wirenote
|
|
34
|
+
|
|
35
|
+
Private meeting notes for Linux: detects calls, records, transcribes and summarizes locally.
|
|
36
|
+
|
|
37
|
+
When an app starts using your microphone for a call, Wirenote asks whether to record. After the call it writes a Markdown note with a transcript, who said what, a summary, decisions and action items. By default nothing leaves your computer: transcription runs with [faster-whisper](https://github.com/SYSTRAN/faster-whisper), speakers are told apart with [sherpa-onnx](https://github.com/k2-fsa/sherpa-onnx), and summaries come from a local model through [Ollama](https://ollama.com).
|
|
38
|
+
|
|
39
|
+

|
|
40
|
+
|
|
41
|
+
- **Notices calls by itself.** It watches PipeWire for apps that open the mic: Jitsi or any web call in Chrome, Brave or Firefox, Discord, Rocket.Chat, and whatever you add to `apps.toml`. No bot joins your call.
|
|
42
|
+
- **Two clean tracks.** Your mic and the system audio are recorded separately, so "Me" and the others are never mixed up.
|
|
43
|
+
- **Notes you own.** Plain Markdown files in `~/Meetings`, plus a local web app to search calls, play back moments, name speakers, tick off action items and ask questions about past meetings.
|
|
44
|
+
- **Private by default.** Files are readable only by you, the web app only by your user, and the cloud is opt-in. See [PRIVACY.md](https://github.com/knowhrishi/wirenote/blob/main/PRIVACY.md).
|
|
45
|
+
|
|
46
|
+
## Requirements
|
|
47
|
+
|
|
48
|
+
- Linux on **x86_64 or ARM64** with **PipeWire** (most current distributions), and a desktop with notifications. Tested on **KDE Plasma 6 (Wayland)**; GNOME and others should work but are not tested yet. macOS and Windows are not supported.
|
|
49
|
+
- **Python 3.11 to 3.14**, and [uv](https://docs.astral.sh/uv/). uv downloads a matching Python if yours is newer or older.
|
|
50
|
+
- **ffmpeg** (for playback in the web app).
|
|
51
|
+
- About 2 GB of disk for the speech models, downloaded once on the first note.
|
|
52
|
+
- Optional: [Ollama](https://ollama.com) for local summaries, or an Anthropic API key for summaries by Claude.
|
|
53
|
+
|
|
54
|
+
## Install
|
|
55
|
+
|
|
56
|
+
```sh
|
|
57
|
+
uv tool install wirenote
|
|
58
|
+
wirenote setup install # systemd user services and an app-menu entry; no root needed
|
|
59
|
+
wirenote doctor # checks PipeWire, notifications, models, summaries
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
To install from source instead: `uv tool install git+https://github.com/knowhrishi/wirenote`.
|
|
63
|
+
|
|
64
|
+
For local summaries, install Ollama and pull the default model:
|
|
65
|
+
|
|
66
|
+
```sh
|
|
67
|
+
ollama pull qwen3:4b
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
## Your first note
|
|
71
|
+
|
|
72
|
+
1. Join a call. After a few seconds a notification asks **Record** or **Ignore**.
|
|
73
|
+
2. Click **Record** and tell the others. If you set a consent line in Settings, it is now on your clipboard, ready to paste into the call chat.
|
|
74
|
+
3. Leave the call. A few minutes later "Meeting note ready" appears.
|
|
75
|
+
4. Click **Open note**, or open **Wirenote** from the app menu.
|
|
76
|
+
|
|
77
|
+
Everything else, from calendars to commands to files, is in [docs/usage.md](https://github.com/knowhrishi/wirenote/blob/main/docs/usage.md).
|
|
78
|
+
|
|
79
|
+
## Recording law
|
|
80
|
+
|
|
81
|
+
**You are responsible for getting consent; in many countries (for example Germany, §201 StGB) recording without it is a crime.** Wirenote never records without your click, shows a notification for as long as it records, and can copy a consent line for the call chat. Set it in the app's Settings.
|
|
82
|
+
|
|
83
|
+
## Privacy in brief
|
|
84
|
+
|
|
85
|
+
- Audio, transcripts, notes, voice prints and settings stay on your computer, readable only by your user.
|
|
86
|
+
- The meetings app listens on 127.0.0.1 and only lets your own user in.
|
|
87
|
+
- Speech models are downloaded once from Hugging Face. There is no telemetry.
|
|
88
|
+
- **Claude is opt-in.** If you choose it, transcripts and notes are sent to Anthropic; the app shows exactly what before you switch, and marks each call "Local" or "Sent to Claude".
|
|
89
|
+
|
|
90
|
+
Details: [PRIVACY.md](https://github.com/knowhrishi/wirenote/blob/main/PRIVACY.md). Security reports: [SECURITY.md](https://github.com/knowhrishi/wirenote/blob/main/SECURITY.md).
|
|
91
|
+
|
|
92
|
+
## Uninstall
|
|
93
|
+
|
|
94
|
+
```sh
|
|
95
|
+
wirenote setup uninstall # services and app-menu entry; your data stays
|
|
96
|
+
wirenote setup uninstall --purge # also recordings, transcripts and settings (asks first); notes stay
|
|
97
|
+
uv tool uninstall wirenote
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
## Contributing
|
|
101
|
+
|
|
102
|
+
Bug reports and pull requests are welcome; see [CONTRIBUTING.md](https://github.com/knowhrishi/wirenote/blob/main/CONTRIBUTING.md). Pull requests need a one-time [Contributor License Agreement](https://github.com/knowhrishi/wirenote/blob/main/CLA.md), so that the project can later offer a supported edition for companies; your contributions stay available as open source. Please follow the [code of conduct](https://github.com/knowhrishi/wirenote/blob/main/CODE_OF_CONDUCT.md).
|
|
103
|
+
|
|
104
|
+
## License
|
|
105
|
+
|
|
106
|
+
Wirenote is free software under the [GNU Affero General Public License v3.0 or later](https://github.com/knowhrishi/wirenote/blob/main/LICENSE). Third-party components and models are listed in [THIRD_PARTY.md](https://github.com/knowhrishi/wirenote/blob/main/THIRD_PARTY.md).
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
wirenote/__init__.py,sha256=LTjjaoSmwHU7f_Hsw91GmLadh4Xz9oyQZz4BMLwLs3A,106
|
|
2
|
+
wirenote/cli.py,sha256=BNWtb522K1oZXDcuiqiXZ_KEXlHbpCE_xuaGULKL2_E,9957
|
|
3
|
+
wirenote/calendar/__init__.py,sha256=Zu1q2FjKsjELUZBAuFN1sP3nJiry2BbPamMdmUPELlY,84
|
|
4
|
+
wirenote/calendar/ics.py,sha256=QvXQSmXdspDZtPftmPcIDjkQQczumloddQm3EQcfGyk,9531
|
|
5
|
+
wirenote/capture/__init__.py,sha256=Zu1q2FjKsjELUZBAuFN1sP3nJiry2BbPamMdmUPELlY,84
|
|
6
|
+
wirenote/capture/recorder.py,sha256=C5oJSy_BF5tNbI74KdpaxWo0Qytxx_tlUru3Va-fdwY,10699
|
|
7
|
+
wirenote/capture/wav.py,sha256=xHv7VwKZ58FIugcXUTvP4rAMvQ6uRFNjl9DIetbiRjo,2104
|
|
8
|
+
wirenote/config/__init__.py,sha256=Zu1q2FjKsjELUZBAuFN1sP3nJiry2BbPamMdmUPELlY,84
|
|
9
|
+
wirenote/config/apps.py,sha256=mfKp43Ni8VKVokb5s_nfCLWulxzA3kTdSK7Ie7b2eao,5247
|
|
10
|
+
wirenote/config/migrate.py,sha256=aqpZ-g-fHja_Un5lmxcGuyQeJLUo4FeNJUxRyAWZIcY,4791
|
|
11
|
+
wirenote/config/perms.py,sha256=Nk-NnnAnkGTCjuB3soQsgVJPqDrBKVTJJybTKxpcsQw,2220
|
|
12
|
+
wirenote/config/secrets.py,sha256=x3E7jognlL9-yfSG12Vrx1ZxPU1PwrqzK97nNs0DSqo,3590
|
|
13
|
+
wirenote/config/settings.py,sha256=EQhwhvzC-nKkcCAcepB-yTFml-JFDrpm3in8uTVipqw,7506
|
|
14
|
+
wirenote/config/vocabulary.py,sha256=xqkee8z1MashHWskmV27sec3yQ6qXFi6SadRhx5ZdnA,1006
|
|
15
|
+
wirenote/data/wirenote-ui.service,sha256=B80b573Cn6oqpUykq_IiI7hiBOK8h3ClGOL0jmgLNx8,418
|
|
16
|
+
wirenote/data/wirenote.desktop,sha256=BQW-5jXbniiCTsRQZV4s5sAlHcZmvPH2BC5et-90knY,249
|
|
17
|
+
wirenote/data/wirenote.service,sha256=Qj5CmWa_oAbggiOa8EgOFEz8FZPvE9cpWZP5TnCxUg0,439
|
|
18
|
+
wirenote/detector/__init__.py,sha256=Zu1q2FjKsjELUZBAuFN1sP3nJiry2BbPamMdmUPELlY,84
|
|
19
|
+
wirenote/detector/core.py,sha256=9HqoizACeR2fyfcSxEfQJBS4aM2yOXIqTYGtsFZ6sfc,4877
|
|
20
|
+
wirenote/detector/daemon.py,sha256=ohdw9lV1hvVfJpnjUfoboOOVPNylYS3U3yGpEwBtbD4,34909
|
|
21
|
+
wirenote/detector/graph.py,sha256=2b4WLBB3YYctCoM7q3gsPkmpcNtsAk2dr6Zf2aNiLXk,3429
|
|
22
|
+
wirenote/detector/identity.py,sha256=ckiPjRyFd-KpzxB-IgIHOQ5eA2lU6mBPeqrzqvgNwjQ,6692
|
|
23
|
+
wirenote/detector/streams.py,sha256=SW25nog3Oheqmwx7bGFXGSLy0_BgwrOmgB9Biqw-1ow,2338
|
|
24
|
+
wirenote/detector/tracker.py,sha256=G3iGpaz55Ara5hgf55dAYwaP9XkI_7oviSXUOIwC170,11701
|
|
25
|
+
wirenote/net/__init__.py,sha256=Zu1q2FjKsjELUZBAuFN1sP3nJiry2BbPamMdmUPELlY,84
|
|
26
|
+
wirenote/net/peer.py,sha256=70uTGA3mhLDSNCLI22nNafF1PEQczQrjCaW2541kID4,3803
|
|
27
|
+
wirenote/notify/__init__.py,sha256=Zu1q2FjKsjELUZBAuFN1sP3nJiry2BbPamMdmUPELlY,84
|
|
28
|
+
wirenote/notify/clipboard.py,sha256=9DdkzYx0BrzIeo8B_51CMK_5Tzfq6cGtbQbznV0AmPE,1663
|
|
29
|
+
wirenote/notify/dbus.py,sha256=lAT8DcJDsAH1qEkQWMm-YswlzMQ8O3ed9LmE6ScNfh0,3976
|
|
30
|
+
wirenote/process/__init__.py,sha256=Zu1q2FjKsjELUZBAuFN1sP3nJiry2BbPamMdmUPELlY,84
|
|
31
|
+
wirenote/process/jobs.py,sha256=IveFIM-g2bXx1JZUtmrdOT9BSnw2A62IRYXt6PlIFI4,4510
|
|
32
|
+
wirenote/process/merge.py,sha256=JRAPu7ZI-Z5aDyd-95V1OZIEyp6H8HgKkC_Xp0OloEo,3032
|
|
33
|
+
wirenote/process/models.py,sha256=3uDRd_ZrCzKJHPtTOMLFT7CkCJO1mBTNI4P2AB6f62U,2233
|
|
34
|
+
wirenote/process/note.py,sha256=ljjhXYeMoWiL9ZCD36YC7UUnT-4OoxbpOBjuiWhlaJw,5193
|
|
35
|
+
wirenote/process/speakers.py,sha256=UmhKQR4AidCbdLAtEKdIrK5OC-vtnbLZHCDYhOYeFcc,11867
|
|
36
|
+
wirenote/process/summarize.py,sha256=1Ej5N2pM2Qh9SXYDNPzJFUPGYzypMzXy90bGUL8y17U,12633
|
|
37
|
+
wirenote/process/transcribe.py,sha256=YFirPDI4DZiAFKLQnzpQWOQSDFCsPtmQjjAHFuBLLQ8,4500
|
|
38
|
+
wirenote/process/worker.py,sha256=3_oAq-D6YyxCIsJI1e0AkcYycFkB713QeGmWk9ybFiA,10439
|
|
39
|
+
wirenote/tools/__init__.py,sha256=Zu1q2FjKsjELUZBAuFN1sP3nJiry2BbPamMdmUPELlY,84
|
|
40
|
+
wirenote/tools/dump_streams.py,sha256=ktScgshaJ9AOYcIAhdowhMpmAX2YK5zOdZu2VucINhw,24264
|
|
41
|
+
wirenote/tools/install.py,sha256=J1YSC3CstFrTKDYzqhUc0yJPt39aavz1Iv_I-aFoNB8,5074
|
|
42
|
+
wirenote/tools/setup.py,sha256=DN9dD_nPK6rGgBzwrZL50_5AF6AHhGhen5ufueE1Y30,14247
|
|
43
|
+
wirenote/ui/__init__.py,sha256=Zu1q2FjKsjELUZBAuFN1sP3nJiry2BbPamMdmUPELlY,84
|
|
44
|
+
wirenote/ui/data.py,sha256=gUjRIB2SSmh0vz9aZ_UvXY1lzK75Isn0WS3kYTfwGIk,35095
|
|
45
|
+
wirenote/ui/launch.py,sha256=74QFlt6ARHqol_TdlSiR4piKCLRjN-MV8uMj6-eBuos,2551
|
|
46
|
+
wirenote/ui/server.py,sha256=lLcjSG-7dFlUYV2euFWzN3RH_5pTHxZKciq_JNGm4V4,18683
|
|
47
|
+
wirenote/ui/static/app.css,sha256=EmeL783_EywsNgj1Yqpc7OMiP4spW-4UpF0UdYkiKAg,30646
|
|
48
|
+
wirenote/ui/static/app.js,sha256=O67j5I-6yp-TGBF4GV0KizmHza_ABc-wrm7Pla5hyAE,61759
|
|
49
|
+
wirenote/ui/static/icon.svg,sha256=eIQBVeqEK-CeYAy0ca55d6CbDlRvcXSPp6TMSk_cmro,310
|
|
50
|
+
wirenote/ui/static/icons.svg,sha256=7QYCdZKVAOGqrwZ_hX2IKsSOkhyTcpjMQx0kqVBfHlc,4938
|
|
51
|
+
wirenote/ui/static/index.html,sha256=f8ZPH4KTAJI7igU9PD7WFgnfjSWcaizokciHTEM9CNM,3161
|
|
52
|
+
wirenote/ui/static/login.html,sha256=YJMz4SyEuQebBGj-zSdtM3Ty_PydTrSP5k1nbWmT9Wg,728
|
|
53
|
+
wirenote/ui/static/fonts/OFL.txt,sha256=GKq_GQhIcl4ldu77XCm6BqrBAp0CEyJSp_MS6sLlDPM,4314
|
|
54
|
+
wirenote/ui/static/fonts/inter-latin-ext.woff2,sha256=SPVA-3EWa_ZaD-GHpx-tUAxDFD0-LkIDj1J-OMeG6Q8,74328
|
|
55
|
+
wirenote/ui/static/fonts/inter-latin.woff2,sha256=8FLuRMNyjf0jq6ikVnFQvDFNI5AwJvu2rQiUIsLfVq8,48444
|
|
56
|
+
wirenote-0.1.0.dist-info/METADATA,sha256=cMn5mDn8BuZh5QvbI-UoTj90G1qDbq8e3E9kBrge18Q,6335
|
|
57
|
+
wirenote-0.1.0.dist-info/WHEEL,sha256=W3fkpkm7-wf9vBI5Z-7s0eWkeM-spu78I8Neb98DeEg,87
|
|
58
|
+
wirenote-0.1.0.dist-info/entry_points.txt,sha256=pNusZf7zY1eHKHXFEuCVRlsTybEvbqvc1DTzT9Y9z38,47
|
|
59
|
+
wirenote-0.1.0.dist-info/licenses/LICENSE,sha256=DZak_2itbUtvHzD3E7GNUYSRK6jdOJ-GqncQ2weavLA,34523
|
|
60
|
+
wirenote-0.1.0.dist-info/RECORD,,
|